Селен висит с xvfb

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

# stress testing
i = 0
while True:
  print i
  d = webdriver.Remote(
      service.service_url,
      desired_capabilities=DesiredCapabilities.CHROME
  )
  print i, "started driver"
  d.get("http://www.facebook.com")
  print i, "got fb"
  d.quit()
  print i, "quit"
  i += 1

Пример вывода

0
0 started driver
0 got fb
0 quit
...
11 <hang>

Это указывает на то, что webdriver.Remote отказывается правильно инициировать драйвер. Это также происходит, когда экземпляр драйвера создается непосредственно с помощью webdriver.Chrome (вместо запуска ChromeDriver как службы).

После отправки SIGINT зависшей программе я получаю трассировку стека (pastebin), указывающую на блокирующий сокет, считанный где-то в конструкторе .

Журнал ChromeDriver (dropcanvas), кажется, не указывает на что-то неправильное, и я весьма озадачен тем, что происходит здесь.

Подобные вопросы задавались ранее, наиболее актуальными из которых были Selenium Chromedriver Hangs?; однако я не могу воспроизвести принятое решение (запуская Xvfb заново для каждого экземпляра webdriver...). Здесь эквивалентом будет вызов Xvfb.start непосредственно перед d = webdriver.Remote... и вызов Xvfb.stop в конце цикла; Я пробовал это безуспешно.

Любая помощь будет принята с благодарностью.

Редактировать: как видно из трассировки стека, webdriver.Remote зависал на какой-то функции чтения сокета; Я проследил запрос, чтобы быть

POST 'http://127.0.0.1:<chromedriver_port>/session'

с телом

 '{"desiredCapabilities": {"platform": "ANY", "browserName": "chrome", "version": "", "javascriptEnabled": true}}'

Похоже, что ChromeDriver по какой-то причине не отвечает. Продолжим отладку.


person mzhang    schedule 26.02.2016    source источник