我刚接触硒。我的应用程序是2004-2006年开发的非常老的应用程序,其他所有操作都打开了一个新窗口。我正在使用用于Internet Explorer的Selenium Web驱动程序来编写自动化测试用例。
我使用driver.switchTo().window(windowname);
但是,当我的测试在其他应用程序的响应时间有时会不同的环境中运行时,测试用例会失败。因此,有时我的测试用例通过了,而其他时候又失败了。目前,我正在使用Thread.sleep(THRESHOLD)
,我知道它的坏习惯。我知道WebDriverWait
和三个等待隐式,显式,流利。但是我的问题是他们没有一个人无限期地等待着我的回应。每次等待都需要一个阈值,直到页面准备就绪,并且响应未超出阈值时,它才会失败。无论如何,我可以动态地等待响应,有时响应是即时的,有时则是延迟的。在所有情况下,我都不应输入任何阈值,并且测试用例应等待响应,而不管响应时间如何。
答案 0 :(得分:1)
根据您的问题如何等待直到我打开的窗口处于就绪状态,值得一提的是 AUT(正在测试的应用程序)理想情况下打开新窗口/标签需要多长时间的基准。
现在,如@KDM所示, WebDriverWait 构造函数为:
textarea
DEFAULT_TEXT_AREA_OPTIONS = { "cols" => 40, "rows" => 20 }
WebDriverWait(WebDriver driver, java.time.Clock clock, Sleeper sleeper, long timeOutInSeconds, long sleepTimeOut)
在所有三个构造函数中, timeOutInSeconds 均为WebDriverWait(WebDriver driver, long timeOutInSeconds)
类型,其 MAX 值为 9223372036854775807 ,您可以使用太。
在以下示例中,使用WebDriverWait(WebDriver driver, long timeOutInSeconds, long sleepInMillis)
类型的 MAX_VALUE 值成功投射了 WebDriver 实例(即 driver ):
代码块:
long
控制台输出:
long
最后,当您使用量身定制的 Explicit Wait 访问新打开的窗口/标签时,请始终使用{{3}中的numberOfWindowsToBe()方法},然后按如下所示收集 windowHandles :
示例代码块(Java):
System.out.println("Long.MAX = " + Long.MAX_VALUE);
System.setProperty("webdriver.gecko.driver", "C:\\Utility\\BrowserDrivers\\geckodriver.exe");
WebDriver driver = new FirefoxDriver();
WebDriverWait wait_me = new WebDriverWait(driver, 9223372036854775807L);
System.out.println("Application Opened");
答案 1 :(得分:0)
此代码一直等到特定的ID可见为止。并在引发异常之前30秒初始化:
WebDriverWait wait = new WebDriverWait(driver, 30);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("ifmail")));
答案 2 :(得分:0)
您可以使用以下代码段:
public boolean softWaitForPageToLoad() {
try {
new WebDriverWait(getDriver(), 60).until(
webDriver -> ((JavascriptExecutor) webDriver).executeScript("return document.readyState").toString().matches("interactive|complete"));
return true;
} catch (Exception e) {
return false;
}
}
此处getDriver()函数返回现有的驱动程序实例。请用您的实现替换它。