事实证明,'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 实例。瞧!