当前位置: 首页 > 知识库问答 >
问题:

如何使用selenium webdriver等待新打开窗口的就绪状态

沙柏
2023-03-14

我是硒新手。我的应用程序是在2004-2006年开发的非常旧的应用程序,每一个其他操作都会打开一个新窗口。我正在使用用于internet explorer的selenium web驱动程序来编写自动测试用例。

我使用driver.switchTo().window(windowname)在打开的窗口之间切换

然而,当我的测试在我的应用程序的响应时间不时不同的其他环境上运行时,我的测试用例会失败。因此,有时我的测试用例会通过,而有时会失败。目前我正在使用<代码>线程。睡眠(阈值),我知道这是一种不好的做法。我知道WebDriverWait和三个等待:隐式、显式和流畅。但我的问题是,没有人会无限期地等待,直到我得到回应。每次等待都需要一个阈值,直到它检查页面是否就绪,如果响应不在阈值内,则它将失败。我是否可以动态地等待响应,有时响应会立即,有时会延迟。在所有情况下,我不应该输入任何阈值,测试用例应该等待响应,无论响应时间是什么。

共有3个答案

郑茂材
2023-03-14

此代码等待直到特定id可见。并在引发异常前30秒初始化:

WebDriverWait wait = new WebDriverWait(driver, 30);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("ifmail")));
东门胤
2023-03-14

您可以使用以下代码段:

 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;
    }
}

函数返回现有的驱动程序实例。请用您的实现替换它。

孙光临
2023-03-14

根据你的问题,如何等到我获得打开窗口的就绪状态,值得一提的是,AUT(测试中的应用程序)应该有一个基准,理想情况下,打开一个新窗口/选项卡需要多长时间。

正如@KDM所指出的,WebDriverWait构造函数是:

  • WebDriver等待(WebDriver驱动程序,java.time.时钟时钟,睡眠睡眠,超长时间OutIn秒,超长睡眠TimeOut)
  • WebDrive等待(WebDriver驱动程序,长时间OutIn秒)
  • WebDriver等待(WebDriver驱动,long timeOutIn秒,long睡眠InMillis)

在所有三个构造函数中,timeOutInSeconds是长型的,其最大值为9223372036854775807,您也可以使用。

在以下示例中,WebDriver实例(即驱动程序)成功浇铸,最大值为长类型:

>

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");

控制台输出:

Long.MAX = 9223372036854775807
Application Opened

最后,当您使用定制的显式等待来访问新打开的窗口/选项卡时,请始终使用ExpectedConditions类中的numberOfWindowsToBe()方法,然后按如下方式收集窗口句柄:

>

  • 示例代码块(Java):

    driver.get("http://www.google.com");
    System.out.println("Page Title is : "+driver.getTitle());
    String parent_window = driver.getWindowHandle();
    ((JavascriptExecutor) driver).executeScript("window.open('http://facebook.com/');");
    new WebDriverWait(driver,5).until(ExpectedConditions.numberOfWindowsToBe(2));
    Set<String> allWindows_1 = driver.getWindowHandles();
    //Now you can initiate switching through windowHandles
    

  •  类似资料:
    • 本文向大家介绍就绪状态的进程在等待什么?相关面试题,主要包含被问及就绪状态的进程在等待什么?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 被调度使用cpu的运行权

    • 本文向大家介绍请问就绪状态的进程在等待什么?相关面试题,主要包含被问及请问就绪状态的进程在等待什么?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 被调度使用cpu的运行权

    • 我有下面的docker-compose,在启动myprogram-app之前,我需要等待jhipster-registry服务启动并接受连接。 我尝试了 healtcheck 方式,遵循官方文档 https://docs.docker.com/compose/compose-file/compose-file-v2/ 但在运行<code>docker compose up</code>时,我遇到了

    • 查看这段代码,它们展示了一种在登录后显示新窗口的方法。当用户名和密码是正确的,它打开新的对话框。我想要一个按钮点击打开新的对话框,而不检查用户名和密码。

    • 问题内容: 我正在使用Twitter Bootstrap模态窗口功能。当有人单击我的表单上的提交时,我想在单击表单中的“提交按钮”时显示模式窗口。 jQuery的: 问题答案: Bootstrap具有一些可以在模式上手动调用的功能: 您可以在此处看到更多信息:Bootstrap模态组件 特别是方法部分。 因此,您需要更改: 至: