2015-01-02 31 views
9

Trong khi viết bài kiểm tra selen bằng Python, tôi đã quen với việc sử dụng Explicit Waits rất nhiều vì đã chờ đợi một trang để tải, hoặc vì đã chờ đợi một yếu tố để trở thành có thể nhìn thấy, hoặc có thể click vv:điều kiện dự kiến ​​trong thước đo

from selenium.webdriver.common.by import By 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 

element = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "myDynamicElement")) 
) 

Các khái niệm then chốt ở đây là cung cấp một Điều kiện Dự kiến ​​ chờ, có nhiều loại:

Sử dụng điều kiện dự kiến ​​làm cho mã sạch hơn và đáng tin cậy hơn so với sử dụng sleep s với khoảng thời gian mã hóa cứng.

Bây giờ, chúng tôi đang chuyển đổi cơ sở hạ tầng kiểm tra đầu cuối của mình thành protractor rất nhiều.

Có tương tự Expected Conditions trong thước đo góc có trong python-selenium hoặc java-selenium? Nếu không, cách kinh điển để chờ một điều kiện rõ ràng trong protractor là gì?

Tôi đã xem qua protractor documentation và không tìm thấy gì về nó.

+0

Đây có phải là điều bạn muốn không? https://github.com/angular/protractor/pull/1703 – hankduan

+0

@hankduan chỉ khi việc xây dựng sẽ không thành công :) Nói đùa, chính xác, siêu tuyệt vời! Nếu bạn có thời gian - hãy đăng câu trả lời về tính năng ở đây, nếu không - tôi có thể làm điều đó istead, lmk. Cảm ơn bạn! – alecxe

Trả lời

15

Khi feat(expectedConditions) là trong (có thể là thước đo 1.7), bạn có thể làm:

var EC = protractor.ExpectedConditions; 
var e = element(by.id('xyz')); 
browser.wait(EC.presenceOf(e), 10000); 
expect(e.isPresent()).toBeTruthy(); 

Xin lưu ý tuy nhiên, nếu bạn đang làm việc với một ứng dụng kiễu góc và thử nghiệm của bạn đòi hỏi những chờ đợi có điều kiện, đó là một lá cờ đỏ lớn cho những gì bạn đang làm, như thước đo góc phải xử lý chờ đợi nguyên bản.

+1

Về nhận xét cuối cùng của bạn về lá cờ đỏ .. làm cách nào bạn đợi một phần tử không thể nhấp (= bị vô hiệu hóa hoặc vô hình) hiện tại trong thước đo 1,5? Cảm ơn bạn. – alecxe

+0

Lý tưởng nhất là khi trang của bạn được giải quyết (tức là waitForAngular kết thúc như một phần của thước đo góc), không có gì trong trang của bạn sẽ thay đổi. (I E.phần tử của bạn sẽ có thể nhấp hoặc không, và chờ đợi sẽ không làm cho trạng thái của nó thay đổi). Tôi biết có những trường hợp điều này không đúng, như một số hình động và khi setTimeout được tham gia (mặc dù lý tưởng, bạn muốn thay thế setTimeout bằng dịch vụ khoảng thời gian). Vì vậy, có những trường hợp bạn phải thêm chờ đợi ngay cả đối với các ứng dụng góc cạnh, nhưng phần lớn thời gian, đó là lỗi trong bài kiểm tra. – hankduan

+1

@hankduan: Dường như các thử nghiệm của chúng tôi không thường xuyên nếu không có các điều kiện mong đợi này (ứng dụng góc cạnh thuần túy). Đôi khi ngay cả với. Tôi tự hỏi liệu có ai khác đang trải qua sự không nhất quán này không. – VSO

1

Trong thước đo góc, bạn có thể sử dụng browser.wait(fn, timeout).

Ví dụ:

var element = by.id('myDynamicElement'); 
browser.wait(function() { 
    return ptor.isElementPresent(element); 
}, 10000); 

expect(ptor.isElementPresent(element)).toBeTruthy(); 
+0

Vâng, tôi nghĩ rằng đây là nó, mặc dù tôi thực sự thiếu tất cả các điều kiện dự kiến ​​- các phím tắt được cung cấp bởi các ràng buộc ngôn ngữ selen khác. Cảm ơn bạn! – alecxe

+0

FYI, tôi đã tạo một vấn đề github trên bộ theo dõi vấn đề của thước đo góc: [Điều kiện dự kiến ​​trong thước đo góc] (https://github.com/angular/protractor/issues/1681). – alecxe

+0

OK. Tốt - Cảm ơn – Surya

0
waitForControlVisible(locator: string, timeout: number) { 
    try { 
     const element = this.findElement(locator); 
     const condition = browser.ExpectedConditions; 
     browser.wait(condition.visibilityOf(element), timeout); 
    } catch (e) { 
     console.log(e.message); 
     console.error('Control not visible.', e); 
    } 
} 

Có thể giúp bạn, chờ hiển thị phần tử trong DOM.

+0

Xin chào, tôi đã cập nhật lại. Cảm ơn bạn đã đề cập. –

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