Selenium 将焦点切换到选项卡,点击链接后打开

Jel*_*eko 4 java selenium tabs focus

出于自动化目的,我正在创建一个在表中查找行的脚本。这一行是可点击的并打开一个新的标签/地址。

使用 selenium,我现在可以找到表格行,单击链接,然后打开新选项卡。问题是我找不到任何方法将焦点切换到新打开的选项卡。我试图获取所有 windowHandles 并查看是否可以切换,但即使在新选项卡打开后,也只有 1 个 windowHandle。

下面是我的代码:

WebElement tableRow=driver.findElement(By.xpath("/html/body/div[1]/table/tbody/tr[2]"));

JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("arguments[0].click();", tableRow);

ArrayList<String> tabs = new ArrayList<String> (driver.getWindowHandles());
    for(String winHandle : driver.getWindowHandles()){
        driver.switchTo().window(winHandle);
    }
Run Code Online (Sandbox Code Playgroud)

Arraylist 始终包含 1 个单独的 windowHandle,而不是 2。所以我无法将焦点切换到新选项卡。有没有办法解决这个问题?

Deb*_*anB 6

要正确地切换到新开的标签,你需要引起WebDriverWait新标签来渲染,然后通过一个for()循环,你会在可用需要遍历WindowHandles并调用switchTo().window()WindowHandle这是不通过下面的代码块前一个标签:

String first_handle = driver.getWindowHandle();
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("arguments[0].click();", tableRow);
new WebDriverWait(driver,5).until(ExpectedConditions.numberOfWindowsToBe(2));
Set<String> allHandles = driver.getWindowHandles();
for(String winHandle:allHandles)
{
    if (!first_handle.equalsIgnoreCase(winHandle)
    {
        driver.switchTo().window(winHandle);
    }
}
Run Code Online (Sandbox Code Playgroud)