Python 将django.test.LiveServerTestCase的live\u服务器\u url与另一个字符串连接时出现TypeError

Python 将django.test.LiveServerTestCase的live\u服务器\u url与另一个字符串连接时出现TypeError,python,django,django-urls,django-tests,Python,Django,Django Urls,Django Tests,每当我尝试基于self.live_server_url构造字符串时,就会收到python类型错误消息。例如,我尝试了下面的字符串构造表单1和表单2,但我遇到了相同的类型错误。我想要的字符串是附加了/列表的实时服务器URL。注意:实际测试确实成功创建了一个服务器,我可以手动访问服务器,更具体地说,我可以手动访问我试图以编程方式构建的确切URL,例如'http://localhost:8081/lists" 这些字符串结构会出现类型错误 # FORM 1 lists_live_server_url

每当我尝试基于self.live_server_url构造字符串时,就会收到python类型错误消息。例如,我尝试了下面的字符串构造表单1和表单2,但我遇到了相同的类型错误。我想要的字符串是附加了/列表的实时服务器URL。注意:实际测试确实成功创建了一个服务器,我可以手动访问服务器,更具体地说,我可以手动访问我试图以编程方式构建的确切URL,例如'http://localhost:8081/lists"

这些字符串结构会出现类型错误

# 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错误,尽管我的测试失败了,因为它没有访问/list

这是我得到的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'
我是否在不知不觉中试图修改live_server_url,这会导致这些类型错误?如何以编程方式构建一个live_server_url+/列表字符串

这是我正在尝试的测试

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)
具有相同的错误回溯功能

基本上,这不是Selenium测试中的任何问题,而是项目的静态文件配置的问题

从你的问题来看,我认为回溯的关键是:

此行表示正在django.views.static中尝试不成功的os.path.join


在项目的settings.py文件中设置STATIC_ROOT,您应该会做得很好。

改用StaticLiveServerTestCase可能会有所帮助

请发布实际的测试列表好吗?不是整个测试模块f课程,但至少有一个设置,设置类(如果存在)和失败的测试方法?奇怪的是,昨晚我正与这个完全相同的错误作斗争,但当我试图拿出一个可复制的示例发布在StackOverflow上时,我无法复制这个类型错误。你找到根本原因了吗?已经核实了!好的,先生。谢谢。最奇怪的是,我想,就像你一样,我把self.live\u server\u url和各种url模式连接在一起时出了问题……大家好,欢迎来到Stack Overflow!虽然你的答案可能对这个问题的未来读者是正确的或有用的,但你应该添加更多的细节,以使你的答案更清楚。
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)
File "/usr/local/lib/python3.4/site-packages/django/views/static.py", line 54, in serve
    fullpath = os.path.join(document_root, newpath)