繁体   English   中英

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

[英]Possible issue with Chromedriver 78, Selenium can not find web element of PDF opened in 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: Timed out after 90 seconds waiting for the visibility of element located by By.id: plugin

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

我遇到了同样的问题。

显然 Chrome 会自动更新。 昨天(2019 年 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。 请注意,在线安装程序会安装最新版本。 我恢复了 76 的驱动程序,一切都很好。 我所有的 Selenium 测试都再次运行。

我的结论是 Chrome 78 及其相关驱动程序存在竞争条件,即 Selenium 尝试在 web 页面完成之前对其进行询问。

我们遇到了与 Chrome 78.0.3904.7、Chromedriver 77/78、Python Selenium 3.141.0 类似的问题。

在我们的自动化 Python Selenium 测试中,我们看到了多次失败,似乎没有发生对元素的点击。 更奇怪的是,该元素似乎已变为活动状态(好像它即将被单击),但实际的单击事件从未发生。 结果,不会发生页面切换等,从而导致各种下游故障。

通过反复试验,我们发现使用 standard.click() function 现在不可靠:

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、切换上下文、滚动到视图等定位元素,但没有运气。 我正在使用 windows 10, 1809。我不知道这是否发生在其他操作系统中。

这是我提出的问题:

使用 chromedriver 78.0.3904.70 定位器的问题

我昨天证实,这个问题似乎只有在 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)。 作为一种解决方法,我在切换到 iframe 和尝试定位组件之间使用Thread.sleep 此解决方法工作正常。 事实上,您可以通过简单地在 DEBUG 模式下运行您的应用程序来自行验证这一点。 当您暂停执行(通过使用断点)时,您会注意到您的原始代码(没有睡眠)工作正常。

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

1. implicit_wait=10
2. Sleep  10

我认为这个问题是由于 OOPIF(站点隔离) https://www.chromium.org/developers/design-documents/oop-iframes

也无法为自己找到解决方法。

原来是谷歌浏览器的问题,而不是chromedriver: https://bugs.chromium.org/p/chromedriver/issues/detail?id=3211

我遇到过同样的问题。

使用 78.0 版自动更新 Chrome 后,我的自动测试脚本失败了。 所以我将 chromedriver 更新到 78 版本,但驱动程序仍然找不到任何 web 元素。 之后,我尝试了多个版本的 chromedriver,最后我的问题通过 chromedriver version 2.44 得到解决

这个版本可以在https://chromedriver.storage.googleapis.com/index.html?path=2.44/找到

You can Nuget package manager, delete Chrome drive and search for chrome, download the new version selenium.web.driver.ChromeDriver >> for jsaKamoto

在那里你可以找到 chrome 版本 78。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM