gpt4 book ai didi

java - 使用 WebDriver 暂时绕过隐式等待

转载 作者:IT老高 更新时间:2023-10-28 20:40:26 24 4
gpt4 key购买 nike

使用隐式等待时, as advised here ,我仍然有时想断言元素的立即不可见或不存在。

换句话说,我知道应该隐藏一些元素,并且希望我的测试快速做出该断言,而无需花费几秒钟,因为(否则有用的)隐式等等。

我尝试过的一件事是这样的辅助方法:

// NB: doesn't seem to do what I want
private boolean isElementHiddenNow(String id) {
WebDriverWait zeroWait = new WebDriverWait(driver, 0);
ExpectedCondition<Boolean> c = invisibilityOfElementLocated(By.id(id));
try {
zeroWait.until(c);
return true;
} catch (TimeoutException e) {
return false;
}
}

但是在上面的代码中,对until()的调用只在隐式等待时间过去后返回,也就是说,它没有做我想要的。

这是迄今为止我发现的唯一可行的方法:

@Test
public void checkThatSomethingIsNotVisible() {
turnOffImplicitWaits();
// ... the actual test
turnOnImplicitWaits();
}

...例如在哪里turnOffImplicitWaits() 是常用 Selenium 父类(super class)中的帮助器:

protected void turnOffImplicitWaits() {
driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS);
}

但我认为这不是很优雅。 有什么更简洁的方法可以偶尔绕过隐式等待吗?

最佳答案

鉴于 Selenium 似乎并没有直接提供我想要的东西(基于 Mike Kwan 和 Slanec 所说的),我现在使用这个简单的辅助方法:

protected boolean isElementHiddenNow(String id) {
turnOffImplicitWaits();
boolean result = ExpectedConditions.invisibilityOfElementLocated(By.id(id)).apply(driver);
turnOnImplicitWaits();
return result;
}

private void turnOffImplicitWaits() {
driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS);
}

private void turnOnImplicitWaits() {
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
}

如果元素被隐藏或根本不存在,该方法返回true;如果可见,则返回 false。无论哪种方式,检查都会立即完成。

使用上述方法至少比通过调用 turnOffImplicitWaits()turnOnImplicitWaits() 乱扔测试用例本身要干净得多。

有关相同方法的微调版本,另请参阅以下答案:

关于java - 使用 WebDriver 暂时绕过隐式等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11034710/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com