我经常运行一个包含大约 250 个测试的测试套件。每次运行此测试套件时,每次都会返回不一致的错误,这些错误似乎是不同的测试。返回的不一致错误示例:
FacebookWebDriverExceptionStaleElementReferenceException: stale element reference: element is not attached to the page document
(Session info: headless chrome=65.0.3325.146)
(Driver info: chromedriver=2.36.540471 (9c759b81a907e70363c6312294d30b6ccccc2752),platform=Linux 4.9.125-linuxkit x86_64)
/var/www/vendor/facebook/webdriver/lib/Exception/WebDriverException.php:108
/var/www/vendor/facebook/webdriver/lib/Remote/HttpCommandExecutor.php:331
/var/www/vendor/facebook/webdriver/lib/Remote/RemoteWebDriver.php:565
/var/www/vendor/facebook/webdriver/lib/Remote/RemoteExecuteMethod.php:40
/var/www/vendor/facebook/webdriver/lib/Remote/RemoteWebElement.php:240
/var/www/vendor/laravel/dusk/src/Browser.php:267
/var/www/vendor/laravel/dusk/src/Concerns/ProvidesBrowser.php:141
/var/www/vendor/laravel/framework/src/Illuminate/Support/Traits/EnumeratesValues.php:176
/var/www/vendor/laravel/dusk/src/Concerns/ProvidesBrowser.php:147
/var/www/vendor/laravel/dusk/src/Concerns/ProvidesBrowser.php:70
/var/www/modules/Venues/Tests/Browser/Venue/VenueTagsTest.php:73
FacebookWebDriverExceptionNoSuchElementException: no such element: Unable to locate element: {"method":"tag name","selector":"body"}
(Session info: headless chrome=65.0.3325.146)
(Driver info: chromedriver=2.36.540471 (9c759b81a907e70363c6312294d30b6ccccc2752),platform=Linux 4.9.125-linuxkit x86_64)
/var/www/vendor/facebook/webdriver/lib/Exception/WebDriverException.php:102
/var/www/vendor/facebook/webdriver/lib/Remote/HttpCommandExecutor.php:331
/var/www/vendor/facebook/webdriver/lib/Remote/RemoteWebDriver.php:565
/var/www/vendor/facebook/webdriver/lib/Remote/RemoteWebDriver.php:204
/var/www/vendor/laravel/dusk/src/Browser.php:264
/var/www/vendor/laravel/dusk/src/Concerns/ProvidesBrowser.php:141
/var/www/vendor/laravel/framework/src/Illuminate/Support/Traits/EnumeratesValues.php:176
/var/www/vendor/laravel/dusk/src/Concerns/ProvidesBrowser.php:147
/var/www/vendor/laravel/dusk/src/Concerns/ProvidesBrowser.php:70
/var/www/modules/Venues/Tests/Browser/Venue/ResourcesTest.php:87
他们不提供失败屏幕截图,堆栈跟踪会将您带到测试的结束 } 而不是测试中的实际行,所以我只能假设在实际测试开始之前存在问题
我尝试自己对测试进行各种更改,添加等待和睡眠,但没有一个能够摆脱这些问题。它们似乎在运行测试时发生 3/10 次。任何建议将不胜感激,如果我没有留下足够的细节,请告诉我,我很乐意提供更多
此错误消息...
FacebookWebDriverExceptionStaleElementReferenceException: stale element reference: element is not attached to the page document
(Session info: headless chrome=65.0.3325.146)
(Driver info: chromedriver=2.36.540471 (9c759b81a907e70363c6312294d30b6ccccc2752),platform=Linux 4.9.125-linuxkit x86_64)
和此错误消息...
FacebookWebDriverExceptionNoSuchElementException: no such element: Unable to locate element: {"method":"tag name","selector":"body"}
(Session info: headless chrome=65.0.3325.146)
(Driver info: chromedriver=2.36.540471 (9c759b81a907e70363c6312294d30b6ccccc2752),platform=Linux 4.9.125-linuxkit x86_64)
。暗示ChromeDriver无法与浏览上下文(即Chrome浏览器会话(进行交互。
您的主要问题是您使用的二进制文件版本之间的不兼容,如下所示:
- 您正在使用的 chromedriver=2.36.540471
- chromedriver=chromedriver=2.36的发行说明明确提到了以下内容:
支持铬 v63-65
- 您正在使用的 chrome= 65.0
因此,显然chromedriver=2.36和chrome= 65.0是兼容的,但可能与当前版本的Selenium客户端v3.141.59不兼容。
溶液
确保:
- 硒已升级到当前级别 版本 3.141.59。
- ChromeDriver已更新到当前的 ChromeDriver v79.0.3945.36 级别。 Chrome
- 已更新到当前的Chrome 版本 79.0级别。(根据 ChromeDriver v79.0 发行说明(
- 通过IDE清理项目工作中心,并仅使用所需的依赖项重新生成项目。
- 如果基本 Web 客户端版本太旧,请将其卸载并安装最新的 GA 和已发布版本的Web 客户端。
- 重新启动系统。
- 以非 root用户身份执行
@Test
。 - 始终在方法中调用
driver.quit()
tearDown(){}
以正常关闭和销毁WebDriver和Web 客户端实例。
想发表评论,但堆栈溢出不会让新手添加评论。这可能不是答案,而是一个建议。
尝试在处理元素之前添加静态等待。或者在调试时,在发生异常的位置之前添加断点。通常等待更长的头发可以解决问题。
如果这似乎工作正常,请考虑在处理元素之前实现显式等待元素的显示和启用。
在某些情况下,即使显式等待返回,您可能仍需要执行非常小的静态等待。可以这么说,有时元素仍在滑动。