Тест с chromedriver не работает в приложении Java, развернутом на сервере Heroku - PullRequest
0 голосов
/ 01 июня 2018

У меня есть небольшой тест Selenium WebDriver для приложения Vaadin.С хромедрайвером, если расскажете точнее.В моем приложении есть кнопка «Play demo», которая запускает приложение в новой сессии браузера Chrome и выполняет некоторые задачи по тестированию приложения.

        WebDriverManager.chromedriver().setup(); // am getting chromedriver with this WebDriverManager

        // After that:
        ChromeOptions options = new ChromeOptions();
        options.addArguments("--headless");
        driver = new ChromeDriver(options);
        driver.navigate().to("https://pazukdevtestapp1.herokuapp.com");

        // Or so:
        driver = new ChromeDriver(); 
        driver.navigate().to("https://pazukdevtestapp1.herokuapp.com/#!Hotels");

Когда я запускаю приложение с локального хоста - тест запускается, и все хорошо работает с обоими этими двумя вариантами кода.Не берите в голову, нажмите на кнопку, чтобы запустить само приложение на локальном хосте или то же приложение на сервере Heroku.Но это не работает, если попытаться запустить его из приложения на сервере.Есть идеи, почему так происходит?

PS Приложение на сервере:

2018-06-01T09:15:08.692373+00:00 app[web.1]: Jun 01, 2018 9:15:08           AM org.openqa.selenium.os.UnixProcess checkForError
2018-06-01T09:15:08.692407+00:00 app[web.1]: SEVERE: org.apache.commons.exec.ExecuteException: Process exited with an error: 127 (Exit value: 127)
2018-06-01T09:15:08.692918+00:00 app[web.1]: Exception in thread "Thread-14" org.openqa.selenium.WebDriverException: Timed out waiting for driver server to start.
2018-06-01T09:15:08.692921+00:00 app[web.1]: Build info: version: '3.4.0', revision: 'unknown', time: 'unknown'
2018-06-01T09:15:08.692931+00:00 app[web.1]: System info: host: '25cd720a-5a6d-4e75-b214-9d81aafe7880', ip: '172.16.177.98', os.name: 'Linux', os.arch: 'amd64', os.version: '4.4.0-1019-aws', java.version: '1.8.0_171-heroku'
2018-06-01T09:15:08.692994+00:00 app[web.1]: Driver info: driver.version: ChromeDriver
2018-06-01T09:15:08.693054+00:00 app[web.1]:    at org.openqa.selenium.remote.service.DriverService.waitUntilAvailable(DriverService.java:193)
2018-06-01T09:15:08.694600+00:00 app[web.1]:    at org.openqa.selenium.remote.service.DriverService.start(DriverService.java:181)
2018-06-01T09:15:08.694661+00:00 app[web.1]:    at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:78)
2018-06-01T09:15:08.694716+00:00 app[web.1]:    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:637)
2018-06-01T09:15:08.694798+00:00 app[web.1]:    at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:250)
2018-06-01T09:15:08.694853+00:00 app[web.1]:    at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:236)
2018-06-01T09:15:08.694938+00:00 app[web.1]:    at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:137)
2018-06-01T09:15:08.694993+00:00 app[web.1]:    at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:184)
2018-06-01T09:15:08.695049+00:00 app[web.1]:    at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:171)
2018-06-01T09:15:08.695133+00:00 app[web.1]:    at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:124)
2018-06-01T09:15:08.695187+00:00 app[web.1]:    at com.pazukdev.auxiliary_services.DemoService.prepareBrowser(DemoService.java:100)
2018-06-01T09:15:08.695276+00:00 app[web.1]:    at com.pazukdev.auxiliary_services.DemoService.executeTasks(DemoService.java:63)
2018-06-01T09:15:08.695337+00:00 app[web.1]:    at com.pazukdev.auxiliary_services.DemoService.access$000(DemoService.java:22)
2018-06-01T09:15:08.696501+00:00 app[web.1]:    at com.pazukdev.auxiliary_services.DemoService$1.run(DemoService.java:39)
2018-06-01T09:15:08.696566+00:00 app[web.1]:    at java.lang.Thread.run(Thread.java:748)
2018-06-01T09:15:08.697012+00:00 app[web.1]: Caused by: org.openqa.selenium.net.UrlChecker$TimeoutException: Timed out waiting for [http://localhost:32260/status] to be available after 20021 ms
2018-06-01T09:15:08.697192+00:00 app[web.1]:    at org.openqa.selenium.net.UrlChecker.waitUntilAvailable(UrlChecker.java:107)
2018-06-01T09:15:08.697251+00:00 app[web.1]:    at org.openqa.selenium.remote.service.DriverService.waitUntilAvailable(DriverService.java:190)
2018-06-01T09:15:08.697305+00:00 app[web.1]:    ... 14 more
2018-06-01T09:15:08.697708+00:00 app[web.1]: Caused by: com.google.common.util.concurrent.UncheckedTimeoutException: java.util.concurrent.TimeoutException
2018-06-01T09:15:08.697772+00:00 app[web.1]:    at com.google.common.util.concurrent.SimpleTimeLimiter.callWithTimeout(SimpleTimeLimiter.java:140)
2018-06-01T09:15:08.697878+00:00 app[web.1]:    at org.openqa.selenium.net.UrlChecker.waitUntilAvailable(UrlChecker.java:80)
2018-06-01T09:15:08.698077+00:00 app[web.1]:    ... 15 more
2018-06-01T09:15:08.698848+00:00 app[web.1]: Caused by: java.util.concurrent.TimeoutException
2018-06-01T09:15:08.698916+00:00 app[web.1]:    at java.util.concurrent.FutureTask.get(FutureTask.java:205)
2018-06-01T09:15:08.699230+00:00 app[web.1]:    at com.google.common.util.concurrent.SimpleTimeLimiter.callWithTimeout(SimpleTimeLimiter.java:128)
2018-06-01T09:15:08.699288+00:00 app[web.1]:    ... 16 more  

1 Ответ

0 голосов
/ 01 июня 2018

Во-первых, и просто чтобы быть уверенным, что вы установили chromedriver на героку, используя пакеты сборки героку?Если нет, вам придется установить их, включив следующие два пакета сборки:

Далее, обратите внимание на конец README для heroku-buildpack-google-chrome, где показано, как получить путь для chromedriver, который нужно передать в ChromeOptions,который из того, что вы показали, вы не передали.

Наконец, вы создаете экземпляр нового ChromeOptions объекта выше, но из того, что вы показали, вы не передаете его ChromeDriver, что вы должны сделать следующим образом:

driver = new ChromeDriver(options);

Причина, по которой вы увидите, что это работает в вашей среде разработки, а не на heroku, вероятно, заключается в том, что chromedriver установлен где-то, где селен ожидает его найти, новам нужно явно указать путь при запуске на героку.

...