繁体   English   中英

Selenium / Chromedriver:在iframe中找不到元素

[英]Selenium/Chromedriver: Can't find element in iframe

我通过Protractor使用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)

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

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

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

      //sleep time so UX can load
        Thread.Sleep(3000);

      //open the new  form
        By newButton = By.XPath("/dummy/xpath");
        IWebElement button = driver.FindElement(newButton);
        button.Click();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM