Selenium / Chromedriver:无法在iframe中找到元素

时间:2016-02-16 17:52:49

标签: javascript selenium protractor selenium-chromedriver

我通过量角器使用Selenium / Chromedriver。我切换到iframe,等待内容加载,然后计划操纵其中的元素。但它从未意识到内容已经加载。

browser.driver.switchTo().frame("myView");

browser.driver.wait(function() {
    return browser.driver.isElementPresent(by.id("myDiv"))
        .then(function (isPresent) {
            return isPresent;
        });
}, 20000, "Taking too long to load!");

myDiv肯定会在20秒内出现,但是等待()超时。

我尝试过切换到使用browser.driver.findElement(),但结果相同。

我已确定我已更新为Chromedriver 2.21(修复了之前的错误)。

任何想法我还能做错什么?

每条评论的ETA:这就是我获取错误日志的所有内容......

   Message:
     Error: Taking too long to load!
 Wait timed out after 20069ms
   Stacktrace:
     Error: Taking too long to load!
Wait timed out after 20069ms
==== async task ====
Taking too long to load!
    at /Users/me/Documents/My-Test/specs/myWorkflow.js:82:20
==== async task ====
    at [object Object].<anonymous> (/Users/me/Documents/My-Test/specs/myWorkflow.js:79:14)
==== async task ====
Asynchronous test function: it()
Error
    at [object Object].<anonymous> (/Users/me/Documents/My-Test/specs/myWorkflow.js:7:5)
    at Object.<anonymous> (/Users/me/Documents/My-Test/specs/myWorkflow.js:5:1)

1 个答案:

答案 0 :(得分:0)

我通过添加sleep语句而不是使用等待循环来解决类似的问题。在c#中我会使用thread.sleep(20000);等了20秒。我的大多数都在1到5秒的范围内。

澄清一下:我建议删除他用来检查元素的循环,而是使用简单的sleep类型命令然后与元素交互。

在使用C#的Selenium中,我使用以下语句在单击元素之前加载元素时提供固定的等待时间。这个元素恰好是一个链接,但它可以是任何元素

/