为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕码人8056858 2024-01-05 16:31:12
在我的谷歌浏览器没有更新到版本 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:等待 By.id 定位的元素的可见性 90 秒后超时:插件有人面临类似的问题吗?提前致谢。
查看完整描述

5 回答

?
四季花海

TA贡献1811条经验 获得超5个赞

我遇到了同样的问题。

显然 Chrome 会自动更新。昨天(2019 年 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 美元回到了司机那里,一切都很好。我所有的 Selenium 测试都恢复正常了。

我的结论是,Chrome 78 及其相关驱动程序存在竞争条件,Selenium 会在网页完成之前尝试询问该网页。


查看完整回答
反对 回复 2024-01-05
?
芜湖不芜

TA贡献1796条经验 获得超7个赞

我们在 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 中似乎出现了问题或发生了变化。


查看完整回答
反对 回复 2024-01-05
?
ibeautiful

TA贡献1993条经验 获得超5个赞

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

我向 chromedriver 团队提供了详细的 chrome 驱动程序日志,他们正在处理它。

更新:来自chromedriver 问题 3223

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

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


查看完整回答
反对 回复 2024-01-05
?
HUWWW

TA贡献1874条经验 获得超12个赞

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

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


查看完整回答
反对 回复 2024-01-05
?
胡说叔叔

TA贡献1804条经验 获得超8个赞

我在尝试访问 iframe 内的选项卡时遇到了同样的问题,它曾经在版本 76 上工作正常。现在它已更新到 78,它失败了。尝试过 waits 、隐式 waits 、 sleep 、使用 xpath、CSS、id 定位元素、 switch context 、滚动直到 view 等,但没有成功。我使用的是 Windows 10 , 1809。我不知道其他操作系统是否也会发生这种情况。



查看完整回答
反对 回复 2024-01-05
  • 5 回答
  • 0 关注
  • 159 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信