Selenium WebDriver在切换之前获取当前帧

时间:2016-06-13 13:52:01

标签: java selenium selenium-webdriver

我有一个自定义操作,可以通过切换某个iFrame来查找元素。 它使用以下本机操作: driver.switchTo().frame(requested_frame) 目前我在切换到确切的iframe之前每次都切换回默认内容。

现在我需要通过以下scnario来提高它的性能:

  • 检查当前内容/框架
  • 如果requested_frame=currentFrame则无需切换
  • 如果requested_frame=null然后切换到默认值(如果currentFrame=default则再次无需切换)
  • 如果requested_frame!=null && requested_frame!=currentFrame,则切换到默认值,然后切换到requested_frame框架。

所以我现在需要的是获得当前帧。有什么方法可以得到它吗?

2 个答案:

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

希望它能处理你的所有条件...... :)