У меня возникают проблемы с запуском 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.




Кажется, вы не настраиваете свое двоичное местоположение до создания объекта 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();
Извините, я изначально неправильно вставил код. Обновил то, что было изначально. Удалил лишний материал, скопировав его сюда.
Не могли бы вы сообщить мне, где вы разместили двоичные файлы драйверов Chrome и какую ОС вы используете?
Он находится в корневом каталоге серверного пакета в папке ресурсов. Я на Mac OS, сам сервер Linux.
Ниже приведен список комбинаций двоичных файлов WebDriver и ОС * Linux -> Linux ChromeDriver Binary * MAC -> MAC ChromeDriver Binary * Windows -> Window ChromeDriver Binary Так что просто проверьте правильность двоичных файлов. Как и в вашем коде в блоке if-else, вы проверяете только ОС MAC для other OS, например Windows / Linux, он всегда выбирает двоичный файл драйвера Chrome для Windows. Итак, если ваши тесты выполняются на машине Linux, ваш код выбирает двоичный файл машины Windows. Пожалуйста, проверьте мой обновленный ответ выше.
Я собираюсь попробовать и еще раз протестировать. Но переданная строка os считывается из браузера человека, просматривающего веб-сайт, а не из реальной машины. Итак, он читал Mac (я на Mac), и я вручную заменил драйвер Mac на Linux, чтобы посмотреть, будет ли он работать, а я не верю, что это так. Я перепишу код под все операционные системы, но на всякий случай.
Это сообщение об ошибке ...
[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 Оформить заказ на мой ответ и сообщить статус.
Все еще та же проблема. Это звучит на основе ошибки, которую я вижу в браузере, у нее нет проблем с поиском файла драйвера, просто новая строка ChromeDriver () вызывает проблемы, и она не запускается. Я использую драйвер Mac на своем компьютере, который работает нормально, похоже, что сервер работает под управлением Linux. При развертывании я пробовал драйверы для Linux и Mac.
@ user3413540 В этом случае сообщение журнала[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 не должно было быть
Причина, по которой я говорю это, заключается в том, что когда я меняю каталог на место, где драйвер не находится, он выдает еще одну ошибку, говоря, что он не может его найти. В строке 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 )
Спасибо за предложение. Увидев ту же ошибку тайм-аута в браузере, и журнал показывает мне [err] / home / vcap / app / wlp / usr / servers / projectname / resources / chromed river: 1: / home / vcap / app / wlp / usr / servers / projectname / resources / chromed river: Синтаксическая ошибка: незавершенная строка в кавычках