[英]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.