Проблема с PhantomJS (NullPointerException: null)

Никак не могу разобраться в чем дело. Решил вместо Firefox driver использовать PhantomJS.

имеется связка maven+junit+webdriver+java. Вот так подключаю драйвер phantomjs

import org.openqa.selenium.phantomjs.PhantomJSDriver;
import ru.yandex.qatools.allure.annotations.Title;

public class Test_purchases_prod_cab {
private WebDriver driver;
private boolean acceptNextAlert = true;
private StringBuffer verificationErrors = new StringBuffer();

@Before
public void setUp() throws Exception {
   driver = new PhantomJSDriver();  
  driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);

Если из консоли запускаю тесты руками, указав mvn clean test site - то все ОК.

Если запуск тестов выполняется по крону (запускается скрипт, в котором по сути прописано что дожна быть выполнена команда mvn clean test site ), то получаю вот такую ошибку :

FAILURE! testBuyCabProd_1year(Test_purchases_prod_cab) Time elapsed: 21.873 sec <<< ERROR! org.openqa.selenium.remote.UnreachableBrowserException: Could not start a new session. Possible causes are invalid address of the remote server or browser start-up failure. Build info: version: ‘2.53.0’, revision: ‘35ae25b1534ae328c771e0856c93e187490ca824’, time: ‘2016-03-15 10:43:46’ os.name: ‘Mac OS X’, os.arch: ‘x86_64’, os.version: ‘10.11.5’, java.version: ‘1.8.0_91’ Driver info: driver.version: PhantomJSDriver at java.util.concurrent.FutureTask.get(FutureTask.java:205) at com.google.common.util.concurrent.SimpleTimeLimiter.callWithTimeout(SimpleTimeLimiter.java:130) at org.openqa.selenium.net.UrlChecker.waitUntilAvailable(UrlChecker.java:80) at org.openqa.selenium.remote.service.DriverService.waitUntilAvailable(DriverService.java:175) at org.openqa.selenium.remote.service.DriverService.start(DriverService.java:166) at org.openqa.selenium.phantomjs.PhantomJSCommandExecutor.execute(PhantomJSCommandExecutor.java:78) at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:644) at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:249) at org.openqa.selenium.remote.RemoteWebDriver.(RemoteWebDriver.java:131) at org.openqa.selenium.remote.RemoteWebDriver.(RemoteWebDriver.java:144) at org.openqa.selenium.phantomjs.PhantomJSDriver.(PhantomJSDriver.java:115) at org.openqa.selenium.phantomjs.PhantomJSDriver.(PhantomJSDriver.java:104) at org.openqa.selenium.phantomjs.PhantomJSDriver.(PhantomJSDriver.java:94) at Test_purchases_prod_cab.setUp(Test_purchases_prod_cab.java:40) testBuyCabProd_1year(Test_purchases_prod_cab) Time elapsed: 21.878 sec <<< ERROR! java.lang.NullPointerException: null at Test_purchases_prod_cab.tearDown(Test_purchases_prod_cab.java:866)

при этом если использую Firefox driver по крону тесты запускаются и проходят нормально.

Помогите пожалуйста разобраться в чем у меня проблема с PhantomJS? Я никак не могу понять, почему запуск тестов руками проходит нормально, а по расписанию через скрипт валится - в чем разница?

Какую версию PhantomJSDriver вы используете?

“browserName”:“phantomjs”,“version”:“2.1.1”,
“driverName”:“ghostdriver”,“driverVersion”:“1.2.0”
PhantomJSDriver : 1.2.1

а делаете вы это на одном ПК? Запуск по крону и запуск вручную, или на своем - запуск вручную, а по крону где-то на сервере?

Все на одном ПК. Из IDEA и через консоль, все проходит удачно. По крону вываливается с ошибкой.

Во что в файле, который запускается по расписанию:

cd ~/Auto/new-test-git/test
PATH="/path/to/node_modules/phantomjs/bin:$PATH"
/opt/apache-maven/bin/mvn clean test site
exit 0

PATH добавил уже сейчас, думал это как то поможет


Я конечно только начинаю разбираться в автоматизации, но пока что в упор не понимаю, в чем разница между этими способами запуска.

Обновите до phantomjsdriver 1.3.0

И это я тоже пробовал. Как и впринципе все чтотя смог найти за сутки в интернете. Вся бредовость этой ситуации в том, что тесты ведь запускаются, и запускаются если я скрипт запускаю руками, а вот как только скрипт на выполнение тестов запускает крон, все отваливается

Проблема решена, всем кто откликнулся спасибо.
Решение оказалось банальным:
У меня сегодня обновился firefox на 47ю версию, и у меня начали отваливаться тесты, с точно такими же ошибками что и на phantomjs. При этом при запуске теста, firefox запускался и тут же крешился. Откатился на 46 версию и все стало норм. Эта ситуация натолкнула меня на мысль, что и с phantomjs происходит тоже самое. Попробовав версии 2.1.1 , 2.0.0, 1.9.6, 1.9.7 и 1.9.8 - На всех тесты валились с разными ошибками, за исключением - 1.9.8 - на которой все работает хорошо, на ней и остался.

Сдался вам этот Firefox?
Используйте chromedriver: он быстрее и надёжнее. И не ломается при каждом обновлении селениума.

Тут как бы такой момент, что я новичок в этом. Я себе поставил задачу, избавится от того чтобы тесты запускались в firefox. Как сделать так, чтобы firefox работал в фоне, вменяемого рабочего решения я пока не нашел. Поэтому для меня phantomjs показался очень даже не плохим вариантом.

Если я правильно понял, то так походу делать нельзя… Хорошо когда браузер запускается и открывается и в нем происходят какие-то действия. Вроде как сам пользователь все это проделывает. Хорошо когда есть такой сервер, на котором все это воспроизводиться.

Но есть ситуации, когда нет подобного сервера, есть только vps без графической среды? удаленно где-то там… На таком сервере можно использовать phantomjs

Но есть ситуации, когда нет подобного сервера, есть только vps без графической среды? удаленно где-то там… На таком сервере можно использовать phantomjs

1 лайк

@st_eremin, спасибо :slight_smile:

Но, слишком как-то все усложнено: запуск эмулятора иксов в фоне + еще может быть многопоточность и дургие всякие штуки на сервере, которые жрут ресурс… Ради опыта конечно постараюсь реализовать, но phantomjs, походу именно для этого и был придуман… :slight_smile:

Использую Xvfb для запуска Firefox, работает все хорошо, задания засылаю через SeleniumGrid2, проблемы только что с выгрузкой файлов к удаленно запущенному тесту.