Интеграция 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/

Другие вопросы по тегам