在硒webdriver中动态切换帧

时间:2018-10-18 07:56:29

标签: java selenium selenium-webdriver iframe

public boolean dynamicSwitchingFrames(WebElement element) {
    boolean switchStatus = false;
    String parentTag = "";
    WebElement targetElement = element;
    WebElement parentNode=null;

    while (!(switchStatus)) {
        parentNode = (WebElement)((JavascriptExecutor) driver).executeScript("return arguments[0].parentNode;", targetElement);
        parentTag = parentNode.getTagName();

        if (parentTag.equalsIgnoreCase("iframe")) {
            driver.switchTo().frame(parentNode);
            switchStatus = true;
            break;
        }
        targetElement = parentNode;
    }
    return switchStatus;
}

我们有一个Web应用程序,在框架内有很多元素。是否可以创建一个接受Web元素作为参数并切换到该元素所驻留的框架的实用程序。我尝试创建下面的实用程序,但没有帮助 我想要的是,对于任何Web元素,实用程序都应该找到其框架,并将驱动程序切换到该框架。上面的工具给我一个错误,它找不到元素(targetElement)。

2 个答案:

答案 0 :(得分:1)

诀窍是您将无法找到元素,除非您切换到框架。如果您已经有一个WebElement实例,则很可能知道它是框架,因为您已切换到它来查找元素。

这是我们在项目中处理框架的方式,在自定义驱动程序中内置了以下逻辑。几句话就是这样的:

  1. 查找框架/ iframe元素
  2. 将它们添加到列表中
  3. 开始在第一帧中寻找元素(如果找不到)-转到列表中的下一帧,依此类推。 (实际上要复杂一些,因为可能会有不同的搜索元素列表的策略,例如“首次发现时停止”与“检查所有帧”)

您可以在此处查看代码。如果您不想像我们那样创建自己的驱动程序,则可以提取逻辑并将其添加到自定义的findElementInFrames方法中: https://github.com/WileyLabs/teasy/blob/master/src/main/java/com/wiley/driver/frames/FramesTransparentWebDriver.java

答案 1 :(得分:0)

但是我们还没有该功能吗?下图显示了如何按元素切换到帧。 我看错你的问题了吗?

Frames