Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 硒/铬转换器:Can';在iframe中找不到元素_Javascript_Selenium_Protractor_Selenium Chromedriver - Fatal编程技术网

Javascript 硒/铬转换器:Can';在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

我通过量角器使用硒/铬驱动。我正在切换到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秒内出现,但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。如果您将您的建议应用于问题中提供的代码,则可以保存此内容,否则它应该是注释。