Chromedriver 78可能存在问题,Selenium找不到在Chrome中打开的PDF的Web元素

时间:2019-10-28 10:38:58

标签: java selenium selenium-webdriver selenium-chromedriver

直到我的Google 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&amp;reanudar=&amp;>
</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:等待90秒后等待By.id定位的元素可见:插件

有人遇到类似的问题吗?预先感谢。

9 个答案:

答案 0 :(得分:5)

我遇到了同样的问题。

显然,Chrome浏览器会自动更新。昨天(19年10月29日),我的ChromeDriver开始抱怨它与Chrome 78不兼容。我将驱动程序更新为78版本。尝试查找我确认存在的元素时,我开始随机获得org.openqa.selenium.NoSuchElementException异常。当我使用断点时,findElement [s]也可以工作。我还尝试了隐式等待,但仅获得了有限的成功。

我尝试了zsbappa的ChromeOption解决方案,但没有任何乐趣。

Google很难获取旧版本的Chrome,但是我在https://www.neowin.net/news/google-chrome-76-offline-installer/找到了76版本。当心,在线安装程序会安装最新版本。我回到了76位司机,一切都很好。我所有的硒测试都重新开始了。

我的结论是,Chrome 78及其关联的驱动程序处于竞争状态,Selenium试图在完成之前查询该网页。

答案 1 :(得分:2)

我们在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似乎出了点问题或已更改。

答案 2 :(得分:1)

通过添加以下参数,我解决了我的问题。

   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);

答案 3 :(得分:1)

尝试访问iframe中的标签时,我也遇到了同样的问题,该标签以前在版本76上可以正常使用。现在已将自身更新为78,但是失败了。 尝试了waits,隐式waits,sleep,使用xpath,CSS,id,switch上下文,滚动直到view等等找到元素,但是没有运气。 我正在使用Windows 101809。我不知道这是否在其他操作系统中发生。

这是我提出的问题:

Problem using chromedriver 78.0.3904.70 locators

答案 4 :(得分:1)

我昨天确认,只有在iframe中包含一个元素时,此问题才会显现出来。在这些情况下,iframe位置很好。但是,尝试使用驱动程序或Web驱动程序等待对象定位Web元素将分别导致NoSuchElementTimeoutException

我为chromedriver团队提供了详细的chrome驱动程序日志,他们正在研究中。

更新: 来自chromedriver issue 3223

  

日志显示,直到FindElement返回null之后,才为框架完成最后的executionContextCreated。   从77版开始,ChromeDriver停止等待所有帧加载,然后继续导航。不幸的是,该更改阻止了等待当前帧加载。 3164将全部等待当前帧加载;这样应该可以防止FindElement进行搜索,直到框架停止加载并创建了executeContext之后。

基本上,此错误是在v.77中​​引入的。我们中的许多人只是注意到了这个问题,因为我们从v.76升级到了.v78。有消息称,他们的目标是针对.v80(而非v。79)的修复程序。解决方法是,在切换到iframe到尝试找到组件之间,我使用Thread.sleep。此解决方法工作正常。实际上,您只需在DEBUG模式下运行应用程序即可自行验证。当您暂停执行(使用断点)时,您会注意到原始代码(不休眠)可以正常工作。

答案 5 :(得分:0)

例如:您可以尝试使用此关键字!。

1. implicit_wait=10
2. Sleep  10

答案 6 :(得分:0)

事实证明,这是Google Chrome而不是chromedriver的问题:https://bugs.chromium.org/p/chromedriver/issues/detail?id=3211

答案 7 :(得分:0)

我有同样的问题。

使用78.0版自动更新Chrome后,我的自动测试脚本失败了。因此,我将chromedriver更新为78版本,但驱动程序仍然无法找到任何Web元素。之后,我尝试了多种版本的chromedriver,最后,我的问题已通过chromedriver 2.44版解决了

可以在https://chromedriver.storage.googleapis.com/index.html?path=2.44/

找到该版本

答案 8 :(得分:-1)

您可以 Nuget 程序包管理器,删除 Chrome驱动器并搜索chrome,下载新版本 selenium.web.driver.ChromeDriver > >对于jsaKamoto

找到Chrome版本78。