在Jenkins上运行Selenium测试

时间:2017-11-02 21:56:26

标签: java linux selenium jenkins

我正在尝试通过在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中)。一旦我移动断言它就有效!!万岁,希望这有助于某人。

1 个答案:

答案 0 :(得分:1)

解压缩geckodriver tarball并指定提取的geckodriver文件的路径。使用您在pom.xml中提到的相同版本的selenium服务器。  在主机linux机器上安装 XVFB

  

仔细检查geckodriver可执行版本是否兼容   在主机上使用Firefox浏览器版本。