量角器的预期条件

时间:2015-01-02 04:22:57

标签: python testing selenium selenium-webdriver 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

量角器中的Expected Conditions是否与python-selenium中的protractor相似 java-selenium?如果没有,在{{1}}中明确等待条件的规范方法是什么?

我查看了protractor documentation并没有发现任何相关信息。

3 个答案:

答案 0 :(得分:17)

一旦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应用并且您的测试需要这些有条件的等待,那么对于您正在做的事情来说,这是一个很大的红旗,因为量角器应该处理本地等待。

答案 1 :(得分:1)

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

示例:

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

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

答案 2 :(得分:-1)

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中的元素可见性。