gpt4 book ai didi

java - Selenium 3.0 预期条件问题

转载 作者:行者123 更新时间:2023-11-30 06:51:24 26 4
gpt4 key购买 nike

使用如下的 click() 实现,selenium 会像点击按钮一样工作,并期待下一个屏幕。但是网页不会收到点击,因此不会弹出下一个屏幕。我真的不明白这是怎么回事,也许你们中的一些人以前遇到过这个问题。这是点击实现:

public static void click(WebDriver driver, By by) {
new WebDriverWait(driver, DEFAULT_WAIT_FOR_ELEMENT)
.until(ExpectedConditions.elementToBeClickable(by))
.click();
}

注意: thread.sleep 为 2 秒时,按钮确实被点击了。但众所周知,没有人想要 thread.sleep。

注意 2:这个问题在 selenium 2.53 上不会经常发生

注意 3:我目前使用的是 FireFox 49.0.1,带有 geckodriver 0.11.1

最佳答案

我会给你一些例子来说明我是如何实现我的等待的,也许它会帮助你变得更加灵活。

我创建了一个带有默认时间的时间参数的基本 waitUntil 方法。

    private void waitUntil(ExpectedCondition<WebElement> condition, Integer timeout) {
timeout = timeout != null ? timeout : 5;
WebDriverWait wait = new WebDriverWait(driver, timeout);
wait.until(condition);
}

然后我可以使用该辅助方法来创建等待显示或等待可点击。

    public Boolean waitForIsDisplayed(By locator, Integer... timeout) {
try {
waitUntil(ExpectedConditions.visibilityOfElementLocated(locator),
(timeout.length > 0 ? timeout[0] : null));
} catch (org.openqa.selenium.TimeoutException exception) {
return false;
}
return true;
}

您可以对 elementToBeClickable 执行类似的操作。

    public Boolean waitForIsClickable(By locator, Integer... timeout) {
try {
waitUntil(ExpectedConditions.elementToBeClickable(locator),
(timeout.length > 0 ? timeout[0] : null));
} catch (org.openqa.selenium.TimeoutException exception) {
return false;
}
return true;
}

所以我们可以制作一个点击方法来执行我们的点击操作:

    public void click(By locator) {
waitForIsClickable(locator);
driver.findElement(locator).click();
}

我制作 waitForIsDisplayed 和 waitForIsClickable 的原因是因为我可以在我的断言中重用它们以减少它们的脆弱性。

assertTrue("Expected something to be found, but that something did not appear",
waitForIsDisplayed(locator));

此外,您可以使用方法中指定的默认时间(5 秒)的等待方法,或者可以这样做:

waitForIsDisplayed(locator, 20);

在抛出异常之前最多等待 20 秒。

关于java - Selenium 3.0 预期条件问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40110192/

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