如何专注于第二个选项卡并使用 selenium webdriver 处理它

Posted

技术标签:

【中文标题】如何专注于第二个选项卡并使用 selenium webdriver 处理它【英文标题】:How to focus on second tab and work on it using selenium webdriver 【发布时间】:2017-01-19 20:16:20 【问题描述】:

我已经打开了链接,现在我点击了该页面上的登录链接, 通过单击登录按钮,它会自动在新选项卡中打开。我必须在该选项卡中填写表格。为此,我尝试了以下代码:

Actions act = new Actions(Initialsetupfirefox.driver);
new Actions(Initialsetupfirefox.driver) .keyDown(Keys.CONTROL).click(Initialsetupfirefox.driver.findElement(By.xpath("//a[contains(text(),'LOGIN')]")))
         .keyUp(Keys.CONTROL)
         .perform();
        Thread.sleep(3000);

new Actions(Initialsetupfirefox.driver).sendKeys(Initialsetupfirefox.driver.findElement(By.tagName("html")), Keys.CONTROL).sendKeys(Initialsetupfirefox.driver.findElement(By.tagName("html")),Keys.NUMPAD2).build().perform();

通过这个,我可以切换焦点,但无法在此选项卡中执行任何操作。 请推荐

【问题讨论】:

在与元素交互之前需要切换新打开的选项卡,关注this link for switching window 但我正在切换标签 【参考方案1】:

获取浏览器选项卡并随心所欲:

List<String> browserTabs = Lists.newArrayList(driver.getWindowHandles());

driver.switchTo().window(browserTabs.get(1)); // Switch to second tab
// Do something on second tab here...

driver.switchTo().window(browserTabs.get(0)); // Return to first tab
// Do something on first tab here...

【讨论】:

【参考方案2】:

这是在 Node.js 和 Typescript 中使用 selenium 时的代码

 const mainHandle = await this.driver.getWindowHandle();
 // load new tab here .. 
 const allHandles = await this.driver.getAllWindowHandles();
 for (const handle of allHandles) 
   if (handle !== mainHandle) 
     await this.driver.switchTo().window(handle);
   
 

【讨论】:

【参考方案3】:

你可以这样做:

    Set<String> handles = driver.getWindowHandles();
    String currentHandle = driver.getWindowHandle();
    for (String handle : handles) 

     if (!handle .equals(currentHandle))
     
         driver.switchTo().window(handle);
     
   

   //fill your form in the other tab
   ......

   //go back to first tab if you want
    driver.switchTo().window(currentHandle);

【讨论】:

以上是关于如何专注于第二个选项卡并使用 selenium webdriver 处理它的主要内容,如果未能解决你的问题,请参考以下文章

HTML/引导选项卡

选择第二个选项列表中的元素Selenium

以连续形式连接的组合框 - 如果依赖于第一个组合,第二个组合不会显示其值我该如何解决

如何设置级联select2值onClick

如何使用 Selenium Webdriver 和 Python 从这个非选择下拉菜单中选择这个元素

JQuery.Dirty 字段不适用于第一个“updateFormState”,但适用于第二个