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

标签 java selenium selenium-webdriver webdriver wait

使用隐式等待时, 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/

相关文章:

java - 解决数组越界问题

java - 尝试查找元素时 Selenium NoSuchElementException

python - 如何通过python中的代理 Selenium 访问国家/地区受限网站

java - 如何使用 p :graphicImage with StreamedContent inside ui:repeat/h:dataTable/p:dataTable?

java - 具有不区分大小写前缀的正则表达式

c# - 元素不可见

c# - 无法初始化 AndroidDriver

java - 如何编写带有条件的 xpath 以获得满足我要求的所需网络元素列表

java - 使用 Jersey 测试 RESTful Web 服务时出现 HTTP 状态 404

java - 如何从另一个类访问另一个类的 void 方法的变量