Тайм-аут ChromeDriver при развертывании (Selenium)

У меня возникают проблемы с запуском ChromeDriver для Selenium при развертывании моего приложения. Это приложение Liberty с WebSphere Application Server на Bluemix.

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

Error 500: org.openqa.selenium.WebDriverException: Timed out waiting for driver server to start. Build info: version: '3.11.0', revision: 'e59cfb3', time: '2018-03-11T20:26:55.152Z' System info: host: 'ab262009-655a-4b7e-72a8-eb5250d668ac', ip: '10.254.1.142', os.name: 'Linux', os.arch: 'amd64', os.version: '4.4.0-75-generic', java.version: '1.8.0_161' Driver info: driver.version: ChromeDriver

Мои журналы показывают эти две ошибки

[err] /home/vcap/app/wlp/usr/servers/projectname/resources/chromedriver: 1: /home/vcap/app/wlp/usr/servers/projectname/resources/chromedriver: Syntax error: Unterminated quoted string
APP/0[ERROR ] org.apache.commons.exec.ExecuteException: Process 
exited with an error: 2 (Exit value: 2)
APP/0org.openqa.selenium.WebDriverException: Timed out waiting for driver server to start.
APP/0[ERROR ] SRVE0777E: Exception thrown by application class 'org.openqa.selenium.remote.service.DriverService.waitUntilAvailable:192'
APP/0Caused by: org.openqa.selenium.net.UrlChecker$TimeoutException: Timed out waiting for [http://localhost:31300/status] to be available after 20018 ms

или же

/home/vcap/app/wlp/usr/servers/projectname/resources/chromedriver: Syntax error: "(" unexpected

Исходный код:

public static void runTest(String os) throws InterruptedException {

    // Detect Operating System user is running
    System.out.println("Operating system read in: " + os);
    // Initialize driver

    if (os.contains("Mac")) {
        System.setProperty("webdriver.chrome.driver", System.getProperty("user.dir") + "/resources/chromedriver");
    } else {
        System.setProperty("webdriver.chrome.driver", System.getProperty("user.dir") + "/resources/chromedriver_windows.exe");
    }
    WebDriver driver = new ChromeDriver();

Ошибка возникает в строке создания объекта ChromeDriver.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
767
2

Ответы 2

Кажется, вы не настраиваете свое двоичное местоположение до создания объекта WebDriver. Обновите свой метод runTest, как показано ниже, а затем попробуйте.

public static void runTest(String os) throws InterruptedException {

    // Detect Operating System user is running
    System.out.println("Operating system read in: " + os);
    // Initialize driver
    String DRIVER_BINARY_LOCATION;
    switch(os.toUpperCase()){

        case "MAC":
            DRIVER_BINARY_LOCATION = System.getProperty("user.dir") + "/resources/chromedriver");
            break;
        case "LINUX":
            DRIVER_BINARY_LOCATION = System.getProperty("user.dir") + "/resources/chromedriver");
            break;
        case "WINDOW":
            DRIVER_BINARY_LOCATION = System.getProperty("user.dir") + "/resources/chromedriver.exe");
            break;
        default:
            throw new IllegalArgumentException("Any meaningful message");
    }
    System.setProperty("webdriver.chrome.driver", DRIVER_BINARY_LOCATION);
    WebDriver driver = new ChromeDriver();

Спасибо за предложение. Увидев ту же ошибку тайм-аута в браузере, и журнал показывает мне [err] / home / vcap / app / wlp / usr / servers / projectname / resources / chromed‌ river: 1: / home / vcap / app / wlp / usr / servers / projectname / resources / chromed‌ river: Синтаксическая ошибка: незавершенная строка в кавычках

user3413540 25.04.2018 21:42

Извините, я изначально неправильно вставил код. Обновил то, что было изначально. Удалил лишний материал, скопировав его сюда.

user3413540 25.04.2018 21:57

Не могли бы вы сообщить мне, где вы разместили двоичные файлы драйверов Chrome и какую ОС вы используете?

Aditya Gaurav 26.04.2018 08:53

Он находится в корневом каталоге серверного пакета в папке ресурсов. Я на Mac OS, сам сервер Linux.

user3413540 26.04.2018 19:22

Ниже приведен список комбинаций двоичных файлов WebDriver и ОС * Linux -> Linux ChromeDriver Binary * MAC -> MAC ChromeDriver Binary * Windows -> Window ChromeDriver Binary Так что просто проверьте правильность двоичных файлов. Как и в вашем коде в блоке if-else, вы проверяете только ОС MAC для other OS, например Windows / Linux, он всегда выбирает двоичный файл драйвера Chrome для Windows. Итак, если ваши тесты выполняются на машине Linux, ваш код выбирает двоичный файл машины Windows. Пожалуйста, проверьте мой обновленный ответ выше.

Aditya Gaurav 27.04.2018 09:40

Я собираюсь попробовать и еще раз протестировать. Но переданная строка os считывается из браузера человека, просматривающего веб-сайт, а не из реальной машины. Итак, он читал Mac (я на Mac), и я вручную заменил драйвер Mac на Linux, чтобы посмотреть, будет ли он работать, а я не верю, что это так. Я перепишу код под все операционные системы, но на всякий случай.

user3413540 27.04.2018 21:42

Это сообщение об ошибке ...

[err] /home/vcap/app/wlp/usr/servers/projectname/resources/chromedriver: 1: /home/vcap/app/wlp/usr/servers/projectname/resources/chromedriver: Syntax error: Unterminated quoted string

... подразумевает, что линия System.setProperty() имеет Синтаксическая ошибка, в частности Незавершенная строка в кавычках

Ваша основная проблема заключается в System.setProperty() с path.separator следующим образом:

Решение

Измените строку System.setProperty() следующим образом:

if (os.contains("Mac")) {
    String user_dir = System.getProperty("user.dir");
    System.setProperty("webdriver.chrome.driver", user_dir+"/resources/chromedriver");
    } else {
    System.setProperty("webdriver.chrome.driver", user_dir+"/resources/chromedriver_windows.exe");

Обновлять

Поскольку вы все еще видите ту же ошибку, вы можете попробовать следующую альтернативу:

if (os.contains("Mac")) {
    System.setProperty("webdriver.chrome.driver", "./resources/chromedriver");
    } else {
    System.setProperty("webdriver.chrome.driver", "./resources/chromedriver_windows.exe");

К сожалению, вижу ту же проблему :(

user3413540 25.04.2018 22:42

@ user3413540 Оформить заказ на мой ответ и сообщить статус.

DebanjanB 25.04.2018 22:53

Все еще та же проблема. Это звучит на основе ошибки, которую я вижу в браузере, у нее нет проблем с поиском файла драйвера, просто новая строка ChromeDriver () вызывает проблемы, и она не запускается. Я использую драйвер Mac на своем компьютере, который работает нормально, похоже, что сервер работает под управлением Linux. При развертывании я пробовал драйверы для Linux и Mac.

user3413540 25.04.2018 23:14

@ user3413540 В этом случае сообщение журнала[err] /home/vcap/app/wlp/usr/servers/projectname/resources/chromed‌​river: 1: /home/vcap/app/wlp/usr/servers/projectname/resources/chromed‌​river: Syntax error: Unterminated quoted string не должно было быть

DebanjanB 26.04.2018 13:59

Причина, по которой я говорю это, заключается в том, что когда я меняю каталог на место, где драйвер не находится, он выдает еще одну ошибку, говоря, что он не может его найти. В строке 33 трассировки стека находится строка Webdriver driver = new ChromeDriver (). Это немного дальше по трассировке стека: APP / 0 в org.openqa.selenium.net.UrlChecker.waitUntilAvailable (UrlChe‌ cker.java:100) APP / 0 Информация о драйвере: driver.version: ChromeDriver APP / 0 Информация о сборке: версия : '3.11.0', ревизия: 'e59cfb3', время: '2018-03-11T20: 33: 08.638Z' APP / 0 на com.ibm.esh.o2c.art.Tester.runTest (Tester.java:33 )

user3413540 26.04.2018 19:39

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