一尘不染

djangoseleniumLiveServerTestCase

selenium

selenium和LiveServerTestCase出现问题。当我运行./manage.py test functional_tests它时,它会加载一个页面“标题:问题加载页面。正文:无法连接…”

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来设置和拆箱:

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

结果是一样的。但是我可以使用加载Web中的任何其他页面self.browser.get('http://example.com')。selenium是最新的。

谢谢!


阅读 262

收藏
2020-06-26

共1个答案

一尘不染

你做错了什么?

LiveServerTestCase8081默认情况下,在port上运行实时服务器,而您尝试访问port上的url
8000。现在,由于没有服务器在端口8000上进行侦听,因此浏览器无法加载该页面。

LiveServerTestCase文档:

默认情况下,实时服务器的地址为, localhost:8081 并且可以在测试过程中使用来访问完整的URL
self.live_server_url

您需要做什么呢?

选项1:更改网址

您可以更改网址以指向8081端口。

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

选项2:使用实时服务器网址

您可以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之前,您可以通过选项将端口号传递8000给test命令,--liveserver以在端口8000上运行liveserver。

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

此参数已在Django1.11删除,但现在您可以在测试类上设置端口:

class MyTestCase(LiveServerTestCase):
    port = 8000

    def test_can_navigate_site(self):
        ....
2020-06-26