PyCharm не может подключиться к GhostDriver

У меня есть unit test, который проходит, когда я запускаю его через python manage.py test, но не удается, когда я запускаю его из PyCharm.

def test_alpha(self):
    from selenium.webdriver.common.utils import free_port
    from selenium import webdriver

    driver = webdriver.PhantomJS(executable_path=PHANTOMJS_PATH, port=free_port())
    driver.quit()

Исключением, которое я получаю при запуске из PyCharm, является

WebDriverException: Message: 'Can not connect to GhostDriver' 

Я потратил немало времени на изучение этой проблемы, и я заметил, что когда я указываю порт вручную, тест проходит в PyCharm.

# suppose 50000 happens to be a free port on your computer
driver = webdriver.PhantomJS(executable_path=PHANTOMJS_PATH, port=50000)

Чтобы быстро найти:

  • Тест проходит с помощью python manage.py test
  • Тест проходит в PyCharm, если порт указан вручную
  • Тест не работает в PyCharm, если port=free_port()

Что такое PyCharm, который делает тест неспособным подключиться к Ghostdriver?


# For convenience, the `free_port()` code snippet is here
# selenium.webdriver.common.utils.freeport

def free_port():
    free_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    free_socket.bind(('127.0.0.1', 0))
    free_socket.listen(5)
    port = free_socket.getsockname()[1]
    free_socket.close()
    return port 

Ответ 1

Попробуйте установить phantomjs с npm: https://www.npmjs.com/package/phantomjs. Я использую Mac OS X, и у меня была аналогичная проблема с использованием selenium и django.

Ответ 2

Возможно, что-то в настройках вашего терминала влияет на работу сети.

Попробуйте запустить PyCharm из своего терминала:

open -a /Applications/PyCharm.app/

Затем снова запустите тест, и он должен пройти.


Источник: сводка комментариев @CrazyCoder