django selenium LiveServerTestCase

tac*_*ack 9 python django 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
Run Code Online (Sandbox Code Playgroud)

我尝试使用classmethod setUp和tearDown:

@classmethod
def setUpClass(cls):
    super(MySeleniumTests, cls).setUpClass()
    cls.browser = WebDriver()
...
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

Rah*_*pta 16

你做错了什么?

LiveServerTestCase8081默认情况下在端口上运行实时服务器,并且您尝试访问端口上的URL 8000.现在,由于没有服务器侦听端口8000,浏览器无法加载页面.

来自LiveServerTestCase文档:

默认情况下,实时服务器的地址是,localhost:8081并且在测试期间可以访问完整的URL self.live_server_url.

你需要做什么呢?

选项1:更改网址

您可以将URL更改为指向8081端口.

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

选项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
Run Code Online (Sandbox Code Playgroud)

选项3:在端口8000上运行实时服务器

在Django 1.10之前,您可以通过在端口8000上运行liveserver 8000--liveserver选项传递端口号作为test命令.

$ ./manage.py test --liveserver=localhost:8000 # run liveserver on port 8000
Run Code Online (Sandbox Code Playgroud)

在Django 1.11删除了此参数,但现在您可以在测试类上设置端口:

class MyTestCase(LiveServerTestCase):
    port = 8000

    def test_can_navigate_site(self):
        ....
Run Code Online (Sandbox Code Playgroud)

  • @ikreb该选项一直存在,直到Django 1.10,但在1.11中被删除.请参阅https://docs.djangoproject.com/en/2.0/releases/1.11/#liveservertestcase-binds-to-port-zero (4认同)

Win*_*oon 6

对于使用Django 1.11( LiveServerTestCase) 的用户:

实时服务器侦听localhost并绑定到0使用操作系统分配的空闲端口的端口。self.live_server_url在测试期间可以访问服务器的 URL 。

所以...使用self.live_server_url.


小智 5

您正在尝试获取错误的服务器地址:默认情况下,地址为http://localhost:8081.

访问正确地址的最佳方法是使用self.live_server_url:

    def test_can_navigate_site(self):
        self.browser.get(self.live_server_url)
Run Code Online (Sandbox Code Playgroud)