我尝试向我的 Django 项目添加一些 selenium 测试,但第二个测试总是失败,并出现 服务器错误 (500)
。由于两个测试的开始完全相同,我认为它一定与 setUp
和 tearDown
方法有关。有人可以帮忙吗?谢谢。
from django.test import LiveServerTestCase
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from django.contrib.auth.models import User
from selenium.webdriver.support.ui import Select
class UserTest(LiveServerTestCase):
def setUp(self):
User.objects.create_user(username='user', password='pass', email='<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="225647515662564751560c414d4f" rel="noreferrer noopener nofollow">[email protected]</a>')
self.browser = webdriver.Chrome()
def tearDown(self):
self.browser.quit()
def changeSelector(self, browser, value):
mealSelector = Select(browser.find_element_by_id('mealsToday'))
mealSelector.select_by_visible_text(str(value))
def login_user(self):
self.browser.get(self.live_server_url)
self.timeout(5)
self.assertIn('Animals', self.browser.title)
# Log in
login_button = self.browser.find_element_by_id('login').click()
self.browser.find_element_by_id('id_username').send_keys('user')
self.browser.find_element_by_id('id_password').send_keys('pass')
def timeout(self, time_to_sleep):
import time
time.sleep(time_to_sleep)
def test_one_test(self):
self.login_user()
def test_two_test(self):
self.login_user()
编辑:我应该提到第一个测试工作正常并返回成功。第一个测试之后的任何测试都会在启动时失败并出现 500 错误。
编辑 2:运行测试时我看到的内容:
======================================================================
FAIL: test_two_test (functional_tests.tests.UserTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/functional_tests/tests.py", line 34, in test_two_test
self.login_user()
File "/functional_tests/tests.py", line 20, in login_user
self.assertIn('Animals', self.browser.title)
AssertionError: 'Animals' not found in 'http://localhost:8081/'
即使是这个最小的代码也会失败:
from django.contrib.staticfiles.testing import StaticLiveServerTestCase
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from django.contrib.auth.models import User
from selenium.webdriver.support.ui import Select
class UserTest(StaticLiveServerTestCase):
def setUp(self):
self.browser = webdriver.Chrome()
def tearDown(self):
self.browser.quit()
def login_user(self):
self.browser.get(self.live_server_url)
self.assertIn('Animals', self.browser.title)
def test_one_test(self):
self.login_user()
def test_two_test(self):
self.login_user()
第二次在第二个方法中调用 get
时,我可以看到出现 500 错误,并且没有正确加载任何内容。为什么会这样?
最佳答案
在一些代码之后能够向我显示错误(测试套件设置 DEBUG=False
以更接近地模拟真实环境)by setting DEBUG=True
然后我看到代码正在轰炸,因为没有系统预期的行。这是因为我在迁移脚本中添加了这一行。这通过了第一次测试,因为所有迁移脚本在测试开始时都运行,但在第一次测试后删除所有数据后,就不再添加了。
关于python - Django:第二次 Selenium 测试因 500 服务器错误而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31011933/