Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Selenium WebDriver +Chrome on Virtual Box. Помощь


(Руслан) #1

Всем привет, нужна помощь…
не могу запустить chrome webdriver на виртуалке…выдаёт:

java.lang.NoSuchMethodError: org.openqa.selenium.os.CommandLine.findExecutable(Ljava/lang/String;)Ljava/lang/String;
	at org.openqa.selenium.chrome.ChromeDriverService.createDefaultService(ChromeDriverService.java:83)
	at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:87)
	at Main.setUp(Main.java:19)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:27)
	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
	at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
	at org.junit.runners.Suite.runChild(Suite.java:128)
	at org.junit.runners.Suite.runChild(Suite.java:24)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
	at org.junit.runner.JUnitCore.run(JUnitCore.java:157)
	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:77)
	at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:195)
	at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:63)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)

Начало кода:

     public class Main {

    public ChromeDriver driver;

    @org.junit.Before
    public void setUp() throws Exception {
        System.setProperty("webdriver.chrome.driver", "C:\\chromedriver.exe");
        driver = new ChromeDriver();
        driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        driver.manage().window().maximize(); 
        driver.get("ххх.хх.ua/");
       }

Запуск ChromeDriver в зависимости от ОС
(Дмитрий Жарий) #2

Ужос какой.
Сперва стандартный вопрос: а у вас все точно все самое свежее: бибилотеки и chromdriver, какая у вас версия и того и того?

Попробуйте проделать следующее:

  • Удалите C:\chromedriver.exe
  • Создайте папку C:\webdrivers
  • Скопируйте свежескаченный chromedriver.exe в эту папку
  • Добавьте “C:\webdrivers” в системную переменную окружения PATH
  • Удалите строчку кода:
    System.setProperty(“webdriver.chrome.driver”, “C:\chromedriver.exe”);

Попробуйте, может запустится :smiley:


(sidelnikovmike) #3

Можно еще положить webdriver.exe в ресурсы и путь не хардкодить и переменную окружения не ставить.
Считаю, что настроек для тестов должно быть минимальное кол-во, а установку переменных окружения - и вовсе не использовать. Иначе таким образом настройка окружения для запуска тестов превращается в ад


(Александр Таранков) #4

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


(Дмитрий Жарий) #5

У меня (в Visual Studio) все драйверы находятся в отдельной папке исходиников проекта.
Когда проект компилируется, то драйвер автоматически копируется в папку bin проекта.


(Руслан) #6

В общем :
selenium-chrome-driver-2.9.0.jar библиотека

пробовал chrome_driver (win32): 2.3, 2.4.226107, 2,2.


(Руслан) #7

а об этом можно поподробней?)


(Руслан) #8

хм…не знаю, как в Visual Studio, но в Intellij Idea свои нюансы)


(sidelnikovmike) #9

На IDE завязываться - вообще не правильно.


(Руслан) #10

пока учусь - хоть что-то…это всё равно лучше, чем selenium ide


(Дмитрий Жарий) #11

В первую очередь, попробуйте обновиться. Версия у вас однозначно очень старая.

http://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-chrome-driver

Про PATH:

Windows Vista and Windows 7 users


(Руслан) #12

спасибо, скачал более новую версию, обновил, удалил в “pom” дублирующиеся депенденси с “хром” и запустилось))


Поставка тестов заказчику при помощь Jenkins
(sidelnikovmike) #13
String pathToFile = SeleniumAdapter.class.getClassLoader().getResource("chromedriver.exe").toString();                
pathToFile = pathToFile.substring("file:/".length(), pathToFile.length());
System.setProperty("webdriver.chrome.driver", pathToFile);

Не очень красиво конечно делать substring, но я уже давно такое использую. Можно попробовать как то избавиться от этой приставки изначально. Работает нормально.
При этом кладем chromedriver.exe в папку resources.