是否有可能知道我们是否已经在iframe中了

问题描述:

在我的应用程序中,大多数元素都在iframe之内。是否有可能知道我们是否已经在iframe中了

所以我的POM (Page Object Model)方法将从切换到frame开始,然后执行actions..am代码,以便能够通过切换到帧来执行操作。

下面

是我的代码的示例:

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

能否请您提供此HTML代码??? –

+0

method1和method2做什么? method2不能与method1组合吗? – JeffC

+0

你也可以放入'driver.switchTo()。defaultcontent();'方法2。因此,无论何时切换到帧调用driver.switchTo()。defaultcontent();' – Madhan

您可以通过创建一个globalvariable当前实现这一转换frame像下面的方法

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.... 
} 

注: - 如果你不想哟创建一个globalvariable了解当前帧,你也可以使用JavascriptExecutor了解如下当前帧: -

JavascriptExecutor jsExecutor = (JavascriptExecutor)driver; 
String currentFrame = jsExecutor.executeScript("return self.name"); 

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

+1

谢谢Saurabh,看起来像解决了我的问题。 –

+0

@LVPrasad你永远欢迎......快乐学习.. :) –

您可以再次搜索框架,如果您找到框架,则知道您不在框架中。

我会尽量简化这些方法,以便尽可能不依赖彼此。如下

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(); 
} 
} 

现在你可以在你的方法使用它: - - :