我正在尝试通过在Red-Hat Linux服务器上设置的Jenkins Jobs运行Selenium(FluentLenium)测试。它正在运行一个简单的JUnit / WebDriver测试和一个带有" mvn测试的maven构建"项目目录中的命令。我面临的问题是找到一个驱动程序来运行它。詹金斯工程师在我指定的路径上为我设置了一个geckodriver .exe 。虽然它似乎并没有多大帮助。
我的代码失败的地方:
@Override
public WebDriver newWebDriver(){
System.setProperty("webdriver.gecko.driver", "/var/lib/jenkins/tools/gecko/geckodriver.exe");
return new FirefoxDriver();
}
org.openqa.selenium.WebDriverException:
Browser failed to start, test [ searchForGod(ok.TGoogle) ] execution interrupted.
Caused by: [ java.lang.IllegalStateException: The driver executable does not exist: /var/lib/jenkins/tools/gecko/geckodriver.exe]
+ ls /var/lib/jenkins/tools/gecko/
geckodriver
geckodriver-v0.16.1-linux64.tar.gz
我知道geckodriver需要运行Firefox应用程序。有人告诉我,因为linux服务器是非GUI的,a display port is setup to run Firefox。这个显示端口在linux服务器上的环境变量上设置为DISPLAY = 99.再次,虽然我迷失了如何让我的pom.xml或我的java代码指向这个。目前我正在尝试:
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.20.1</version>
<configuration>
<includes>
<include>PASS.class</include>
<include>TGoogle.class</include>
</includes>
<environmentVariables>
<DISPLAY>99</DISPLAY>
</environmentVariables>
</configuration>
</plugin>
</plugins>
这些都不起作用,我没有取得任何进展。我现在唯一的选择就是在Linux启动时设置我自己的Jenkins服务器,并尝试让它在本地工作,然后让我们的Jenkins工程师使用我的设置。虽然他声称我应该能够运行它,因为其他人已经能够通过Selenium插件提交.html文件。虽然,我没有运气,已经用尽所有选择。
版本:
本地: Selenium WebDriver 3.5.3,Junit 4.9,Fluentlenium 3.4,Maven
Linux服务器:他说他正在使用selenium-standalone-server.jar 2.44(我知道这肯定会与我的FluentLenium版本发生冲突,但是如果没有它,我会得到同样的例外...... ),Red Hat Enterprise Linux Server 7.2版,geckodriver 0.19.1
更新:
以下代码用于创建与服务器的连接。 Firefox版本现在是52.4,geckodriver 0.16.1,Selenium 3.7.0,FluentLenium 3.4。此版本配置在本地工作。是的geckodriver不是.exe。它只是geckodriver,没有文件扩展名。
@Override
public WebDriver newWebDriver(){
GeckoDriverService ds = new GeckoDriverService.Builder()
.usingDriverExecutable(new File("/var/lib/jenkins/tools/gecko/0.16.1/geckodriver"))
.usingFirefoxBinary(new FirefoxBinary(new File("/usr/bin/firefox")))
.withEnvironment(ImmutableMap.of("DISPLAY",":99")).build();
return new FirefoxDriver(ds);
}
不幸的是Jenkins现在正在抛出:
[INFO] Running TGoogle
Nov 03, 2017 3:46:48 PM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: W3C
[ERROR] Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 4.703 s <<< FAILURE! - in TGoogle
[ERROR] searchForGod(TGoogle) Time elapsed: 4.636 s <<< FAILURE!
java.lang.AssertionError
at TGoogle.searchForGod(TGoogle.java:29)
至少它连接&#34;现在。虽然它在当地运行良好。
更新2: 终于现在工作了。 newWebDriver()方法代码中显示的配置是正确的。我有一个包装在页面对象中的断言,而不是直接在JUnit @Test中。不知道为什么这会产生影响(因为它没有在本地IntelliJ中)。一旦我移动断言它就有效!!万岁,希望这有助于某人。
答案 0 :(得分:1)
解压缩geckodriver tarball并指定提取的geckodriver文件的路径。使用您在pom.xml中提到的相同版本的selenium服务器。 在主机linux机器上安装 XVFB 。
仔细检查geckodriver可执行版本是否兼容 在主机上使用Firefox浏览器版本。