Oh, sorry. A bit of misunderstanding and miscommunication on my part. The exemple I gave is just a quick way to reproduce my problem. The real test use self.client, reverse, cast response.content to a string. What I gave is a minimal exemple.
Also, I assumed you talked about comparing bit of html element, not the raw content returned by the view. I'm quite uneasy to have the test failing if a class is added or removed from the element. But yes, your solution work for the current state of the application. 2016-07-31 14:46 GMT+02:00 Andreas Kuhne <[email protected]>: > 2016-07-31 13:56 GMT+02:00 ludovic coues <[email protected]>: >> >> First, thanks for the suggestion. >> >> I just tried that, didn't work. >> Here is the test file I used: >> >> >> from django.test import TestCase >> >> class HTMLTestCase(TestCase): >> >> def test_input_in_fieldset(self): >> fieldset = """ >> <fieldset class="form-group"> >> <input name="login"> >> <input autofocus="" class="form-control" id="id_username" >> maxlength="254" name="username" rows="3" type="text" required /> >> </fieldset> >> """ >> self.assertInHTML('<input name=login>', fieldset) >> self.assertInHTML('<input name="username">', fieldset) >> >> >> First input is to have a working exemple, second is taken as is from >> my view. Not closing the input in assertInHTML give an error `Couldn't >> find '<input name="login"' in response`. I assume I would get the same >> errors with assertContains(*args, html=True) >> >> I could copy/past the input directly in my test but if the maxlength >> or class attribute change, the test will break. Taking the input >> directly from the django form will test if the django form is rendered >> in the view, not if the view is displaying a suitable form. >> >> 2016-07-31 13:22 GMT+02:00 Andreas Kuhne <[email protected]>: >> > 2016-07-31 12:38 GMT+02:00 ludovic coues <[email protected]>: >> >> >> >> Hello, >> >> >> >> I am trying to test if a view is displaying a form with an input >> >> element with name=username. >> >> >> >> Currently, I have tried a lot of variation around >> >> `self.assertContains( response, "<input name=\"username\">", >> >> html=True)` but none work. >> >> I assume that doesn't work because the view have a field input with >> >> name=username but also autofocus="", a class and a bunch of other >> >> attribute. >> >> >> >> I could extract the form from the context and check the field username >> >> from the form is displayed in the view but I'm not ok with that >> >> solution. I'm testing if there is a input with name=username, not a >> >> bunch of unrelated attribute. >> >> >> >> I could also use a LiveServerTestCase and selenium but that look like >> >> a bit overkill for my need. lxml is another option but it would bring >> >> more dependencies. >> >> >> >> A bit of help would be welcome :) >> >> >> >> >> >> >> >> -- >> >> >> >> Cordialement, Coues Ludovic >> >> +336 148 743 42 >> >> >> >> -- >> >> You received this message because you are subscribed to the Google >> >> Groups >> >> "Django users" group. >> >> To unsubscribe from this group and stop receiving emails from it, send >> >> an >> >> email to [email protected]. >> >> To post to this group, send email to [email protected]. >> >> Visit this group at https://groups.google.com/group/django-users. >> >> To view this discussion on the web visit >> >> >> >> https://groups.google.com/d/msgid/django-users/CAEuG%2BTah74hdZMv%2BwdZPPq5PLaJ%3DhxOFMNXuVLfFYSw2Uz4N0w%40mail.gmail.com. >> >> For more options, visit https://groups.google.com/d/optout. >> > >> > >> > Django usually creates the inputs the same way, so what I do in my tests >> > is >> > to first dump the content of the response body on the screen and then >> > copy >> > the input statement from there. What you probably need is '<input >> > name="username"', because it doesn't matter for your test if the html >> > tag is >> > closed. So you should be fine with: >> > self.assertContains(response, '<input name="username"') >> > >> > -- >> > You received this message because you are subscribed to the Google >> > Groups >> > "Django users" group. >> > To unsubscribe from this group and stop receiving emails from it, send >> > an >> > email to [email protected]. >> > To post to this group, send email to [email protected]. >> > Visit this group at https://groups.google.com/group/django-users. >> > To view this discussion on the web visit >> > >> > https://groups.google.com/d/msgid/django-users/CALXYUbmmotLwzjZY6ZZnAqy21xqZN1%3DiE7ah3g5JxFgEw-POZg%40mail.gmail.com. >> > For more options, visit https://groups.google.com/d/optout. >> >> >> >> -- >> >> Cordialement, Coues Ludovic >> +336 148 743 42 >> >> -- >> You received this message because you are subscribed to the Google Groups >> "Django users" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected]. >> To post to this group, send email to [email protected]. >> Visit this group at https://groups.google.com/group/django-users. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/django-users/CAEuG%2BTZCWDkkrZuP2N168pth1hL-gc8FrVjMwZnb3xS%2BK1X%2Bxw%40mail.gmail.com. >> For more options, visit https://groups.google.com/d/optout. > > > Hi, > > I think you have misunderstood me. > > First you need to check against the real response object, otherwise your > test will only test if the item is present in your string, which is not what > I meant. I meant that you should check what HTML django is generating to > then get the correct information. > > In your case, I am now guessing that the output of django is the information > you put into the fieldset variable? > > If so, you need to write > self.assertContains(response,'<input autofocus="" class="form-control" > id="id_username" maxlength="254" name="username"') > > The assertContains does not parse the html in any way, but uses a search for > the text you entered. So if the text has 'autofocus="" class="form-control" > id="id_username" maxlength="254"' before 'name="username"', then you need to > add that as well, otherwise you won't find the text at all. > > Regards, > > Andréas > > > -- > You received this message because you are subscribed to the Google Groups > "Django users" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To post to this group, send email to [email protected]. > Visit this group at https://groups.google.com/group/django-users. > To view this discussion on the web visit > https://groups.google.com/d/msgid/django-users/CALXYUbkp-oM3Y9dUYEcb8kbQT0kS95hDBqxVWMu8Cn-8iYQv3w%40mail.gmail.com. > > For more options, visit https://groups.google.com/d/optout. -- Cordialement, Coues Ludovic +336 148 743 42 -- You received this message because you are subscribed to the Google Groups "Django users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/django-users. To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/CAEuG%2BTY%3DcbadWnm85-M2YEs2%3DwwH6gjLpnOGhLXjEpq-rGLGHw%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.

