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

等待子窗口在硒网络驱动程序使用java

戴化
2023-03-14

如何等待硒Web驱动程序中的子窗口

当我点击提交按钮,它会把我带到子窗口,我断言URL,但有时子窗口需要时间来目前使用thread.sleep(4000),但这是错误的方式。

    // parent window
    String subWindowHandler = null;

    Set<String> handles = driver.getWindowHandles(); // get all window
    // handles
    Iterator<String> iterator = handles.iterator();
    while (iterator.hasNext()) {
        subWindowHandler = iterator.next();
    }
    driver.switchTo().window(subWindowHandler); // switch to popup window
    System.out.println(driver.getTitle());

    String Current_Url = driver.getCurrentUrl();

    System.out.println("Current open Url in other Tab -->" + Current_Url);

    try {
        Assert.assertEquals("http://intelliview-dev.psi.psigroupinc.com/Reports/ReportView.aspx", Current_Url);
        logger.info("Assertion Passed");
        logger.info("User is able to login to My Account Application");
    } catch (AssertionError e) {
        logger.info("Assertion Failed");
        logger.info("User Provide Invalid Username or Password");
        throw e;

    }

共有2个答案

凌智
2023-03-14

为此,您需要确保应用程序打开新窗口所需的最大时间(可接受的时间限制)。在此之前,使用获取当前窗口的详细信息

String parent_window = driver.getWindowHandle();

然后等待新窗口使用

new WebDriverWait(driver,AcceptableTimeLimit).until(ExpectedConditions.numberOfWindowsToBe(2));

然后使用切换到新窗口

Set<String> allWindows = driver.getWindowHandles();
Iterator ite=allWindows.iterator();
while(ite.hasNext()){
    String popupHandle=ite.next().toString();
    if(!popupHandle.contains(parent_window)){
        driver.switchTo().window(popupHandle);
        //perform your operations on New window
        //Then switch back to parent window
        driver.switchTo().window(parent_window);
       }
  }
何涵畅
2023-03-14

您可以使用ExpectedConditions.numberOfWindowsToBe

单击调用窗口的事件,然后使用下面的代码,然后使用切换另一个窗口

根据您的要求进行计数

 new WebDriverWait(driver,30).until(ExpectedConditions.numberOfWindowsToBe(2));
 类似资料:
  • 正在研究尝试理解显式等待的方法。 所以单选按钮被点击后,输入形式发生了变化,所以我把给它一个时间元素出现,否则会出错“元素不可见......”。所以我认为现在是理解显式等待的好时机,因为我需要等到元素出现。 但出现错误“Selenium::WebDriver::error::ElementNotVisibleError:Element当前不可见,因此可能无法与之交互”。为什么这段代码不等到元素出现

  • 下面是我为firefox浏览器初始化的selenium web驱动程序。 尽管我给出了隐式等待,但我没有等待元素。它会立即抛出not found异常。如果我放那么它工作正常,没有任何问题。但是把现在测试用例包含更多线程的任何地方。sleep比实际的测试用例代码低。有人能给我建议正确的方法吗?

  • 我在eclipse中使用SeleniumWebDriver和TestNG。问题是页面在某些数据的中途重新登录,并且重新加载的时间是灵活的,这就是为什么我不能应用显式等待时间。我想让webdriver等待,直到重新加载完成。 我正在尝试通过此代码执行此操作……但它不起作用。

  • 根据Selenium WebDriver文档,我们可以将名称或句柄传递给driver.switchTo().window(nameOrHandle);为了获取句柄,我们有getWindowHandle。如何根据窗口名称打开新窗口?如何获取当前窗口名称? / ***将此驱动程序未来命令的焦点切换到具有给定名称/句柄的窗口。* *有关详细信息,请参阅W3C WebDriver规范*。**@param

  • 我的目标是使用硒为Python自动在线账单支付。 使用以下代码使用 Web 驱动程序登录成功: 登录后,一个新的页面加载,我的下一步是点击一个链接。代码: 什么也没发生。没有导航到该法案 但仍然没有。我还应该尝试其他什么? 错误: Traceback(最近调用的最后一次):File"/home/队长/. PyCharmEdu30/config/划痕/scratch_1.py",第12行,在clic

  • 我试图使用SeleniumWebDriverWait类型,在检查元素是否存在之前,等待页面完全加载。我尝试了两种不同的方法。 第一个方法使用IgnoreExceptionTypes,然后在Until方法内调用FindElement。这会立即抛出NoTouchElementException,而无需等待。我希望这会继续尝试查找元素,直到超时,同时忽略NosTouchElementException。