2015-04-30 21 views
11

Tôi đã phát triển các thử nghiệm tự động trong Thước đo trong một thời gian và giống như nhiều người trong số các bạn, tôi đã chạy vào những khoảng trống chỉ có thể vượt qua với cầu nối browser.sleep(). Tôi không phải là một fan hâm mộ của những thứ mã hóa cứng như thế này, nhưng nếu nó là một điều cần thiết tôi sẽ.Thời gian chờ của thước đo

Các bài kiểm tra tôi đã phát triển đã đưa tôi đến một điểm mà mỗi browser.sleep(1000) có tác động lớn đến thời gian chạy của tôi. Các bài kiểm tra hiện đang kiểm tra quyền cho các tài khoản khác nhau (128 chính xác) và điều này liên quan đến việc đăng nhập và đăng xuất trong khi kiểm tra xem mọi tài khoản có và chưa nhận được quyền truy cập vào.

Trang web tôi đang thử nghiệm là một ứng dụng AngularJS thuần túy, trong mắt tôi, nên thực hiện phương pháp không được sử dụng browser.sleep() vì có phương thức browser.waitForAngular() chờ chính xác cho đến khi trang được tải đầy đủ so với browser.sleep(). thời gian và nếu trang web của bạn không được tải trong thời gian đó (điều đó xảy ra), bạn sẽ có một thử nghiệm không nhất quán (không ai thích mâu thuẫn).

Nghiên cứu đã khiến tôi tin rằng browser.waitForAngular() không tính đến hoạt ảnh tài khoản và các tính năng tốn thời gian liên quan vì chúng không liên quan đến AngularJS nhưng điều này không được triển khai trên trang web của chúng tôi. Ngoài ra, waitForAngular() về cơ bản chờ cho $digest, $http$timeout.

Điều tôi đang hỏi là đây là thứ được coi là mất mát có thể chấp nhận được vì Thước đo góc nhìn chung là tuyệt vời hoặc có cái gì tôi nhìn thấy ở đây không?

TL; DR: Có giải pháp nào để cho phép chúng tôi không giải quyết cho browser.sleep() không?

Nguồn: Protractor Timeout Docs, Timeout-spec.js (protractor docs), Issue909, Issue279, Issue92, StackQuestion1

+1

Tôi đã trải qua các thời gian chờ liên tục bị đổ lỗi trong Câu hỏi thường gặp về sử dụng $ timeout để bỏ phiếu. Tôi đi lang thang nếu thất bại của nó cũng trong trường hợp nó không bỏ phiếu. Đối với nhóm của tôi, nó trở nên sáng hơn khi chúng ta dựa vào các thành phần Vật liệu góc. Chúng nặng về tương tác hoạt ảnh với việc sử dụng hết thời gian chờ $ (func, 0). –

Trả lời

11

Nếu bạn có thể đưa ra một số loại xét nghiệm để xác định xem bất cứ điều gì bạn đang chờ đợi đã hoàn tất, bạn có thể sử dụng browser.wait. Lấy ý tưởng từ từ http://docsplendid.com/archives/209, bạn có thể vượt qua một hàm trả về một lời hứa mà giải quyết để true hoặc false, chẳng hạn như một sử dụng isPresent

browser.wait(function() { 
    return element(by.id('some-element')).isPresent(); 
}, 1000); 

hoặc nếu bạn có một số điều kiện phức tạp hơn bạn có thể sử dụng lời hứa chaining:

browser.wait(function() { 
    return element(by.id('some-element')).isPresent().then(function(isPresent) { 
    return !isPresent; 
    }); 
}, 1000); 

và luồng lệnh sẽ đợi, liên tục gọi hàm được chuyển đến wait, cho đến khi lời hứa trả về.

+1

Bạn cũng có thể sử dụng ExpectedConditions để đợi những thứ như phần tử hiện diện, có thể nhấp, chứa văn bản, v.v. http://www.protractortest.org/#/api?view=ProtractorExpectedConditions – floribon

0

Đây là cách nếu bạn muốn thực hiện bất kỳ hành động nào khi có phần tử hoặc muốn đợi cho đến khi có mặt trên trang.

element(by.id).isPresent().then(function(result) { 
      if (result) { 
       nextButton.click(); 
      } 
      else{ 
       browser.wait(function() { 
        return browser.isElementPresent(element(by.id)); 
       },50000); 
      } 
     }).then(function() { 
      nextButton.click(); 
     }); 

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