将 django.test.LiveServerTestCase 的 live_server_url 与另一个字符串连接时出现 TypeError
TypeError when concatenating django.test.LiveServerTestCase's live_server_url with another string
每当我尝试基于 self.live_server_url
构造字符串时,我都会收到 python TypeError
消息。例如,我尝试了以下字符串构造(下面的表格 1 和 2),但我遇到了相同的 TypeError
。我想要的字符串是附加了 "/lists"
的 Live Server URL。注意:实际测试确实成功创建了一个服务器,我可以手动访问该服务器,更具体地说,我可以手动访问我试图以编程方式构建的确切 URL(例如 'http://localhost:8081/lists
' ).
TypeError
s 出现在这些字符串结构中。
# FORM 1
lists_live_server_url = '%s%s' % (self.live_server_url, '/lists')
# FORM 2
lists_live_server_url = '{0}{1}'.format(self.live_server_url, '/lists')
self.browser.get(lists_live_server_url)
此表单没有 python 错误(没有附加到字符串),尽管我的测试失败了(如我所料,因为它没有访问 /lists
)。
self.browser.get(self.live_server_url)
这是我遇到的 python 错误。
/usr/local/Cellar/python3/3.4.2_1/Frameworks/Python.framework/Versions/3.4/bin/python3.4 /Applications/PyCharm.app/Contents/helpers/pycharm/django_test_manage.py test functional_tests.lists_tests.LiveNewVisitorTest.test_can_start_a_list_and_retrieve_it_later /Users/myusername/PycharmProjects/mysite_proj
Testing started at 11:55 AM ...
Creating test database for alias 'default'...
Traceback (most recent call last):
File "/usr/local/Cellar/python3/3.4.2_1/Frameworks/Python.framework/Versions/3.4/lib/python3.4/wsgiref/handlers.py", line 137, in run
self.result = application(self.environ, self.start_response)
File "/usr/local/lib/python3.4/site-packages/django/test/testcases.py", line 1104, in __call__
return super(FSFilesHandler, self).__call__(environ, start_response)
File "/usr/local/lib/python3.4/site-packages/django/core/handlers/wsgi.py", line 189, in __call__
response = self.get_response(request)
File "/usr/local/lib/python3.4/site-packages/django/test/testcases.py", line 1087, in get_response
return self.serve(request)
File "/usr/local/lib/python3.4/site-packages/django/test/testcases.py", line 1099, in serve
return serve(request, final_rel_path, document_root=self.get_base_dir())
File "/usr/local/lib/python3.4/site-packages/django/views/static.py", line 54, in serve
fullpath = os.path.join(document_root, newpath)
File "/usr/local/Cellar/python3/3.4.2_1/Frameworks/Python.framework/Versions/3.4/lib/python3.4/posixpath.py", line 82, in join
path += b
TypeError: unsupported operand type(s) for +=: 'NoneType' and 'str'
我是否在不知不觉中试图修改导致这些 TypeError
的 live_server_url
?我如何以编程方式构建 live_server_url + "/lists"
?
的字符串
这是我正在尝试的测试...
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from django.test import LiveServerTestCase
class LiveNewVisitorTest(LiveServerTestCase):
def setUp(self):
self.browser = webdriver.Chrome()
self.browser.implicitly_wait(3)
def tearDown(self):
self.browser.close()
def test_can_start_a_list_and_retrieve_it_later(self):
#self.browser.get('http://localhost:8000/lists')
#self.browser.get('http://www.google.com')
#lists_live_server_url = '%s%s' % (self.live_server_url, '/lists')
#lists_live_server_url = '{0}{1}'.format(self.live_server_url, '/lists')
lists_live_server_url = self.live_server_url
self.browser.get(lists_live_server_url)
self.assertIn('To-Do', self.browser.title)
header_text = self.browser.find_element_by_tag_name('h1').text
self.assertIn('To-Do', header_text)
See this discussion on Reddit 具有相同的错误 Traceback
。
基本上,这不是 Selenium
测试中的任何问题,而是您项目的静态文件配置的问题。
根据你的问题,我认为 Traceback
中的关键行是:
File "/usr/local/lib/python3.4/site-packages/django/views/static.py", line 54, in serve
fullpath = os.path.join(document_root, newpath)
此行表示在 django.views.static
内尝试 os.path.join
失败。
在项目的 settings.py
文件中设置 STATIC_ROOT
,你应该没问题。
改用 StaticLiveServerTestCase 可能会有帮助
每当我尝试基于 self.live_server_url
构造字符串时,我都会收到 python TypeError
消息。例如,我尝试了以下字符串构造(下面的表格 1 和 2),但我遇到了相同的 TypeError
。我想要的字符串是附加了 "/lists"
的 Live Server URL。注意:实际测试确实成功创建了一个服务器,我可以手动访问该服务器,更具体地说,我可以手动访问我试图以编程方式构建的确切 URL(例如 'http://localhost:8081/lists
' ).
TypeError
s 出现在这些字符串结构中。
# FORM 1
lists_live_server_url = '%s%s' % (self.live_server_url, '/lists')
# FORM 2
lists_live_server_url = '{0}{1}'.format(self.live_server_url, '/lists')
self.browser.get(lists_live_server_url)
此表单没有 python 错误(没有附加到字符串),尽管我的测试失败了(如我所料,因为它没有访问 /lists
)。
self.browser.get(self.live_server_url)
这是我遇到的 python 错误。
/usr/local/Cellar/python3/3.4.2_1/Frameworks/Python.framework/Versions/3.4/bin/python3.4 /Applications/PyCharm.app/Contents/helpers/pycharm/django_test_manage.py test functional_tests.lists_tests.LiveNewVisitorTest.test_can_start_a_list_and_retrieve_it_later /Users/myusername/PycharmProjects/mysite_proj
Testing started at 11:55 AM ...
Creating test database for alias 'default'...
Traceback (most recent call last):
File "/usr/local/Cellar/python3/3.4.2_1/Frameworks/Python.framework/Versions/3.4/lib/python3.4/wsgiref/handlers.py", line 137, in run
self.result = application(self.environ, self.start_response)
File "/usr/local/lib/python3.4/site-packages/django/test/testcases.py", line 1104, in __call__
return super(FSFilesHandler, self).__call__(environ, start_response)
File "/usr/local/lib/python3.4/site-packages/django/core/handlers/wsgi.py", line 189, in __call__
response = self.get_response(request)
File "/usr/local/lib/python3.4/site-packages/django/test/testcases.py", line 1087, in get_response
return self.serve(request)
File "/usr/local/lib/python3.4/site-packages/django/test/testcases.py", line 1099, in serve
return serve(request, final_rel_path, document_root=self.get_base_dir())
File "/usr/local/lib/python3.4/site-packages/django/views/static.py", line 54, in serve
fullpath = os.path.join(document_root, newpath)
File "/usr/local/Cellar/python3/3.4.2_1/Frameworks/Python.framework/Versions/3.4/lib/python3.4/posixpath.py", line 82, in join
path += b
TypeError: unsupported operand type(s) for +=: 'NoneType' and 'str'
我是否在不知不觉中试图修改导致这些 TypeError
的 live_server_url
?我如何以编程方式构建 live_server_url + "/lists"
?
这是我正在尝试的测试...
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from django.test import LiveServerTestCase
class LiveNewVisitorTest(LiveServerTestCase):
def setUp(self):
self.browser = webdriver.Chrome()
self.browser.implicitly_wait(3)
def tearDown(self):
self.browser.close()
def test_can_start_a_list_and_retrieve_it_later(self):
#self.browser.get('http://localhost:8000/lists')
#self.browser.get('http://www.google.com')
#lists_live_server_url = '%s%s' % (self.live_server_url, '/lists')
#lists_live_server_url = '{0}{1}'.format(self.live_server_url, '/lists')
lists_live_server_url = self.live_server_url
self.browser.get(lists_live_server_url)
self.assertIn('To-Do', self.browser.title)
header_text = self.browser.find_element_by_tag_name('h1').text
self.assertIn('To-Do', header_text)
See this discussion on Reddit 具有相同的错误 Traceback
。
基本上,这不是 Selenium
测试中的任何问题,而是您项目的静态文件配置的问题。
根据你的问题,我认为 Traceback
中的关键行是:
File "/usr/local/lib/python3.4/site-packages/django/views/static.py", line 54, in serve
fullpath = os.path.join(document_root, newpath)
此行表示在 django.views.static
内尝试 os.path.join
失败。
在项目的 settings.py
文件中设置 STATIC_ROOT
,你应该没问题。
改用 StaticLiveServerTestCase 可能会有帮助