10

背景:
我将 selenium-server-2.25.0 与 J-Unit 4 结合使用,为我的 GWT 应用程序运行少数 UI 测试场景。在我的 IDE (Netbeans 7.2) 中,我可以右键单击我的项目,选择“测试”,然后看到 Firefox 窗口到处弹出(它们应该如此),Selenium 测试按预期运行。从命令行,我也可以运行mvn integration-test并查看相同的内容。

目标:
我试图让这些测试在 Xvfb 显示器中无头运行,但我似乎无法让它与 Maven 一起使用。我可以事先手动运行export display=:2(:2 是我的 Xvfb 显示器),然后测试在隐形显示器中成功运行。

问题:当我在 pom.xml 中包含此处的完整条目
似乎什么没有改变。我仍然看到 Windows 到处弹出,并且测试不在Xvfb 显示中运行。如果我把它拿出来再次运行,同样的结果。但是,当我将阶段从更改为时,Maven确实抱怨生命周期阶段无效 - 所以我知道它并没有完全忽略它,我正在编辑适当的 pom.xml。<plugin>mvn integration-testpre-integration-testqwertyasdf

谢谢!

4

1 回答 1

8

事实证明,'start-server' 和 'stop-server' 目标是用于启动/停止 SeleniumRC 服务器。这不是我想要的,因为我所有的测试都使用 WebDriver API。

显然,pom 中的“xvfb”目标确实在指定的生命周期阶段启动了一个 Xvfb 会话——我想我之前只是没有看到它。在它的配置中,你可以指定在哪里编写一个 props 文件,详细说明 Xvfb 正在运行的显示器。在 Java 代码中,可以读取此文件并将值传递给创建 WebDriver 时使用的 FirefoxBinary。

相关的 pom.xml 位如下:

<properties>
    <displayProps>target/selenium/display.properties</displayProps>
</properties>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <systemPropertyVariables>
                    <display.props>${displayProps}</display.props>
                </systemPropertyVariables>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>selenium-maven-plugin</artifactId>
            <version>2.3</version>
            <executions>
                <execution>
                    <id>xvfb</id>
                    <phase>test-compile</phase>
                    <goals>
                        <goal>xvfb</goal>
                    </goals>
                    <configuration>
                        <displayPropertiesFile>${displayProps}</displayPropertiesFile>
                    </configuration>
                </execution> 
            </executions>  
        </plugin>
    </plugins>
</build>

这会在第一个空闲显示(:20 或更高)上启动 Xvfb,并将值写入我稍后在 Java 代码中读取和使用的 props 文件。

String xvfbPropsFile = System.getProperty("display.props");

FirefoxBinary ffox = new FirefoxBinary();
ffox.setEnvironmentProperty("DISPLAY", /*read value from xvfbPropsFile*/);
WebDriver driver = new FirefoxDriver(ffox);

现在驱动程序将控制在适当显示中旋转的 Firefox 实例。瞧!

于 2012-09-25T21:45:56.310 回答