在我的应用程序中,大多数元素都在iframe
内。
因此,我的POM (Page Object Model)
方法将从切换到frame
开始,然后执行操作的代码...以便能够通过切换到框架来执行操作。
是我的代码示例:
public void method 1()
{
driver.switchTo().frame(0);
// code to perform actions....
method 2();
driver.switchTo().defaultcontent();
}
public void method 2()
{
driver.switchTo().frame(0);
// code to perform actions....
}
如上例所示,从第一种方法
调用第二种方法 driver
将从方法1进入框架,当方法2再次被调用时,它试图切换到第0帧,因为我硬编码了帧索引,我认为它会正常工作(即使是驱动程序也是如此)在相同的框架上),但它给出错误
"没有这样的帧异常。"
是否可以知道当前的frame
?如果我们知道框架然后我可以添加条件并决定切换或不切换,请指导。
答案 0 :(得分:0)
您可以再次搜索该帧,如果找到它,您就知道您已经不在该帧中。
我会尝试简化这些方法,以便他们尽可能不相互依赖。
答案 1 :(得分:0)
您可以通过为当前切换global
创建variable
frame
,如下所示:
String currentFrame = null;
//make this currentFrame as global variable
public void switchToFrame(String frame) {
if ((null != frame) && (!"".equals(frame))) {
if (!frame.equals(currentFrame)) {
driver.switchTo().defaultContent();
driver.switchTo().frame(frame);
currentFrame = frame;
}
} else {
currentFrame = "";
driver.switchTo().defaultContent();
}
}
现在您可以在以下方法中使用它: -
public void method 1()
{
switchToFrame("your frame id or name"); //pass null if you want to switch to default
// code to perform actions....
method 2();
}
public void method 2()
{
switchToFrame("your frame id or name"); //pass null if you want to switch to default
// code to perform actions....
}
注意: - 如果您不想创建global
variable
来了解当前帧,您还可以使用JavascriptExecutor
来了解当前框架如下: -
JavascriptExecutor jsExecutor = (JavascriptExecutor)driver;
String currentFrame = jsExecutor.executeScript("return self.name");
希望它会帮助你...... :)