我有一个自定义操作,可以通过切换某个iFrame来查找元素。
它使用以下本机操作:
driver.switchTo().frame(requested_frame)
目前我在切换到确切的iframe之前每次都切换回默认内容。
现在我需要通过以下scnario来提高它的性能:
requested_frame=currentFrame
则无需切换requested_frame=null
然后切换到默认值(如果currentFrame=default
则再次无需切换)requested_frame!=null && requested_frame!=currentFrame
,则切换到默认值,然后切换到requested_frame
框架。所以我现在需要的是获得当前帧。有什么方法可以得到它吗?
答案 0 :(得分:7)
作为我自己问题的确切答案“Selenium WebDriver获取当前帧”我找到了以下方法来实现它。
JavascriptExecutor jsExecutor = (JavascriptExecutor)driver;
String currentFrame = jsExecutor.executeScript("return self.name");
但是在这里,JavascriptExecutor每次都执行命令以获取当前帧。 因此,如果我考虑性能,我想选择#Saurabh Gaur的答案作为最佳答案。 我希望我的回答对其他人有帮助: - )
我刚刚使用我的当前版本进行了一个小测试,使用全局变量和js命令帮助。
[在2个嵌套iframe中的4个不同元素中执行动作的时间(ms)1000次。 (总共找到4000个元素动作)]
| | Switch everytime | Global variable | JS command |
|----------|------------------|-----------------|------------|
| | 2023 | 1950 | 2911 |
| | 1902 | 2091 | 2992 |
| | 2014 | 1974 | 3020 |
| | 1934 | 1931 | 3097 |
| | 1997 | 1965 | 3180 |
|----------|------------------|-----------------|------------|
| Average | 1974 | 1982.2 | 3040 |
因此,我的“每次切换默认值”的当前性能都不差:D
答案 1 :(得分:1)
您需要按以下方式实施: -
String frame = 'your frame';
String currentFrame = null;
// make this currentFrame as global
if ((null != frame) && (!"".equals(frame))) {
if (!frame.equals(currentFrame)) {
switchToFrame(frame);
currentFrame = frame;
}
} else {
currentFrame = "";
webDriver.switchTo().defaultContent();
}
public void switchToFrame(String frame) {
webDriver.switchTo().defaultContent();
webDriver.switchTo().frame(frame);
}
希望它能处理你的所有条件...... :)