2015-06-24 3 views
0

Я хочу выполнить единичный тест на странице html, который возвращается как строка байта в объекте HttpResponse ... например. "Find_elements_by_tag_name". Является ли решение просто xml.dom.minidom.parseString байтами response.content?Django получить объект DOM из HttpResponse

Я не мог найти примеров того, как люди делают это в Интернете или в руководствах или учебниках Django, что заставляет меня задаться вопросом, есть ли причина не делать этого таким образом? Если это плохая практика, и есть лучший способ сделать это, можете ли вы сказать, почему и что?

+1

Я использую BeautifulSoup для этого, если я хочу проверить html. – Ale

+0

@Ale - спасибо ... да, я слышал много хорошего об этом модуле/надстройке/библиотеке/пакете (или о чем вы его называете) ... но предпочитаете использовать собственные модули Python, пока не появится причина использовать высокопрочный инструмент ... –

ответ

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.

0

Да, это способ разбора HTML в дерево DOM. Если другие люди этого не делают, у них могут быть другие требования.

В целом, ваша идея не плохая, для этого может потребоваться больше времени процессора, а затем другого метода тестирования (например, регулярных выражений, но если это соответствует вашим потребностям в тестировании, просто сделайте это. Производительность редко бывает проблемой во время тестирования.

+0

Спасибо ... согласен: производительность не перешла мне на ум! –

Смежные вопросы