直到我的谷歌Chrome没有更新到78版本,我的代码才正常工作。我还将chromedriver更新到了78.0.3904.70版本。因此,我无法再使用Selenium WebDriver和Java:找到id为"plugin"的WebElement
<html>
<div id="content">
<embed id="plugin" type="application/x-google-chrome-pdf" src="http://??????????/offer_printed.php?printable=yes&reanudar=&>
</div>
</html>
除此之外,我的测试运行良好。我以前从未遇到过类似的问题。我还试图找到WebElement id="content",但我收到了同样的错误。
WebDriverWait wait = new WebDriverWait (driver, 90);
WebElement scrollvalid = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("plugin")));
scrollvalid.sendKeys(Keys.PAGE_DOWN); scrollvalid.sendKeys(Keys.PAGE_DOWN);
我的自动化脚本应该找到PDF元素并向下滚动页面。相反,我收到了以下错误:org.openqa.selenium.TimeoutException:等待by.id:plugin 定位的元素可见性90秒后超时
有人面临类似的问题吗?提前谢谢。
我遇到了同样的问题。
显然Chrome会自动更新。昨天(19年10月29日),我的ChromeDriver开始抱怨它与Chrome 78不兼容。我将驱动程序更新为78版本。当我试图找到我确认存在的元素时,我开始得到随机的org.openqa.selenium.NoSuchElementException异常。当我使用断点时,findElement[s]也能工作。我也尝试过隐性等待,但收效甚微。
我尝试了zsbappa的ChromeOption解决方案,但没有任何乐趣。
谷歌让我很难获得旧版本的Chrome,但我在https://www.neowin.net/news/google-chrome-76-offline-installer/.请注意,在线安装程序安装的是最新版本。我恢复了76的驾驶,一切都很好。我所有的硒测试都重新开始了。
我的结论是,Chrome 78及其相关驱动程序存在竞争条件,Selenium试图在网页完成之前询问网页。
我们在Chrome 78.0.3904.7、Chromedriver 77/78、Python Selenium 3.141.0中也遇到了类似的问题。
在我们的自动化Python Selenium测试中,我们看到了多个失败,其中似乎没有发生对元素的点击。更奇怪的是,元素似乎已经激活(就好像它即将被点击一样),但实际的点击事件从未发生过。因此,页面切换等不会发生,从而导致各种下游故障。
通过跟踪和错误的过程,我们发现使用标准的.click()函数现在是不可靠的:
webdriver_element.click()
但使用行动链似乎是可靠的:
ActionChains(context.browser).click(webdriver_element).perform()
目前尚不清楚为什么会出现这种情况。当我们升级到Chrome 78.0.3904.7时,故障就开始了。我们使用的是Chromedriver 77.0.3865.90,但同样的测试在Chrome 77.x版本上可靠通过,因此Chrome 78中出现了问题或更改。
通过添加以下参数,我解决了问题。
ChromeOptions options = new ChromeOptions();
options.addArguments("--disable-gpu");
options.addArguments("--disable-extensions");
options.setExperimentalOption("useAutomationExtension", false);
options.addArguments("--window-size=1920,1080");
options.merge(seleniumCapabilities);
driver = new ChromeDriver(options);
我在尝试访问iframe内部的选项卡时遇到了同样的问题,它在版本76上运行良好。现在它已经更新到78,它正在失败。尝试过等待、隐式等待、睡眠、使用xpath、CSS、id定位元素、切换上下文、滚动到视图等,但没有成功。我用的是10,1809。我不知道这是否发生在其他操作系统中。
这是我提出的问题:
使用chromedriver 78.0.3904.70定位器时出现问题
我昨天确认,只有当元素包含在iframe中时,这个问题才会显现出来。在这些情况下,iframe的位置很好。但是,尝试使用驱动程序或web驱动程序等待对象定位web元素将分别导致NoSuchElement
或TimeoutException
。
我向chromedriver团队提供了一个详细的chrome驱动程序日志,他们正在处理它
更新:来自chromedriver问题3223
日志显示,直到FindElement返回null之后,为帧创建的最终执行ContextCreated才会完成。从77版本开始,ChromeDriver停止等待所有帧加载,然后再继续导航。不幸的是,该更改阻止了等待加载当前帧。3164将全部等待加载当前帧;这将阻止FindElement搜索,直到帧已停止加载并创建executionContext之后。
基本上,这个错误是在v.77中引入的。我们中的许多人刚刚注意到这个问题,因为我们从v.76升级到了.v78。据说他们的目标是修复.v80(而不是v.79)。作为一种变通方法,我在切换到iframe和尝试定位组件之间使用Thread.sleep
。此解决方法运行良好。事实上,您可以通过在DEBUG模式下运行应用程序来验证这一点。当您暂停执行(通过使用断点)时,您会注意到您的原始代码(没有休眠)运行良好。
例如:您可以尝试使用以下关键字!。
1. implicit_wait=10
2. Sleep 10
原来是谷歌Chrome的问题,而不是chromedriver的问题:https://bugs.chromium.org/p/chromedriver/issues/detail?id=3211
我也遇到了同样的问题。
在用78.0版本自动更新Chrome之后,我的自动测试脚本失败了。所以我将chromedriver更新到了78版本,但驱动程序仍然找不到任何网络元素。在那之后,我尝试了多个版本的chromedriver和,最后我的问题用chromedriver2.44解决了。
此版本可在https://chromedriver.storage.googleapis.com/index.html?path=2.44/
您可以Nuget包管理器,删除Chrome驱动器并搜索Chrome,下载jsaKamoto 的新版本selenium.web.driver.ChromeDriver>
在那里你可以找到铬版本78。