django - Selenium 测试未正确处理 django 中间件
问题描述
我正在开发 Django 框架,每次成功登录我的网站时都会收到此错误。所以是的,不正确的登录不会触发它。它不会影响站点或我的测试,但堆栈跟踪对于每个测试来说真的很烦人。我将 python 3 和 django 2 与 django-adminlte-cruds 和 django-guardian 一起使用。
这是完整的堆栈跟踪,我完全不知道我的代码可能会导致这种情况,我查看了有关相同错误的其他帖子,但找不到适用于我的代码的任何内容。
Traceback (most recent call last): File "/usr/lib/python3.5/wsgiref/handlers.py", line 137, in run
self.result = application(self.environ, self.start_response) File "/home/ellen/.virtualenvs/purple_box/lib/python3.5/site-packages/django/contrib/staticfiles/handlers.py", line 67, in __call__
return super().__call__(environ, start_response) File "/home/ellen/.virtualenvs/purple_box/lib/python3.5/site-packages/django/core/handlers/wsgi.py", line 146, in __call__
response = self.get_response(request) File "/home/ellen/.virtualenvs/purple_box/lib/python3.5/site-packages/django/contrib/staticfiles/handlers.py", line 62, in get_response
return super().get_response(request) File "/home/ellen/.virtualenvs/purple_box/lib/python3.5/site-packages/django/core/handlers/base.py", line 81, in get_response
response = self._middleware_chain(request) TypeError: 'NoneType' object is not callable Traceback (most recent call last): File "/usr/lib/python3.5/wsgiref/handlers.py", line 137, in run
self.result = application(self.environ, self.start_response) File "/home/ellen/.virtualenvs/purple_box/lib/python3.5/site-packages/django/contrib/staticfiles/handlers.py", line 67, in __call__
return super().__call__(environ, start_response) File "/home/ellen/.virtualenvs/purple_box/lib/python3.5/site-packages/django/core/handlers/wsgi.py", line 146, in __call__
response = self.get_response(request) File "/home/ellen/.virtualenvs/purple_box/lib/python3.5/site-packages/django/contrib/staticfiles/handlers.py", line 62, in get_response
return super().get_response(request) File "/home/ellen/.virtualenvs/purple_box/lib/python3.5/site-packages/django/core/handlers/base.py", line 81, in get_response
response = self._middleware_chain(request) TypeError: 'NoneType' object is not callable Traceback (most recent call last): File "/usr/lib/python3.5/wsgiref/handlers.py", line 137, in run
self.result = application(self.environ, self.start_response) File "/home/ellen/.virtualenvs/purple_box/lib/python3.5/site-packages/django/contrib/staticfiles/handlers.py", line 67, in __call__
return super().__call__(environ, start_response) File "/home/ellen/.virtualenvs/purple_box/lib/python3.5/site-packages/django/core/handlers/wsgi.py", line 146, in __call__
response = self.get_response(request) File "/home/ellen/.virtualenvs/purple_box/lib/python3.5/site-packages/django/contrib/staticfiles/handlers.py", line 62, in get_response
return super().get_response(request) File "/home/ellen/.virtualenvs/purple_box/lib/python3.5/site-packages/django/core/handlers/base.py", line 81, in get_response
response = self._middleware_chain(request) TypeError: 'NoneType' object is not callable Traceback (most recent call last): File "/usr/lib/python3.5/wsgiref/handlers.py", line 137, in run
self.result = application(self.environ, self.start_response) File "/home/ellen/.virtualenvs/purple_box/lib/python3.5/site-packages/django/contrib/staticfiles/handlers.py", line 67, in __call__
return super().__call__(environ, start_response) File "/home/ellen/.virtualenvs/purple_box/lib/python3.5/site-packages/django/core/handlers/wsgi.py", line 146, in __call__
response = self.get_response(request) File "/home/ellen/.virtualenvs/purple_box/lib/python3.5/site-packages/django/contrib/staticfiles/handlers.py", line 62, in get_response
return super().get_response(request) File "/home/ellen/.virtualenvs/purple_box/lib/python3.5/site-packages/django/core/handlers/base.py", line 81, in get_response
response = self._middleware_chain(request) TypeError: 'NoneType' object is not callable
如果您对修复有任何提示,请告诉我如何澄清更多信息。谢谢!
编辑:我对主页的看法
@login_required
def base(request):
"""
View function for home page of site.
"""
# Render the HTML template base.html with the data in the context variable
return render(request, 'cruds/base.html', context={},)
Edit2:当我执行我的功能测试(Selenium)btw 时会发生这种情况。在我的单元测试期间或当我自己登录网站并检查我的服务器日志时不会发生这种情况......
根据要求:
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
硒设置 - 定义.py:
class UserBaseSeleniumTestCase(StaticLiveServerTestCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.testuser = User.objects.create_user(
username='testuser', password=ROLES["testuser"])
cls.testuser.is_active = True
cls.testuser.save()
cls.browser = webdriver.Firefox()
cls.browser.get(cls.live_server_url)
@classmethod
def tearDownClass(cls):
cls.browser.quit()
super().tearDownClass()
def login(self, username, password):
self.browser.get('%s%s' % (self.live_server_url,
reverse_lazy("login")))
username_input = self.browser.find_element_by_name("username")
username_input.send_keys(username)
password_input = self.browser.find_element_by_name("password")
password_input.send_keys(password)
self.browser.find_element_by_name("login").click()
test.py - 有错误的测试之一,任何成功登录的测试都会给出错误:
class CorrectLoginTestCase(UserBaseSeleniumTestCase):
def test_correct_login(self):
self.login('testuser', ROLES["testuser"])
expected_url = self.live_server_url + '/home/'
self.assertEqual(self.browser.current_url, expected_url)
解决方案
推荐阅读
- c++ - 如何为表达式解析器的派生类对象设置和取消引用通用指针?
- azure-functions - Azure 函数从事件网格接收重复消息
- discord.py - on_reaction_add 不会触发 - Discord.py
- spring - 使用 Spring Batch 进行水平缩放
- angular - Angular mat-select-autocomplete 无法编译错误
- python - 如何使用关键字列表将 csv 拆分为多个 csv 文件
- amazon-s3 - 通过 CloudFront 的子目录的索引文件
- r - 查找 R 中列的最小值
- php - $this->__construct() 在父类中调用子类的构造?
- asp.net - 如何使用 Sql 数据适配器在 ASP.NET MVC 中进行分页