我正在将jenkins与phantomjs集成以运行我的selenium测试脚本。 Phantomjs安装在我的jenkins服务器中,ghost驱动程序在端口8090中运行。但是,我的测试仍被跳过,它会抛出异常
驱动程序可执行文件的路径必须由 phantomjs.binary.path功能/系统属性/ PATH变量;对于 更多信息,请参阅https://github.com/ariya/phantomjs/wiki。该 最新版本可以从中下载 http://phantomjs.org/download.html“
我的jenkins在centos中运行。
我的代码如下所示,
@BeforeClass
public void setUp() throws Exception {
dCaps = new DesiredCapabilities();
driver = new PhantomJSDriver(dCaps);
baseUrl = "";
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
}
答案 0 :(得分:2)
驱动程序可执行文件的路径必须由 phantomjs.binary.path功能/系统属性/ PATH变量;
您应该明确指出将phantomJm exe放在应该执行测试的机器上的位置。所以我发现了两种解决方法:
1)可能性#1(明确地指向代码)
@BeforeClass
public void seleniumGrridUponGhostDriver() throws MalformedURLException {
File phantomjs = new File(System.getProperty("java.io.tmpdir")+File.separator+"phantomjs-1.9.7");
DesiredCapabilities dcaps = new DesiredCapabilities();
dcaps.setCapability("takesScreenshot", true);
dcaps.setCapability(PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_PROPERTY, phantomjs.getAbsolutePath());
this.driver = new RemoteWebDriver(new URL("http://162.243.175.134:8080"), dcaps);
driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);
//page instances init()
loginPage = PageFactory.initElements(driver, LoginPage.class);
homePage = PageFactory.initElements(driver, FacebookUserPage.class);
}
2)可能性#2,使用PhantomJS Windows/Mac OS X/Linux native binary embedder
pom.xml dependecies:
<!--substituting phanbedder with local Phanbedder implementation-->
<dependency>
<groupId>net.anthavio</groupId>
<artifactId>phanbedder-1.9.7</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>com.github.detro.ghostdriver</groupId>
<artifactId>phantomjsdriver</artifactId>
<version>1.1.0</version>
</dependency>
代码:
import net.anthavio.phanbedder.Phanbedder;
@BeforeClass
public void seleniumGrridUponGhostDriver() throws MalformedURLException {
File phantomjs = Phanbedder.unpack(); //Phanbedder to the rescue!
DesiredCapabilities dcaps = new DesiredCapabilities();
dcaps.setCapability("takesScreenshot", true);
dcaps.setCapability(PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_PROPERTY, phantomjs.getAbsolutePath());
this.driver = new RemoteWebDriver(new URL("http://162.243.175.134:8080"), dcaps);
driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);
//page instances init()
loginPage = PageFactory.initElements(driver, LoginPage.class);
homePage = PageFactory.initElements(driver, FacebookUserPage.class);
}
希望这有助于你
答案 1 :(得分:1)
我也在努力解决这个问题,并且已经在Linux上构建了Jenkins并希望使用该安装。使用系统属性不起作用(对于服务,甚至Jenkins中的全局Maven属性)。
我不喜欢上面的编程方法,因为这将解决方案与平台特定配置联系在一起。
最后,工作是把它放在POM中。
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <systemProperties> <phantomjs.binary.path>/usr/local/phantomjs/bin/phantomjs</phantomjs.binary.path> </systemProperties> </configuration> </plugin>
以下是对我有用的更详细的描述(不是我的文章): http://balamaci.ro/continous-integration-with-jenkins-docker-ansible-webdriver/