我尝试在远程服务器上使用 WebDriver 执行 Selenium 测试,但失败并显示以下消息:
1503556834416 geckodriver INFO geckodriver 0.18.0
1503556834420 geckodriver INFO Listening on 127.0.0.1:13167
1503556834659 geckodriver::marionette INFO Starting browser /usr/bin/firefox with args ["-marionette"]
Error: GDK_BACKEND does not match available displays
该测试是 Spring Boot webapp 的一部分,托管在 Tomcat 8.5.20 中。测试执行是通过调用 Spring Boot webapp 的 url 链接触发的。由于使用带有 geckodriver 的浏览器 Firefox,这是导致错误的代码:
System.setProperty("webdriver.gecko.driver", "/opt/geckodriver");
WebDriver driver = new FirefoxDriver();
driver.get("http://www.yahoo.com");
该服务器具有 Debian 8 操作系统,桌面环境为 LXDE。不管我怎么称呼这个 webapp 链接:
...我总是得到GDK_BACKEND 不匹配可用的显示错误。
在我的本地环境中(与测试有关的唯一区别是不同的 Linux 操作系统;其他版本如 Tomcat、webapp、geckodriver 等都是相同的)该测试执行时没有任何问题。这是日志片段:
1503556181640 geckodriver INFO geckodriver 0.18.0
1503556181643 geckodriver INFO Listening on 127.0.0.1:18039
1503556181805 geckodriver::marionette INFO Starting browser /usr/lib64/firefox/firefox with args ["-marionette"]
1503556182440 Marionette INFO Listening on port 44917
08:29:43.198 [Forwarding newSession on session null to remote] INFO org.openqa.selenium.remote.ProtocolHandshake - Detected dialect: W3C
... and now the test is executed ...
我想它与远程服务器的配置有关,与 Selenium 无关,但我不知道下一步该做什么......
使用 Xvfb 是关键...
所以我删除了 LXDE,因为它不再需要(我认为我需要一个 selenium 桌面)并使用 xvfb-run 启动 tomcat。在我启动 xvfb(使用端口 99)并导出显示变量之后。
示例(使用在 systemd 引导脚本中使用的完整路径):
export DISPLAY=:99
/usr/bin/xvfb-run /opt/tomcat-latest/bin/startup.sh
/usr/bin/Xvfb :99 &
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句