2015-10-19 19 views
8

Có phải .pause(1000) thực sự là phương pháp hay nhất để chờ gửi biểu mẫu? Tôi đang tìm cách gửi biểu mẫu đáng tin cậy mà không cần phải biết chi tiết về trang xuất hiện như là kết quả của việc gửi biểu mẫu.Đồng hồ bấm giờ: Cách tốt hơn `.pause (1000)` để tránh các thử nghiệm giòn?

Ví dụ từ home page sử dụng .pause(1000) đợi để gửi biểu mẫu, và trớ trêu thay không hoạt động nữa, nhưng phiên bản này với một phiên bản css-selector sửa đổi không:

Vấn đề với .pause(1000) để đảm bảo biểu mẫu được gửi là cách xác định thời gian chờ. Nó hoặc là sẽ làm cho các bài kiểm tra của chúng tôi chậm nếu thời gian chờ quá dài hoặc làm cho chúng trở nên giòn nếu thời gian chờ quá ngắn. Phần cứng chậm, các quy trình khác trên máy chủ, liên kết mặt trăng, bạn đặt tên nó có thể ảnh hưởng đến những giá trị thời gian chờ "tốt" nào.

Có cách nào tốt hơn để nói: "Hãy đợi gửi biểu mẫu trước khi tiếp tục"?

Thay vào đó, chúng tôi đã thử nghiệm với .waitForElementVisible('body', VERY_LONG_TIMEOUT) và có vẻ như hoạt động và không mất nhiều thời gian hơn mức cần thiết, nhưng tôi đoán điều này cũng không đáng tin cậy. Điều đó chỉ hoạt động bởi vì trang "hiện tại" đã biến mất (lần này) và vì vậy chúng tôi đang chờ cơ thể của trang "mới" xuất hiện. Và ngày mai một số điều kỳ lạ sẽ xảy ra và nó sẽ nhanh hơn bình thường và .waitForElementVisible('body') sẽ trở lại ngay lập tức vì trang cũ vẫn còn đó. == cũng giòn. Đúng không?

Nếu có, có cách nào ít dễ vỡ hơn .pause(1000) hoặc .waitForElementVisible('body')? Đặc biệt nếu chúng tôi không biết nhiều về trang được trả lại sau khi gửi, vì vậy chúng tôi không thể .waitForElementVisible('.element-only-on-new-page')?

Lý do tôi đang hỏi là bài kiểm tra của chúng tôi thực sự trông giống như:

module.exports = { 
    'Test1 - submit form' : function (client) { 
    client 
     .url('http://some/url') 
     .waitForElementVisible('body', 1000) 
     .assert.title('MyTitle') 
     .setValue('input[name="widget"]', 'value') 
     // Click to submit the form to change some internal state 
     .click('button[name="postForm"]') 

     // Form got submitted fine in chromium 42 every single time. chromium 
     // 45 needs additionally: 
     // 
     // .pause(1000) 
     // or 
     // .waitForElementVisible('body', 1000) 
    } 
    'Test2 - continue using new value' : function (client) { 
    client 
     .url('http://some/other/url') 
     .waitForElementVisible('body', 1000) 
     .assert.title('MyOtherTitle') 
     .setValue('input[name="widget2"]', 'value2') 
     .waitForElementVisible('.bla-bla', 1000) 
    } 
}; 

này đã phá vỡ vì biểu mẫu ở 'http://some/url' không còn được đệ trình trong crom 45 :-(Chúng tôi muốn tìm một giải pháp tốt, không chỉ là giải pháp có vẻ hoạt động trong điều kiện ngày nay ...

Trả lời

5

Bạn đã thử chuỗi waitForElementNotVisible với waitForElementVisible cho html nội dung? Điều này chỉ nên chờ thời gian thích hợp ở mỗi bước. một số thử nghiệm để chắc chắn rằng nó không phải là giòn mặc dù. để theo dõi "chuyển đổi trang mô phỏng" trong một ứng dụng trang đơn.

ví dụ:

module.exports = { 
    'Test1 - submit form' : function (client) { 
    client 
     .url('http://some/url') 
     .waitForElementVisible('body', 1000) 
     .assert.title('MyTitle') 
     .setValue('input[name="widget"]', 'value') 
     // Click to submit the form to change some internal state 
     .click('button[name="postForm"]') 
     .waitForElementNotVisible('body', 5000) 
     .waitForElementVisible('body', 10000) 
    } 
}; 
+0

Có ý tưởng. Tôi tự hỏi liệu điều này sẽ không dễ vỡ theo một cách khác hay không: Điều gì xảy ra nếu máy chạy đồng hồ bấm giờ chậm và những máy chạy selen và máy chủ web nhanh. Tôi tưởng tượng rằng sau đó trang có thể làm mới nhanh chóng, để cuộc gọi '.waitForElementNotVisible()' hết thời gian chờ. –

+1

' 'biến mất và tái xuất hiện trong SPA? funKY! :-) –

+0

Có lẽ, tôi khuyên bạn nên thử nghiệm. Có lẽ thử một máy ảo và điều khiển nó bằng cách nào đó? Chúng tôi đã tìm thấy Nightwatch để nhanh chóng thu thập các thay đổi DOM. Tôi đã điều chỉnh mã từ SPA của chúng tôi, chúng tôi có '#content div' được cập nhật (ẩn và hiển thị) để chuyển tiếp trang không phải là' nội dung'. Tôi cũng làm một kiểm tra cho tiêu đề để chắc chắn rằng nó trên trang bên phải khi nó "xuất hiện trở lại". – u02sgb

Các vấn đề liên quan