Django:第二次 Selenium 测试失败,出现 500 服务器错误

Django: Second Selenium Test Failing with 500 Server Error

我正在尝试向我的 Django 项目添加一些 selenium 测试,但第二个测试总是失败并显示 Server Error (500) 。由于两个测试的开始完全相同,我认为它一定与 setUptearDown 方法有关。有人可以帮忙吗?谢谢。

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='test@test.com')
        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()

编辑:我应该提到第一个测试工作正常并且 returns 成功。第一个测试失败后的任何测试都会在启动时出现 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 错误并且没有正确加载任何内容。为什么会这样?

很难说没有看到完整的回溯,但是,这可能是因为 create_user() 调用 - 它无法使用现有用户名创建用户。尝试将 create_user() 移动到 setUpClass() 下:

class UserTest(LiveServerTestCase):
    @classmethod
    def setUpClass(cls):
        User.objects.create_user(username='user', password='pass', email='test@test.com')
        super(UserTest, cls).setUpClass()

    def setUp(self):
        self.browser = webdriver.Chrome()

在一些代码之后能够向我显示错误(测试套件设置 DEBUG=False 以更接近模拟真实环境)by setting DEBUG=True

然后我看到代码被轰炸了,因为那里没有系统预期的行。这是因为我在迁移脚本中添加了这一行。这样就通过了第一次测试,因为所有的迁移脚本在开始测试的时候都是运行,但是第一次测试之后所有的数据都被删除之后,就再也不会添加了。

也许,它会对某些人有用。

我在使用 LiveServerTestCase 对 Selenium 进行测试时遇到问题,调试是正确的,所有关于最后的答案都是好的。

但是,早些时候我尝试在 Heroku 上部署我的网络应用程序,我的 settings.py:

中有这样一行代码
django_heroku.settings(locals())

但是当我删除它时,我没有发现这个错误。