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


17

在我的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定位的元素可见:插件超时

有人面临类似的问题吗?提前致谢。


今天,我删除了谷歌浏览器版本78,并安装了版本76,并且自动化测试再次起作用。一切正常。我希望78版的此问题将得到解决。所以我使用的是chromedriver(版本78),在我的.pom文件中,我具有以下依赖项:<dependency> <groupId> org.seleniumhq.selenium </ groupId> <artifactId> selenium-chrome-driver </ artifactId> <version> 3.141.59 </ version> </ dependency>
混合

我有相同的问题。以前起作用的代码现在失败了,因为Web驱动程序无法找到我要查找的任何Web元素。隐式和显式等待失败相同。我无法确定的是它遇到问题的元素类型,或者仅仅是位于iframe中的组件。解决方法是,Thread.sleep在此更新之前,我一直在添加隐式或显式等待的地方。
hfontanez

Chrome 78和chromedriver 77适用于我。

Answers:


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试图在完成之前查询该网页。


我已经与ChromeDriver开发人员一起打开了3198期。
wdtj

1
我收到以下针对我的问题的回复:感谢您报告此问题。从77版开始,Chromedriver在导航到新页面或切换窗口时不会等待框架或iframe加载。这确实引入了对代码等待资源可用的需求。大多数绑定具有显式等待以及隐式等待设置。在Selenium文档中搜索WebDriverWait以获取更多信息。
wdtj

但是,我们正在使用显式等待,但这无济于事。它确实有助于更改iframe,但HTML标记对于嵌入式pdf不再可见。
混合

我在chromedriver组上打开了一个新问题:bugs.chromium.org/p/chromedriver/issues/detail?id=3211
混合

您可以使用Chromium进行测试,它是没有Google服务的Chrome的基本版本,不会进行自我更新,并且可以与Chromedriver配合使用:chromium.org/getting-involved/download-chromium
Blaise

3

我们在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中似乎出现了错误或已更改。


这对我很有帮助,谢谢。
Piedone

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

嗨@zsbappa!谢谢您的回复。但是,这不能解决我的问题。问题是chromedriver(版本78)在嵌入式pdf中找不到任何网络元素。在Google chrome未更新至版本78之前,此功能正常工作。PS我没有在无头模式下运行测试
混合

尚不清楚这些选项如何解决OP问题。
Cal Corbin

这不能解决问题。最有可能的是,您正在运行Web元素不在iframe内的场景。
hfontanez

1

尝试访问iframe中的标签时,我曾经遇到过同样的问题,它过去在76版上正常工作。现在它已更新为78,但是失败了。尝试了waits,隐式waits,sleep,使用xpath,CSS,id,switch上下文,滚动直到view等等来定位元素,但是没有运气。我正在使用Windows 101809。我不知道其他操作系统是否正在发生这种情况。

这是我提出的问题:

使用Chromedriver 78.0.3904.70定位器时出现问题


1

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

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

更新:从chromedriver问题3223

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

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


0

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

1. implicit_wait=10
2. Sleep  10

嗨@Narasimhamurthy GN,谢谢您的回答。显式等待不是问题,我在所有测试中都使用了显式等待,因此我没有遇到类似的问题。问题是chromedriver(版本78)在嵌入式pdf中找不到任何网络元素。
混合

对我来说,一些测试用例也遇到了我使用“ geckodriver”(Firefox)的问题。
Narasimhamurthy GN,

否则,请使用其他硒库定位器关键字来查找WebElement。
Narasimhamurthy GN,

不幸的是,建议我们的Web应用程序的用户使用Chrome或Internet Explorer,出于某些原因不建议使用Firefox。这就是为什么我不能使用Firefox自动化测试的原因。我试图使用所有可能的方法使用硒在pdf上找到任何Web元素,但是它不起作用。我也尝试过使用其他依赖项和chromedrivers,但没有任何效果。
混合

0

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


不必要。请参阅票号3223
hfontanez


-1

您可以使用Nuget软件包管理器,删除 Chrome驱动器并搜索chrome,然后下载适用于jsaKamoto 的新版本selenium.web.driver.ChromeDriver >>

在这里您可以找到Chrome版本78。


感谢您的答复,但它并不能真正回答chrome版本78中的NoSuchElement异常问题
。– wdtj
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.