Интеграция Jenkins с фантомами для теста селеновой вебдрайвера
Я интегрирую jenkins с phantomjs для запуска моих тестовых сценариев селена. Phantomjs установлен на моем сервере jenkins, а драйвер-призрак работает на порте 8090. Но мои тесты все же были пропущены, и он выдает исключение, так как
Путь к исполняемому файлу драйвера должен быть установлен переменной phantomjs.binary.path Свойство / системное свойство / переменная PATH; Для получения дополнительной информации см. https://github.com/ariya/phantomjs/wiki. Последнюю версию можно скачать с http://phantomjs.org/download.html"
Мой Дженкинс работает в санто.
Мой код выглядит как ниже,
@BeforeClass
public void setUp() throws Exception {
dCaps = new DesiredCapabilities();
driver = new PhantomJSDriver(dCaps);
baseUrl = "";
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
}
2 ответа
Путь к исполняемому файлу драйвера должен быть установлен переменной phantomjs.binary.path Свойство / системное свойство / переменная PATH;
Вы должны явно указать, где вы помещаете phantomJm exe на компьютер, где должны выполняться тесты. Итак, я нашел 2 способа, как это решить:
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
pom.xml зависимости:
<!--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);
}
Надеюсь, это поможет вам
Я тоже боролся с этим, и уже собрал Jenkins на Linux и хотел использовать эту установку. Использование свойств системы не работает (для службы или даже для глобальных свойств Maven в Jenkins).
Мне не понравился программный подход, описанный выше, поскольку он связывал решение с конкретной конфигурацией платформы.
В конце концов, что работало, так это поместило его в 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/