2016-02-25 2 views
3

Я выполнял тесты на нашей селеной решетке и столкнулся с проблемой, используя один и тот же дисплей xvfb: когда я запускаю партию из 100 тестов параллельно, большая часть которые заполняются формами/нажатиями кнопок - некоторые тесты застревают в тексте или нажимают кнопку. Это не означает «ждать, пока элемент» не появится, мы уже это сделали.Переключение между экранами отображения xvfb при запуске тестов Firefox на Selenium Grid

Пользователя на отдельный вопрос был 1 ответ выше: Multiple Instances of Firefox during Selenium Webdriver Testing not handling focus correctly.

Решения там работало для запуска теста локального Selenium с помощью FirefoxBinary. Я бегу тест на Selenium Grid, что означает, что я создаю удаленный объект WebDriver (в Python):

 profile = self.get_local_firefox_profile() 
     profile.set_preference("browser.startup.homepage", "http://www.google.com"); 
     firefox_capabilities = { 
      "browserName": "firefox", 
      'platform': "linux", 
      "javascriptEnabled": True, 
     } 

     self.driver = webdriver.Remote(
      selenium_hub_address, 
      firefox_capabilities, 
      profile 
     ) 

Связь через мой Селен сетки/концентратору/узел работает нормально. Я выполнение тестов на рабе Дженкинс -> теста создает удаленный WebDriver -> запрос идет к Selenium концентратору сервера А -> который отправляет браузер/тест выполняется на сервере B.

пускаю узел Selenium на сервере B, как это:

/usr/bin/Xvfb :0 -nolisten tcp -ac -cc 4 -screen 0 1200x800x24 

# tell browsers the address of the xvfb display 
export DISPLAY=:0 
java -jar selenium-server-standalone-2.46.0.jar -role node -nodeConfig DefaultNode.json 

Тогда после запуска в проблему - 100 параллельных тестов с использованием этого же дисплей, имеющий проблемы с формой заполнения - Я видел разные люди подтверждают что мы должны запускать каждый тест на отдельном дисплее xvfb, чтобы сделать его лучше.

я решил проверить эту теорию, добавляя больше экранов для отображения: 0

/usr/bin/Xvfb :0 -nolisten tcp -ac -cc 4 -screen 0 1200x800x24 -screen 1 1200x800x24 
-screen 2 1200x800x24 -screen 3 1200x800x24 

Мой главный вопрос: как вы выбираете DISPLAY 0,1, 0,2, 0,3 в питона, используя драйвер удаленного селен?

Если я побежал испытания на ту же Дженкинс рабу (забывания полностью о сетке, то, селен/Xvfb/светлячок, установленный на ведоме), похоже, что будет работать нормально, как это:

firefox_binary = FirefoxBinary('/usr/bin/firefox') 
    firefox_binary.add_command_line_options('--display=:' + str(display.display)) 

Или , выполняются локально, есть другие варианты, такие как xvfb-run, pyvirtualwrapper и т. д.

Я не вижу способа сделать это с помощью удаленного драйвера Firefox. Вы не можете использовать объект FirefoxBinary для создания драйверов Remote (он не может быть сериализуем для одной вещи и не имеет никакого смысла). Кто-нибудь решил эту проблему?

ответ

0

После того, как наша селенистая сетка работает и работает, я думаю, что проблема, с которой я столкнулся, для заполнения формы/ввода текста, не работающей правильно, была не из-за использования одного и того же дисплея на xvfb. Это было по нескольким причинам: выполнение было намного быстрее, поля очищались после ввода данных, некоторые проблемы существовали даже локально без сетки.

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

Смежные вопросы