Не запускаются тесты на ноде с Оперой 38

Добрый день, помогите пожалуйста решить следующую проблему.

Поднята нода с оперой:

java -jar selenium-server-standalone-2.53.0.jar -hub http://10.16.102.4:4444/grid/register -role node -nodeConfig config.json -Dwebdriver.opera.driver=“C:\selenium\operadriver.exe”

operadriver-последний из гита operasoftware/operachromiumdriver.

конфиг ноды:

{
“capabilities”: [{
“maxInstances”: 3,
“platform”: “WINDOWS”,
“browserName”: “opera”,
“version”: 38
}],
“configuration”: {
“cleanUpCycle”: 2000,
“timeout”: 30000,
“port”: 5555,
“register”: true,
“hubPort”: 4444,
“maxSessions”: 5
}
}

Нода регистрируется в гриде, корректно отображается иконка и версия оперы.
В тесте браузер указываю так (варианты с хромом и фф работают):

   def setUp(self):
              self.driver = webdriver.Remote(
                      command_executor = 'http://10.16.102.4:4444/wd/hub',
                      desired_capabilities ={'browserName': 'opera',
                          'version': 38}
                     )

При запуске следующая ошибка:

WebDriverException: Message: Error forwarding the new session cannot find : Capabilities [{browserName=opera, version=38}]
Stacktrace:
at org.openqa.grid.web.servlet.handler.RequestHandler.process (RequestHandler.java:115)
at org.openqa.grid.web.servlet.DriverServlet.process (DriverServlet.java:83)
at org.openqa.grid.web.servlet.DriverServlet.doPost (DriverServlet.java:67)
at javax.servlet.http.HttpServlet.service (HttpServlet.java:707)
at javax.servlet.http.HttpServlet.service (HttpServlet.java:790)
at org.seleniumhq.jetty9.servlet.ServletHolder.handle (ServletHolder.java:808)
at org.seleniumhq.jetty9.servlet.ServletHandler.doHandle (ServletHandler.java:587)
at org.seleniumhq.jetty9.server.session.SessionHandler.doHandle (SessionHandler.java:221)
at org.seleniumhq.jetty9.server.handler.ContextHandler.doHandle (ContextHandler.java:1127)
at org.seleniumhq.jetty9.servlet.ServletHandler.doScope (ServletHandler.java:515)
at org.seleniumhq.jetty9.server.session.SessionHandler.doScope (SessionHandler.java:185)
at org.seleniumhq.jetty9.server.handler.ContextHandler.doScope (ContextHandler.java:1061)
at org.seleniumhq.jetty9.server.handler.ScopedHandler.handle (ScopedHandler.java:141)
at org.seleniumhq.jetty9.server.handler.HandlerWrapper.handle (HandlerWrapper.java:97)
at org.seleniumhq.jetty9.server.Server.handle (Server.java:499)
at org.seleniumhq.jetty9.server.HttpChannel.handle (HttpChannel.java:310)
at org.seleniumhq.jetty9.server.HttpConnection.onFillable (HttpConnection.java:257)
at org.seleniumhq.jetty9.io.AbstractConnection$2.run (AbstractConnection.java:540)
at org.seleniumhq.jetty9.util.thread.QueuedThreadPool.runJob (QueuedThreadPool.java:635)
at org.seleniumhq.jetty9.util.thread.QueuedThreadPool$3.run (QueuedThreadPool.java:555)
at java.lang.Thread.run (Thread.java:745)

В логах ноды вот это:

11:48:57.256 WARN [15] org.openqa.selenium.remote.server.DriverServlet - Exception thrown
java.util.concurrent.ExecutionException: org.openqa.selenium.WebDriverException: The best matching driver provider org.openqa.selenium.ie.InternetExplorerDriver can’t create a new driver instance for Capabilities [{browserName=opera, version=38}]
Build info: version: ‘2.53.0’, revision: ‘35ae25b’, time: ‘2016-03-15 17:00:58’
System info: host: ‘win7-pc’, ip: ‘10.16.102.219’, os.name: ‘Windows 7’, os.arch: ‘amd64’, os.version: ‘6.1’, java.version: ‘1.8.0_91’
Driver info: driver.version: unknown
at java.util.concurrent.FutureTask.report(Unknown Source)
at java.util.concurrent.FutureTask.get(Unknown Source)
at org.openqa.selenium.remote.server.DefaultSession.execute(DefaultSession.java:183)
at org.openqa.selenium.remote.server.DefaultSession.(DefaultSession.java:119)
at org.openqa.selenium.remote.server.DefaultSession.createSession(DefaultSession.java:95)
at org.openqa.selenium.remote.server.DefaultDriverSessions.newSession(DefaultDriverSessions.java:124)
at org.openqa.selenium.remote.server.handler.NewSession.handle(NewSession.java:59)
at org.openqa.selenium.remote.server.handler.NewSession.handle(NewSession.java:1)
at org.openqa.selenium.remote.server.rest.ResultConfig.handle(ResultConfig.java:111)
at org.openqa.selenium.remote.server.JsonHttpCommandHandler.handleRequest(JsonHttpCommandHandler.java:79)

Caused by: org.openqa.selenium.WebDriverException: The best matching driver provider org.openqa.selenium.ie.InternetExplorerDriver can’t create a new driver instance for Capabilities [{browserName=opera, version=38}]
Build info: version: ‘2.53.0’, revision: ‘35ae25b’, time: ‘2016-03-15 17:00:58’
System info: host: ‘win7-pc’, ip: ‘10.16.102.219’, os.name: ‘Windows 7’, os.arch: ‘amd64’, os.version: ‘6.1’, java.version: ‘1.8.0_91’
Driver info: driver.version: unknown

Есть подозорение что присутствует ошибка в команде запуска ноды или в конфиге, но не могу понять где.

Спасибо!

Хаб когда поднимаете, надо же ещё указать эти самые теги с названием браузера и его версией, чтобы грид знал где запускать тесты.
Руководство пользователя - Необязательные параметры

Хаб проводит сопоставление desired vs requested capabilities по 3м критериям: browser / version / platform. Раз у вас на ноде засечена платформа WINDOWS, вам нужно передать соответствующее значение и в desired_capabilities. Либо же уберите с ноды данную опцию, тогда платформа будет определяться автоматически (для семерки это VISTA, если не изменяет память).

П.С. Хотя, если такая же конфигурация работает для хрома и FF, возможно дело в самом драйвере. Странно, что он определяет match, как IE (видимо по WINDOWS платформе). Версии точно актуальные / поддерживаемые используете?

Update: стоп, если вы используете operachromiumdriver, вам нужно идти по другому пути. Исходя из статьи, с оперой нужно работать так же, как и с хромом, просто подсовывая оперовский бинарник.

platform убрал, ошибка осталась.

Спасибо за ссылку,
Но есть небольшая проблема, у меня python+nosetests, а в статье используется java.
Я правильно понял, что в сетапе теста у webdriver.Remote надо указать путь к бинарнику оперы?

Ключевые строки:

System.setProperty("webdriver.chrome.driver", "/path/to/operadriver");

Start OperaDriver

URL hubUrl = new URL("http://localhost:9515");

Please note URL format is different from typical RemoteWebDriver setup. DesiredCapabilities don’t need to specify browser.

        service = new ChromeDriverService.Builder()
                .usingDriverExecutable(new File("/path/to/operadriver"))
                .usingAnyFreePort()
                .build();

Попробуйте теперь сложить всю картину воедино.

2 лайка

Проблема решена.
Ноду запустил вот так:

java -jar selenium-server-standalone-2.53.0.jar -role webdriver -hub http://hub:4444/grid/register -browser browserName=chrome,maxInstances=4,version=opera -Dwebdriver.chrome.driver=C:\selenium\operadriver.exe -port 5555

После этого в тесты передаю ‘browserName’: ‘chrome’, ‘version’: ‘opera’
version: opera - чтобы не запутаться, так как уже есть ноды с хромом.
Отдельно запускать operadriver и прописывать его адрес не потребовалось.

Спасибо за помощь!

Отмечайте решенные и полезные ответы соответствующими маркерами.

1 лайк

Слушайте, а зачем вообще запускать тесты в опере? Она же использует движок хрома! Запускайте в хроме.

3 лайка