在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并没有发现任何相关信息。
答案 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中的元素可见性。