我在从Django运行SeleniumRC时遇到了麻烦。我可以在Python shell中运行Selenium docs和python selenium client docs提供的示例代码,而不运行Django(所以没有manage.py),但是当我实际尝试从django运行Selenium时TestCase或者从Django shell,我得到一个超时错误。 这是我正在尝试运行的代码:
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 test registration.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,但是自从Django停止后我无法运行更多的Selenium命令。这是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
有人有什么想法吗?
答案 0 :(得分:3)
如果其他人遇到此问题,我可以通过在setUp方法中增加套接字超时来解决它。
答案 1 :(得分:1)
这将使用浮点秒中的超时值来实现:
import socket
from selenium import selenium
from django.test import TestCase
class TestSelenium(TestCase):
def setUp(self):
socket.settimeout(30)
# ...
self.selenium.start()