如何单击iFrame中的链接,该链接将打开一个新选项卡并切换到该选项卡

时间:2018-03-27 10:18:42

标签: java selenium selenium-webdriver selenium-chromedriver webdriverwait

我正在开发一个项目,其中包括点击链接,并且应该使用webdriver在新标签页中打开,问题是

  1. 假设的链接包含在iFrame中,因此shift+click无效

    private void openInNewTabAndSwitch(WebElement linkElement) {
    // logic of opening in new tab goes here...
    Actions newTab = new Actions(driver);
    newTab.keyDown(Keys.SHIFT).click(linkElement).keyUp(Keys.SHIFT).build().perform();
    Set<String> windowSet = driver.getWindowHandles();
    driver.switchTo().window((String) windowSet.toArray()[1]); }
    
  2. 我找不到href属性,因为某些javascript函数使用某些onClick()打开它

  3. <a onclick="javascript:LinkOccam (this, 'opportunity');">Mednomics Proposition</a>

    问题: - 它只是在同一个标​​签页中打开所需的页面。

    现在,我找不到与此相关的任何内容,请帮助..!

    其他相关信息 我使用的是Windows 7,Java 8,ChromeDriver

1 个答案:

答案 0 :(得分:0)

当您单击 WebElement 时会打开 New TAB ,您无需担心 WebElement 是否在上>顶级浏览上下文 iFrame 中。此外,在切换 TAB 时,会导致 WebDriverWait 并相应地切换。为此,您可以使用以下代码块:

private void openInNewTabAndSwitch(WebElement linkElement) 
{
    String parentTab = driver.getWindowHandle();
    Actions newTab = new Actions(driver);
    newTab.keyDown(Keys.CONTROL).click(linkElement).keyUp(Keys.CONTROL).build().perform();
    WebDriverWait wait = new WebDriverWait(driver,5);
    wait.until(ExpectedConditions.numberOfWindowsToBe(2));
    Set<String> windowSet = driver.getWindowHandles();
    for(String tab:windowSet)
    {
        if(!parentTab.equalsIgnoreCase(tab))
        {
            driver.switchTo().window(tab);
            //do your work in the newly opened TAB
        }
    }
}