【问题标题】:How to switch tab using for loop in Selenium Webdriver如何在 Selenium Webdriver 中使用 for 循环切换选项卡
【发布时间】:2017-06-26 11:49:44
【问题描述】:

美好的一天。我遇到了无法使用 Selenium WebDriver 中的循环在选项卡之间切换的问题。我可以一次执行此操作,但我需要在循环中重复使用代码。

错误来了:

"Exception in thread" main "org.openqa.selenium.NoSuchWindowException: Unable to locate window"

我的代码可以找到所有元素,在新选项卡中打开一个链接,然后关闭它。但是,它不能对下一个元素再次执行此操作。

这是我的代码(我使用的是 Firefox):

List<WebElement> allElements = driver.findElements(By.className("_4zhc5"));
    int s = allElements.size();

    System.out.println("total users to check: " + allElements.size());
    for (int i = 0; i < s; i++) {



        allElements = driver.findElements(By.className("_4zhc5"));
        String selectLinkOpeninNewTab = Keys.chord(Keys.CONTROL, Keys.RETURN);
        allElements.get(i).sendKeys(selectLinkOpeninNewTab);


        for (String winHandle : driver.getWindowHandles()) {
            driver.switchTo().window(winHandle);
            Thread.sleep(3000);

        }



         driver.close();
         Thread.sleep(2000);

    }

我还使用jsfiddle 创建了一个原型页面。该错误出现在第二次尝试执行代码时。只是脚本没有点击另一个名为“可爱”的元素

感谢观看!

【问题讨论】:

  • 我认为问题在于,您正在获取所有窗口(比如 5 个)并切换到某个窗口,做一些事情并关闭该窗口。现在我们将只有 4 个窗口,但列表仍然有 5 个窗口。在第二次迭代脚本试图切换到已删除的窗口并抛出错误
  • 我认为你是对的。我不知道如何解决它,这似乎很困难。
  • 在第一次处理第一个元素后,在第一个选项卡中,您可以在不关闭该选项卡的情况下继续处理下一个元素吗?否则,我们需要再次执行窗口句柄,以便它不会有已删除的选项卡
  • 我必须在执行一些操作后立即关闭卡,该列表可能包含例如 50 个链接。这种情况下如何再次使用windowshandles?

标签: java selenium selenium-webdriver


【解决方案1】:

您需要切换回链接所在的原始窗口。

  1. 如果有链接,请点击一个
  2. 切换到该选项卡
  3. 关闭标签
  4. 切换回获取链接的默认窗口

最简单的方法是存储“原始”窗口并一直切换回该窗口。 winHandleBefore = driver.getWindowHandle();

关闭标签时

driver.close(); 

driver.switchTo().window(winHandleBefore)

【讨论】:

  • 感谢您的回答和学习,一个简单的解决方案对我有用。
猜你喜欢
  • 2018-12-15
  • 2018-12-28
  • 2012-09-25
  • 2021-05-16
  • 2015-06-09
  • 2014-10-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多