在远程服务器上的Tomcat中运行Selenium测试会出现"错误:GDK_BACKEND与可用显示不匹配"

时间:2017-08-24 07:08:49

标签: linux selenium tomcat selenium-webdriver

我试图在远程服务器上使用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链接:

  • ssh登录并在远程服务器上使用lynx
  • 在远程服务器上执行tightvncserver:1,使用本地计算机上的远程桌面客户端,只在远程服务器上安装的firefox中调用此链接
  • 只是从本地计算机上调用远程网址

...我总是 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无关,但我不知道下一步该做什么......

1 个答案:

答案 0 :(得分:0)

使用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 &