Java 使用WebDriver在新打开的选项卡中单击链接

Java 使用WebDriver在新打开的选项卡中单击链接,java,selenium,webdriver,selenium-webdriver,Java,Selenium,Webdriver,Selenium Webdriver,有人能在这种情况下帮助我吗: 场景是:有一个网页,我只在新选项卡中打开所有指定的链接。现在,我正在尝试单击新打开的选项卡中的任何一个链接。已在下面尝试,但它仅在主/第一个选项卡中单击该链接,而不是在新选项卡中 new Actions(driver).sendKeys(Keys.CONTROL).sendKeys(Keys.NUMPAD1).perform(); driver.findElement(By.tagName("body")).sendKeys(Keys.CONTROL, Keys.T

有人能在这种情况下帮助我吗:

场景是:有一个网页,我只在新选项卡中打开所有指定的链接。现在,我正在尝试单击新打开的选项卡中的任何一个链接。已在下面尝试,但它仅在主/第一个选项卡中单击该链接,而不是在新选项卡中

new Actions(driver).sendKeys(Keys.CONTROL).sendKeys(Keys.NUMPAD1).perform();
driver.findElement(By.tagName("body")).sendKeys(Keys.CONTROL, Keys.TAB);
List<WebElement> links=driver.findElements(By.xpath("//a[contains(@href,'http')]"));
links.get(0).click();
新操作(驱动程序).sendKeys(Keys.CONTROL).sendKeys(Keys.NUMPAD1.perform();
driver.findElement(按.tagName(“body”)).sendKeys(Keys.CONTROL,Keys.TAB);
List links=driver.findElements(By.xpath(//a[contains(@href,'http')]);
links.get(0)。单击();

您需要使用
.switchTo(windowHandle)命令以访问第二个选项卡

在打开第二个选项卡之前-获取打开选项卡的windowHandle:

String mainWindow = driver.getWindowHandle();
然后执行打开第二个选项卡的操作。现在,您需要知道第二个选项卡的句柄,并将控件切换到该选项卡:

Set<String> handles = driver.getWindowHandles();  
for (String handle : handles) {
    if (!handle.equals(mainWindow)) {
          driver.switchTo().window(handle);
          break;
    }
}
Set handles=driver.getWindowHandles();
for(字符串句柄:句柄){
如果(!handle.equals(主窗口)){
driver.switchTo().窗口(手柄);
打破
}
}

第二个选项卡的操作现在将在第二个窗口中执行。当您完成并需要再次与第一个选项卡交互时:
driver.switchTo().defaultContent()

请告诉我,如何将web驱动程序控件/焦点转到新打开的选项卡,并单击该选项卡中的链接。我已更正了if语句中的driver.switchTo行。它应该是driver.switchTo().window(句柄);代替驾驶员。切换到(手柄);在我的例子中,使用driver.switchTo().defaultContent();不起作用。这就是为什么我使用driver.switchTo().window(主窗口);转到父窗口(第一个)。如何关闭第二个选项卡/窗口?