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

Проблемы при удаленном выполнении тестов


(Kovalev07) #1

Есть пара проблем при удаленном выполнении тестов:

1) Если тесты выполняются в IE то вместо нормального скриншота я получаю скриншот полностью закрашенный черным цветом.

В chrome и ff скриншоты получаются нормально.  Используется RemoteWebDriver.

Если выполняю тесты локально (использую локальный webDriver: FirefoxDriver, ChromeDriver, InternetExplorerDriver или использую RemoteWebDriver)

то скриншоты получаются нормально во всех браузерах.

 

 

2) При удаленном выполнении тестов происходят ошибки которые не происходят при локальном выполнении (как локальным драйвером так и RemoteWebDriver )

 

 

3) Есть какое то отличие когда на одной машине запускается и хаб и нод и когда хаб и нод запускаются на разных машинах?


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

 

1) Случай, когда скриншот черным цветом удаленно, а локально нормально, в обоих случаях вы прогоняли тесты с запущенным драйвер-сервером  на одной и той же машине?
 
2) А какие ошибки? Попробуйте прогнать локально на одной и той же машине через RemoteWebdriver, при этом указав не localhost, а IP
 
3) Теоретически – отличия нет. Практически: настройки безопасности, надежность сетевого соединения, злой антивирус, закрытые порты, ошибки в конфигурации сети… конечно же есть.
 

(Kovalev07) #3

1) машины разные. 

2) например. был косяк при выполнении удаленного теста в ff когда в окне выполнялся следующий код

 

webDriver.findElement(By.name("trackorFormName")).clear();
webDriver.findElement(By.name("trackorFormName")).sendKeys("TestTrackorForm");
и затем нажималась кнопка которая открывает новое окно.
 
в элементе "trackorFormName" изначально находится текст "TestTrackorForm"
затем он стирается и прописывается заного
так вот при выполнении тестов удаленно в ff это окно просто не открывалось. (может быть кнопка не нажималась не разобрался до конца так как исправил свою ошибку)
 
 
стирать значение и писать затем тоже самое это был скопипастенный код.
когда изменил webDriver.findElement(By.name("trackorFormName")).sendKeys("TestTrackorForm");
на webDriver.findElement(By.name("trackorFormName")).sendKeys("TestTrackorFormEdit");
то тогда все стало нормально.
 
чем может такое объясняться?
 
 

(Kovalev07) #4

Скажите является ли принципиальным на каких платформах установлен хаб и ноды?

на какой JVM работает хаб и ноды?

Хаб:

стоит на линуксе. запускается через плагин к дженкинсу. https://wiki.jenkins-ci.org/display/JENKINS/Selenium+Plugin

java -version
java version "1.6.0_24"
OpenJDK Runtime Environment (IcedTea6 1.11.4)
OpenJDK 64-Bit Server VM (build 20.0-b12, mixed mode)
 

Ноды:

windows

java -version

 

java version "1.7.0_05"
Java(TM) SE Runtime Environment (build 1.7.0_05-b06)
Java HotSpot(TM) 64-Bit Server VM (build 23.1-b03, mixed mode)
 

(Sergey Korol) #5

1) При параллельном удаленном выполнении тестов на разных браузерах уже сталкивался с проблемой, когда IE отдавал черный экран. Но видимых причин тому найдено не было. Хотя, скажу сразу, что такое повторялось не для всех сайтов. Т.е. я мог запустить один и тот же тест для снятия скринов с разными линками, и в одном случае был черный экран, в других - нормальный скриншот получался. Сложно сказать тут, чей это косяк - драйвера, либы или самого сайта.

2) Чудес не бывает. Проблема скорее всего в задержках, либо динамически обновляемых контролах. Дописывание окончания к статическому тексту на поиск элемента на странице никак не влияет. Понаблюдайте за вашим неймом в момент редактирования. Если это драг&дроп попап, вполне вероятно, что его нейм динамически изменяется в момент фокуса. В такой ситуации я бы порекомендовал использовать поиск по xpath.

3) Не важно, на чем крутятся хабы / ноды. Главное, чтобы тесты знали, куда обращаться. Я поднимал хаб и на Windows, и на MAC OS, и на Linux, никаких отличий не увидел. Естественно либы и драйвера нужны под соответствующую ОС. Отличие есть в JDK, указанном в system env var, т.к. в зависимости от разрядности, будет запускаться соответствующий инстанс браузера. Это касается ситуаций, когда у вас стоит x64 система. Например, при работе с x64 IE вы не сможете оперировать PDF документами, ибо там отсутствует поддержка соответствующего x64 плагина. Ну еще могу отметить, что на Linux определенно будут проблемы с использованием класса Robot. Помимо того, что он не умеет работать удаленно и в headless env, ему еще не нравится запуск из-под демона. А т.к. у вас вероятней всего хаб / CI настроен в качестве демона, Robot просто не будет работать даже при локальном запуске.


(ivan_ochc) #6

 

Добрый день.

Спрошу еще в этой ветке:

На машине с первой нодой - WinXP, на машине со второй - win server 2008 R2.

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

 

Caused by: org.openqa.selenium.remote.ErrorHandler$UnknownServerException: Unable to connect to host 127.0.0.1 on port 7055 after 45000 ms. Firefox console output:

При запуске теста на одном компьютере с поднятыми двумя нодами проблем нету, тест запускается.

Может, проблема с драйвером?


(ivan_ochc) #7

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


(Sergey Korol) #8

Скорее всего проблема конфигурационного характера. Нужно видеть код инициализации драйвера и содержимое нодов для начала.


(ivan_ochc) #9

 

public WebDriver getWebDriver() {
if (driver == null) {
DesiredCapabilities capability = DesiredCapabilities.firefox();
try {
driver = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), capability);
} catch (MalformedURLException e) {
e.printStackTrace();
}
driver.manage().timeouts().implicitlyWait(Long.parseLong(ConfigProperties.getProperty("imp.wait")), TimeUnit.SECONDS);
}
return (RemoteWebDriver) driver;
}
 
Первая нода:
java -jar selenium-server-standalone-2.28.0.jar -role node  -hub http://localhost:4444/grid/register -browser platform=WINDOWS,browserName=firefox,version=19,maxInstances=6,ensureCleanSession=true -maxSession 10 -nodeTimeout 30
Вторая нода:
java -jar selenium-server-standalone-2.28.0.jar -role node  -hub http://xx.xx.xx.xx:4444/grid/register -browser platform=WINDOWS,browserName=firefox,version=19,maxInstances=6,ensureCleanSession=true maxSession 10 -nodeTimeout 30 -port 5556

 

 


(Mykhailo Poliarush) #10

иногда имеет значение, но в общем, это не должно никак влиять

и последние версии selenium должны уже запускаться на java 7


(Sergey Korol) #11

Похоже на проблему совместимости драйвера с новой версией FF. Попробуйте обновить сервер до 31й версии. У меня с 29й выпадает та же ошибка, что уж говорить о 28й. На 31й нормально пошло.


(Sergey Korol) #12

На 7й отлично работает. В отличии от сикули сервера, который хочет только 6ю. Приходится 2 использовать.


(ivan_ochc) #13

Помогло! Спасибо.


(Mykhailo Poliarush) #14

а еще есть момент битности системы, sikuli не работает для 64 битной системы


(Sergey Korol) #15

Его можно заставить работать на 64-разрядной системе, но придется серверу явно указать 32х-битную 6ю JRE:

@echo off
set PORT=4041
 
pushd %~dp0
 
set SIKULISERVER=libs\sikuli-server-0.0.1-jar-with-dependencies.jar
set JAVA_PATH=%PROGRAMFILES%
if exist "%PROGRAMFILES(x86)%" set JAVA_PATH=%PROGRAMFILES(x86)%
 
"%JAVA_PATH%\Java\jre6\bin\java.exe" -jar %SIKULISERVER% -port %PORT%
 
popd
Ну еще надо в system env прописать путь к сикули патчу и в path добавить каталог libs.

(Mykhailo Poliarush) #16

да да все верно

просто думаю одно, а написал другое

хотел сказать битность виртуальной машины java


(mamax) #17

привет всем!!
необходимость запуска тестов для ChromeDriver

 FF - це білт-ін драйвер, для хрома нужно скачать ChromeDriver
а потом прописать в capability путь к нему
как такое сделать?


DesiredCapabilities capability = DesiredCapabilities.firefox();

 


(fiestamelky) #18

 

Python
Windows 7
 
import os
Chrome="C:\Users\%USERNAME%\AppData\Local\Google\Chrome\Application\chrome.exe"
    os.environ["webdriver.chrome.driver"]=Chrome
    driver=webdriver.Chrome(Chrome)