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)。
答案 0 :(得分:1)
诀窍是您将无法找到元素,除非您切换到框架。如果您已经有一个WebElement实例,则很可能知道它是框架,因为您已切换到它来查找元素。
这是我们在项目中处理框架的方式,在自定义驱动程序中内置了以下逻辑。几句话就是这样的:
您可以在此处查看代码。如果您不想像我们那样创建自己的驱动程序,则可以提取逻辑并将其添加到自定义的findElementInFrames方法中: https://github.com/WileyLabs/teasy/blob/master/src/main/java/com/wiley/driver/frames/FramesTransparentWebDriver.java
答案 1 :(得分:0)