Django 从 HttpResponse 获取一个 DOM 对象

Django get a DOM object from an HttpResponse

我想在 html 页面上进行单元测试,该页面作为 HttpResponse 对象中的字节字符串返回...例如"find_elements_by_tag_name"。解决方案只是 xml.dom.minidom.parseString response.content 的字节吗?

我无法在网上或 Django 手册或教程中找到任何人这样做的例子,这让我想知道是否有理由不这样做?如果这是不好的做法并且有更好的方法来做到这一点,请您说出原因和内容吗?

是的,这是一种将 HTML 解析为 DOM 树的方法。如果其他人不这样做,他们可能会有其他要求。

总的来说,你的想法还不错,可能比其他测试方法(例如正则表达式)需要更多CPU时间。但如果它符合你的测试需求,就去做吧。性能很少测试时出现问题。

为了兴趣,我最后想出了这个:

def test_that_all_inputs_have_name_attr( self ):
    response = home_page( HttpRequest() )
    from xml.dom.minidom import parseString
    page_as_doc = parseString( response.content )
    inputs = page_as_doc.getElementsByTagName( 'input' )
    for input_el in inputs:
        attr_map = input_el.attributes
        fail_msg = ''
        for i in range( attr_map.length ):
            attr = attr_map.item( i )
            fail_msg += "\nname '%s' value '%s'" % ( attr.name, attr.value )
        if not fail_msg: 
            fail_msg = "none!"
        self.assertTrue( input_el.hasAttribute( "name" ), "\nINPUT attributes: %s" % fail_msg )

...虽然我的新手理解这不是 assertTrue 中的出色测试,但如果它在一个 INPUT 标记上失败,则会导致方法结束...而您想要有关所有失败的 INPUT 的信息。