Javascript 硒/铬转换器:Can';在iframe中找不到元素
我通过量角器使用硒/铬驱动。我正在切换到iframe,等待加载内容,然后计划操作其中的元素。但它从未意识到内容已经加载Javascript 硒/铬转换器:Can';在iframe中找不到元素,javascript,selenium,protractor,selenium-chromedriver,Javascript,Selenium,Protractor,Selenium Chromedriver,我通过量角器使用硒/铬驱动。我正在切换到iframe,等待加载内容,然后计划操作其中的元素。但它从未意识到内容已经加载 browser.driver.switchTo().frame("myView"); browser.driver.wait(function() { return browser.driver.isElementPresent(by.id("myDiv")) .then(function (isPresent) { retur
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秒内出现,但wait()超时
我尝试切换到使用browser.driver.findElement(),但得到了相同的结果
我已经确保更新到Chromedriver 2.21(它修复了先前的错误)
你知道我还能做错什么吗
每个评论的预计到达时间:这是我获取的所有错误日志
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)
消息:
错误:加载时间太长!
等待在20069ms后超时
堆栈跟踪:
错误:加载时间太长!
等待在20069ms后超时
==异步任务====
加载时间太长!
at/Users/me/Documents/My Test/specs/myWorkflow.js:82:20
==异步任务====
在[对象]。(/Users/me/Documents/My Test/specs/myWorkflow.js:79:14)
==异步任务====
异步测试函数:it()
错误
在[对象]。(/Users/me/Documents/My Test/specs/myWorkflow.js:7:5)
反对。(/Users/me/Documents/My Test/specs/myWorkflow.js:5:1)
我通过添加一个sleep语句,而不是使用等待循环,解决了类似的问题。在c#中,我会使用thread.sleep(20000);等待20秒。我的大部分都在1到5秒的范围内
澄清一下:我建议删除他用来检查元素的循环,而是使用一个简单的sleep类型命令,然后与元素交互
在Selenium using C#中,我使用以下语句在单击元素之前加载元素时提供固定的等待时间。这个元素恰好是一个链接,但它可以是任何元素
//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();
你也能提供回溯日志吗?我没有太多的回溯日志,但可以肯定。它能通过.id(“myDiv”)找到
?@Buaban:不,它不能,这就是全部问题。我找到了一个解决方法:调用browser.driver.sleep(2000)。then(),然后切换到iframe,在then()函数中查找myDiv。它在技术上满足了我测试的需要,如果myDiv没有在20秒内出现,它就会失败,但是如果它出现得更早,我讨厌浪费时间。我不认为这是一个真正的答案。这应该是一个答案吗?如果是,它是如何解决这个问题的?附议@LeonardoAlvesMachado。如果您将您的建议应用于问题中提供的代码,则可以保存此内容,否则它应该是注释。