Django从HttpResponse获取DOM对象

时间:2015-06-24 19:27:26

标签: python django httpresponse

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

我找不到任何人在网上或Django手册或教程中做这个的例子,这让我想知道是不是有理由不这样做?如果这是不好的做法,有更好的方法来做到这一点,你能说出为什么和什么?

2 个答案:

答案 0 :(得分:0)

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

一般来说,你的想法并不差,它可能需要比其他测试方法更多的CPU时间(例如正则表达式。但如果它符合你的测试需求,那就去做吧。在测试时它很少出现问题。< / p>

答案 1 :(得分:0)

为了兴趣,这是我最终提出的:

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的信息。