是否可以知道我们是否已经在iframe

时间:2016-07-04 15:48:56

标签: selenium iframe

在我的应用程序中,大多数元素都在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?如果我们知道框架然后我可以添加条件并决定切换或不切换,请指导。

2 个答案:

答案 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");

希望它会帮助你...... :)