量角器的预期条件

Expected conditions in protractor

在用 Python 编写 selenium 测试时,我习惯于使用 Explicit Waits 大量等待页面加载,或等待元素变得可见或可点击等:

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"))
)

这里的关键概念是提供一个预期条件等待,有多种类型:

与使用具有硬编码时间间隔的 sleep 相比,使用预期条件使代码更清晰、更可靠。

现在,我们正在将我们的端到端测试基础架构大量切换到 protractor

量角器中是否有与 python-selenium 中相似的 Expected Conditionsjava-selenium?如果不是,在 protractor 中显式等待条件的规范方法是什么?

我已经查看了 protractor documentation,但一无所获。

在量角器中您可以使用 browser.wait(fn, timeout)

示例:

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

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

一旦 feat(expectedConditions) 进入(可能是量角器 1.7),您可以:

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

不过请注意,如果您正在使用 Angular 应用程序并且您的测试需要这些有条件的等待,那么对于您正在做的事情来说这是一个很大的危险信号,因为量角器应该在本机处理等待。

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);
    }
}

也许可以帮助您,等待 DOM 中的元素可见性。