Ошибка тайм-аута при запуске Selenium из Django - PullRequest
4 голосов
/ 25 февраля 2011

У меня проблемы с запуском SeleniumRC из Джанго. Я могу запустить пример кода, предоставленный Selenium docs и python selenium client docs , просто отлично из оболочки Python без запуска Django (поэтому нет manage.py), но когда при попытке запустить Selenium из django TestCase или из оболочки Django я получаю сообщение об ошибке тайм-аута. Вот код, который я пытаюсь запустить:


from selenium import selenium
from django.test import TestCase

class TestSelenium(TestCase):
    def setUp(self):
        self.verificationErrors = []
        self.selenium = selenium("localhost", 4444, "*firefox", "http://127.0.0.1:8000/")
        self.selenium.start()

    def test_foo(self):
        sel = self.selenium
        sel.open("/")

Запуск с регистрацией теста manage.py.TestSelenium выдает следующую ошибку:


======================================================================
ERROR: test_testformmaintainsdata (registration.tests.TestSelenium)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/sam/Documents/dev/app/CustomMade/registration/tests.py", line 158, in setUp
    self.selenium.start()
  File "/usr/local/lib/python2.6/dist-packages/selenium/selenium.py", line 189, in start
    result = self.get_string("getNewBrowserSession", start_args)
  File "/usr/local/lib/python2.6/dist-packages/selenium/selenium.py", line 223, in get_string
    result = self.do_command(verb, args)
  File "/usr/local/lib/python2.6/dist-packages/selenium/selenium.py", line 214, in do_command
    response = conn.getresponse()
  File "/usr/lib/python2.6/httplib.py", line 990, in getresponse
    response.begin()
  File "/usr/lib/python2.6/httplib.py", line 391, in begin
    version, status, reason = self._read_status()
  File "/usr/lib/python2.6/httplib.py", line 349, in _read_status
    line = self.fp.readline()
  File "/usr/lib/python2.6/socket.py", line 427, in readline
    data = recv(1)
timeout: timed out

----------------------------------------------------------------------
Ran 1 test in 12.475s

FAILED (errors=1)
Destroying test database 'default'...

Странно, что, несмотря на ошибку, и Python останавливается, сервер SeleniumRC фактически запускает Firefox, но тогда я не могу запускать дальнейшие команды Selenium, так как Django остановился. Это вывод SeleniumServer:


14:21:48.362 INFO - Checking Resource aliases
14:21:48.369 INFO - Command request: getNewBrowserSession[*firefox, http://127.0.0.1:8000/, ] on session null
14:21:48.372 INFO - creating new remote session
14:21:48.443 INFO - Allocated session a3ea05a3d0eb4956ba69a67583ea49ba for http://127.0.0.1:8000/, launching...
14:21:48.533 INFO - Preparing Firefox profile...
14:21:51.473 INFO - Launching Firefox...
14:21:55.904 INFO - Got result: OK,a3ea05a3d0eb4956ba69a67583ea49ba on session a3ea05a3d0eb4956ba69a67583ea49ba

У кого-нибудь есть идеи?

Ответы [ 2 ]

3 голосов
/ 04 марта 2011

В случае, если у кого-то еще есть эта проблема, я смог решить ее, увеличив время ожидания сокета в методе setUp.

1 голос
/ 30 ноября 2012

Это сделает трюк со значением тайм-аута в секундах с плавающей запятой:

import socket

from selenium import selenium
from django.test import TestCase

class TestSelenium(TestCase):
    def setUp(self):
        socket.settimeout(30)
        # ...
        self.selenium.start()

См. документы Python stdlib

...