2015-09-28 131 views
4

我有一个selenium和LiveServerTestCase的问题。 当我运行./manage.py test functional_tests它加载一个页面“标题:问题加载页面正文:无法连接......”django selenium LiveServerTestCase

functional_tests.py:

from selenium import webdriver 
from django.test import LiveServerTestCase 

class GeneralFunctionalTests(LiveServerTestCase): 
    def setUp(self): 
     self.browser = webdriver.Chrome() 
     self.browser.implicitly_wait(3) 

    def tearDown(self): 
     self.browser.quit() 

    def test_can_navigate_site(self): 
     self.browser.get('http://localhost:8000') 
     assert 'Django' in self.browser.title 

我试图安装和拆卸使用类方法:

@classmethod 
def setUpClass(cls): 
    super(MySeleniumTests, cls).setUpClass() 
    cls.browser = WebDriver() 
... 

结果是一样的。 但我可以加载任何其他网页与self.browser.get('http://example.com')。 硒是最新的。

谢谢!

回答

11

你在做什么错?

LiveServerTestCase默认运行在端口直播服务器8081和您试图访问端口8000的URL。现在,由于没有监听端口8000的服务器,浏览器无法加载页面。

LiveServerTestCase docs:

默认情况下,直播服务器的地址是localhost:8081和全 URL可以self.live_server_url测试过程中进行访问。

你需要做什么呢?

选项1:更改URL

您可以更改URL指向8081端口。

def test_can_navigate_site(self): 
    self.browser.get('http://localhost:8081') # change the port 
    assert 'Django' in self.browser.title 

选项2:使用实时服务器URL

你可以在你的测试用例使用live_server_url@yomytho也指出。

def test_can_navigate_site(self): 
    self.browser.get(self.live_server_url) # use the live server url 
    assert 'Django' in self.browser.title 

选择3:端口运行直播服务器8000

直到Django的1.10,您可以通过--liveserver选项通过端口号为8000到测试命令在端口8000上运行的liveserver 。

$ ./manage.py test --liveserver=localhost:8000 # run liveserver on port 8000 

此参数是removed in Django 1.11,但现在你可以设置端口的测试类:

class MyTestCase(LiveServerTestCase): 
    port = 8000 

    def test_can_navigate_site(self): 
     .... 
+1

谢谢你的帮助!很好的解释! – tack

+0

“liveserver”参数是否为默认值? ''./manage.py help test''什么也没有显示。 – ikreb

+0

是的,它是一个默认参数。检查此链接(https://docs.djangoproject.com/en/1.10/ref/django-admin/#cmdoption-test-liveserver) –

1

用户使用Django 1.11谁

活服务器监听本地主机,绑定到使用由操作系统分配的空闲端口的端口0。在测试过程中,可以使用self.live_server_url访问服务器的URL。

继续使用self.live_server_url。

相关问题