如何使用selenium-webdriver

时间:2018-08-16 08:53:30

标签: selenium selenium-webdriver webdriver window-handles webdriverwait

我刚接触硒。我的应用程序是2004-2006年开发的非常老的应用程序,其他所有操作都打开了一个新窗口。我正在使用用于Internet Explorer的Selenium Web驱动程序来编写自动化测试用例。

我使用driver.switchTo().window(windowname);

在打开的窗口之间切换

但是,当我的测试在其他应用程序的响应时间有时会不同的环境中运行时,测试用例会失败。因此,有时我的测试用例通过了,而其他时候又失败了。目前,我正在使用Thread.sleep(THRESHOLD),我知道它的坏习惯。我知道WebDriverWait和三个等待隐式,显式,流利。但是我的问题是他们没有一个人无限期地等待着我的回应。每次等待都需要一个阈值,直到页面准备就绪,并且响应未超出阈值时,它才会失败。无论如何,我可以动态地等待响应,有时响应是即时的,有时则是延迟的。在所有情况下,我都不应输入任何阈值,并且测试用例应等待响应,而不管响应时间如何。

3 个答案:

答案 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 ,您可以使用太。


Long.MAX_VALUE

在以下示例中,使用WebDriverWait(WebDriver driver, long timeOutInSeconds, long sleepInMillis)类型的 MAX_VALUE 值成功投射了 WebDriver 实例(即 driver ):

  • 代码块:

    long
  • 控制台输出:

    long

numberOfWindowsToBe()

最后,当您使用量身定制的 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()函数返回现有的驱动程序实例。请用您的实现替换它。