我遇到了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设置upUp和tearDown:
@classmethod
def setUpClass(cls):
super(MySeleniumTests, cls).setUpClass()
cls.browser = WebDriver()
...
结果是一样的。
但我可以使用self.browser.get('http://example.com')
在网络中加载任何其他网页。
Selenium是最新的。
谢谢!
答案 0 :(得分:15)
你做错了什么?
默认情况下, LiveServerTestCase
在端口8081
上运行实时服务器,并且您尝试访问端口8000
上的网址。现在,由于没有服务器侦听端口8000,浏览器无法加载页面。
默认情况下,实时服务器的地址为
访问网址localhost:8081
且已满 可以在测试期间使用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
选项将端口号--liveserver
传递给测试命令,以便在端口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 :(得分:5)
您尝试获取错误的服务器地址:by default, the address is http://localhost:8081
。
访问正确地址的最佳方式是使用self.live_server_url
:
def test_can_navigate_site(self):
self.browser.get(self.live_server_url)
答案 2 :(得分:2)
适用于使用Django 1.11的用户
实时服务器侦听localhost并绑定到端口0,端口0使用操作系统分配的空闲端口。在测试期间,可以使用self.live_server_url访问服务器的URL。
继续使用self.live_server_url。