Я выполнял тесты на нашей селеной решетке и столкнулся с проблемой, используя один и тот же дисплей 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 (он не может быть сериализуем для одной вещи и не имеет никакого смысла). Кто-нибудь решил эту проблему?