def test_form_submit_follows_redirect(): form_page = TestAgent(TestApp()).get('/form-text') form_page.one('//form').attrib['method'] = 'get' form_page.one('//form').attrib['action'] = '/redirect1' assert_equal( form_page.one('//form').submit(follow=True).request.path, '/page1' )
def test_click_follows_redirect(): page = TestAgent(TestApp()).get('/page1') link = page.one("//a[text()='redirect']") response = link.click(follow=False) assert_equal(response.request.path, '/redirect1') page = TestAgent(TestApp()).get('/page1') link = page.one("//a[text()='redirect']") response = link.click(follow=True) assert_equal(response.request.path, '/page1')
def test_form_select_select(): app = FormApp(""" <select name="s"> <option value="o1">O1: Text with '</option> <option value="o2">O2: Text with \"</option> </select> """) r = TestAgent(app).get('/') r.one('//select').select('O1: Text with \'') assert r.one('//select/option[1]').selected == True assert_equal(r.one('//form').submit().body, 's:<o1>') r = TestAgent(app).get('/') r.one('//select').select(u'O1: Text with \'') r.one('//select').select(u'O2: Text with \"') assert r.one('//select/option[1]').selected == False assert r.one('//select/option[2]').selected == True assert_equal(r.one('//form').submit().body, 's:<o2>') app = FormApp(""" <select name="s"> <option value="o1">Same text</option> <option value="o2">Same text</option> </select> """) r = TestAgent(app).get('/') assert_raises( testino.MultipleMatchesError, r.one('//select').select, 'Same text')
def test_click_404_raises_error(): page = TestAgent(TestApp()).get('/bad-link') link = page.one("//a[text()='A Bad Link']") assert_raises( testino.PageNotFound, link.click )
def test_one(): page = TestAgent(TestApp()).get('/page1') assert_raises( testino.MultipleMatchesError, page.one, "//a" ) assert_raises( testino.NoMatchesError, page.one, "//h1" ) for href in ['page1', 'page2']: element = page.one("//a[@href=$href]", href=href) assert element.element.attrib['href'] == href page = TestAgent(TestApp()).get('/form-mixed') form = page.form data = [ dict(name="a", value="A", type="text"), dict(name="b", value="B", type="text")] for datum in data: xpath = "input[@name=$name and @value=$value and @type=$type]" element = form.one(xpath, **datum) for key, value in datum.items(): assert element.element.attrib[key] == value
def test_form_select_multiple(): app = FormApp(""" <select name="s" multiple=""> <option value="o1"></option> <option value="o2"></option> <option value="o3"></option> </select> """) r = TestAgent(app).get('/') r.one('//select').value = ['o1', 'o3'] assert_equal(r.one('//form').submit().body, 's:<o1>; s:<o3>') r = TestAgent(app).get('/') r.one('//select/option[3]').selected = True r.one('//select/option[2]').selected = True assert_equal(r.one('//form').submit().body, 's:<o2>; s:<o3>')
def test_form_radio(): app = FormApp(""" <input name="a" value="1" type="radio"/> <input name="a" value="2" type="radio"/> <input name="b" value="3" type="radio"/> <input name="b" value="4" type="radio"/> """) r = TestAgent(app).get('/') r.all('//*[@name="a"]')[0].checked = True r.all('//*[@name="b"]')[0].checked = True assert_equal(r.one('//form').submit().body, 'a:<1>; b:<3>') r = TestAgent(app).get('/') r.one('//*[@name="a"][1]').checked = True r.one('//*[@name="a"][2]').checked = True assert_equal(r.one('//form').submit().body, 'a:<2>')
def test_form_setitem(): form_page = TestAgent(TestApp()).get('/form-checkbox') form = form_page.one('//form') assert_raises( AssertionError, form.__setitem__, 'a', ['1', '2', '3'])
def test_form_textarea(): form_page = TestAgent(FormApp('<textarea name="t"></textarea>')).get('/') # Test empty submission form = form_page.form data = form.submit_data() assert data == [("t", "")] el = form_page.one('//textarea') assert el.submit_value == "" # Test non empty submission el.value = 'test' assert_equal( form_page.one('//textarea').form.submit().body, 't:<test>' ) assert el.submit_value == 'test' form = form_page.form form['t'] = "Mr Flibble says hello!" assert form.submit_data() == [("t", "Mr Flibble says hello!")]
def test_form_file_input_value_requires_3tuple(): r = TestAgent(FormApp('<input name="upload" type="file" />')).get('/') try: r.one('//input').value = 'photo.jpg' except ValueError: pass else: raise AssertionError("Expecting a ValueError") r = TestAgent(FormApp('<input name="upload" type="file" />')).get('/') try: r.one('//input').value = ('photo.jpg', '123123') except ValueError: pass else: raise AssertionError("Expecting a ValueError") r.one('//input').value = ('photo.jpg', 'text/jpeg', '123123')
def test_form_select(): app = FormApp(""" <select name="s"> <option value="o1"></option> <option value="o2"></option> <option>o3</option> </select> """) r = TestAgent(app).get('/') assert_equal(r.form.submit().body, 's:<o1>') r.one('//select').value = 'o2' assert r.one('//select/option[2]').selected assert_equal(r.form.submit().body, 's:<o2>') r = TestAgent(app).get('/') r.one('//select/option[2]').selected = True r.one('//select/option[1]').selected = True assert_equal(r.form.submit().body, 's:<o1>') assert_equal(r.one('//option[3]').value, "o3")
def test_empty_rows(): body = """ <table> <tr> <td></td><td></td><td></td> </tr> </table> """ agent = TestAgent(wz.Response(body)).get(u'/') row = agent.one(u'//tr') row.assert_is([None, '', u''])
def test_form_radio_value_property(): form = TestAgent(FormApp(""" <input name="a" value="1" type="radio"/> <input name="a" value="2" type="radio"/> """)).get('/').form assert form['a'] == None form.one('//input[@name="a"][2]').checked = True assert form['a'] == '2' assert form.one('//input[@name="a"][1]').value == '2' assert form.one('//input[@name="a"][2]').value == '2' form['a'] = '1' assert form.one('//input[@name="a"][1]').checked == True assert form.one('//input[@name="a"][2]').checked == False assert form.one('//input[@name="a"][1]').value == '1' assert form.one('//input[@name="a"][2]').value == '1' form['a'] = '2' assert form.one('//input[@name="a"][1]').checked == False assert form.one('//input[@name="a"][2]').checked == True form['a'] = None assert form.one('//input[@name="a"][1]').checked == False assert form.one('//input[@name="a"][2]').checked == False
def test_click(): page = TestAgent(TestApp()).get('/page1') assert_equal( page.one("//a[1]").click().request.path, '/page1' ) assert_equal( page.one("//a[2]").click().request.path, '/page2' ) assert_equal( len(page.all("//a")), 3 ) assert_raises( testino.MultipleMatchesError, page.one, "//a" ) assert_equal( page.click('//a[1]').request.path, page.one('//a[1]').click().request.path ) assert_equal( page.click(text=u'page 1').request.path, page.one('//a[text()="page 1"]').click().request.path ) assert_equal( page.click(href=u'page1').request.path, page.one('//a[@href="page1"]').click().request.path ) assert_equal( page.click(text=u'page 1', href=u'page1').request.path, page.one('//a[text()="page 1" and @href="page1"]').click().request.path )
def test_lxml_attr_doesnt_reset_forms(): form_page = TestAgent(TestApp()).get('/form-text') form = form_page.one('//form') # Set field values form.one('//input[@name="a"][1]').value = 'do' form.one('//input[@name="a"][2]').value = 're' form.one('//input[@name="b"][1]').value = 'mi' # Check page body assert "form" in tostring(form_page.lxml) # Check form values assert form.one('//input[@name="a"][1]').value == 'do' assert form.one('//input[@name="a"][2]').value == 're' assert form.one('//input[@name="b"][1]').value == 'mi'
def test_button_form_property(): html_form = ''' <html><body> <form method="POST" id="flibble" action="/flibble"> <input type="text" name="foo" value=""> <input type="submit" name="submit" value="Save"> </form> <button form="flibble" name="another">Another Button</button> </body></html>''' page = TestAgent(wz.Response(html_form)).get('/') form = page.form button = page.one("//button") assert button.form == form assert ("another", "") in button.submit_data()
def test_form_getitem(): form_text = html.div( html.p( html.input(type="text", name="foo", value="flam")), html.p( html.select( html.option(value="a", selected=True), html.option(value="b"), name="bar")) ) form_page = TestAgent(FormApp(form_text)).get(u'/') form = form_page.one(u'//form') assert form['foo'] == "flam" assert form['bar'] == "a" form["foo"] = u"flibble" form["bar"] = u"a" assert form.one(u'//input').value == u'flibble' assert form.one(u'//select').value == u'a' # Test checkboxes form_page = TestAgent(TestApp()).get('/form-checkbox') form = form_page.one('//form') assert form['a'] == [] assert form['b'] == ["A"]
def test_rows_to_dict(): body_1 = """ <table> <thead> <tr> <th>foo</th> <th>bar</th> <th>baz</th> </tr> </thead> <tbody> <tr> <td> 1 </td> <td> 2 </td> <td> 3 </td> </tr> <tr> <td>4</td> <td>5</td> <td>6</td> </tr> </tbody> </table> """ body_2 = """ <table> <thead> <tr> <th><a href="">foo</a></th> <th>bar</th> <th>baz</th> </tr> </thead> <tr> <td>1</td> <td>2</td> <td>3</td> </tr> <tr> <td>4</td> <td>5</td> <td>6</td> </tr> </table> """ for body in [body_1, body_2]: agent = TestAgent(wz.Response(body)).get('/') row = agent.one(u'//tr[td][1]') assert row.headers() == ["foo", "bar", "baz"] expected = dict(foo='1', bar='2', baz='3') for key in expected: assert_equal(expected[key], row.to_dict()[key])
def test_form_text(): form_page = TestAgent(TestApp()).get('/form-text') form = form_page.one('//form') # Check defaults are submitted assert_equal( form.submit().body, "a:<>; a:<a>; b:<>" ) # Now set field values form.one('//input[@name="a"][1]').value = 'do' form.one('//input[@name="a"][2]').value = 're' form.one('//input[@name="b"][1]').value = 'mi' assert_equal( form.submit().body, "a:<do>; a:<re>; b:<mi>" )
def test_form_file_input_submits_file_data(): class TestApp(FormApp): def POST(self, environ, start_response): req = wz.Request(environ) fu = req.files['upload'] assert isinstance(fu, wz.FileStorage) assert fu.read() == '123123' return wz.Response(['ok'])(environ, start_response) r = TestAgent(TestApp('<input name="upload" type="file" />', enctype="multipart/form-data")).get('/') r.one('//input').value = ('photo.jpg', 'text/jpeg', '123123') r.one('//form').submit() r = TestAgent(TestApp('<input name="upload" type="file" />', enctype="multipart/form-data")).get('/') r.one('//input').value = ('photo.jpg', 'text/jpeg', StringIO('123123')) r.one('//form').submit()
def test_form_checkbox(): form_page = TestAgent(TestApp()).get('/form-checkbox') form = form_page.one('//form') # Check defaults are submitted assert_equal( form.submit().body, "b:<A>" ) # Now set field values form.one('//input[@name="a"][1]').checked = True form.one('//input[@name="a"][2]').checked = True form.one('//input[@name="b"][1]').checked = False form.one('//input[@name="b"][2]').checked = True assert form.one('//input[@name="a"][1]').checked == True assert form.one('//input[@name="a"][2]').checked == True assert form.one('//input[@name="b"][1]').checked == False assert form.one('//input[@name="b"][2]').checked == True assert_equal( form.submit().body, "a:<1>; a:<2>; b:<B>" )
def test_form_submit_button(): app = FormApp(''' <input id="1" type="submit" name="s" value="1"/> <input id="2" type="submit" name="s" value="2"/> <input id="3" type="submit" name="t" value="3"/> <input id="4" type="image" name="u" value="4"/> <button id="5" type="submit" name="v" value="5">click me!</button> <button id="6" name="w" value="6">click me!</button> <button id="7" type="button" name="x" value="7">don't click me!</button> ''') form_page = TestAgent(app).get('/') assert_equal(form_page.one('//form').submit().body, '') assert_equal(form_page.one('//form').submit_data(), []) assert_equal(form_page.one('#1', css=True).submit().body, 's:<1>') assert_equal(form_page.one('#1', css=True).submit_data(), [('s', '1')]) assert_equal(form_page.one('#2', css=True).submit().body, 's:<2>') assert_equal(form_page.one('#2', css=True).submit_data(), [('s', '2')]) assert_equal(form_page.one('#3', css=True).submit().body, 't:<3>') assert_equal(form_page.one('#3', css=True).submit_data(), [('t', '3')]) assert_equal(form_page.one('#4', css=True).submit().body, 'u.x:<1>; u.y:<1>') assert form_page.one('#4', css=True).submit_data() == [('u.x', '1'), ('u.y', '1')] assert_equal(form_page.one('#5', css=True).submit().body, 'v:<5>') assert_equal(form_page.one('#5', css=True).submit_data(), [('v', '5')]) assert_equal(form_page.one('#6', css=True).submit().body, 'w:<6>') assert_equal(form_page.one('#6', css=True).submit_data(), [('w', '6')]) try: form_page.one('#7', css=True).submit() except NotImplementedError: pass else: raise AssertionError("Shouldn't be able to submit a non-submit button") try: form_page.one('#7', css=True).submit_data() except NotImplementedError: pass else: raise AssertionError("Shouldn't be able to call submit_data on a non-submit button")
def test_form_file_input_requires_stores_values(): r = TestAgent(FormApp('<input name="upload" type="file" />')).get('/') r.one('//input').value = ('photo.jpg', 'text/jpeg', '123123') assert_equal(r.one('//input').value, ('photo.jpg', 'text/jpeg', '123123'))
def test_form_attribute_returns_parent_form(): form_page = TestAgent(TestApp()).get('/form-text') assert_equal(form_page.all('//input[@name="a"]')[0].form, form_page.one('//form'))
def test_form_input_no_type(): form_page = TestAgent(FormApp('<input name="t" value="1" />')).get('/') assert_equal(form_page.one('//form').form.submit().body, 't:<1>')
def test_form_disabled(): form_page = TestAgent(FormApp('<input name="t" value="1" type="text" disabled="" />')).get('/') assert_equal( form_page.one('//form').form.submit().body, '' )
def test_striptags_handles_trailing_newline(): agent = TestAgent(wz.Response(['<tr><td>flimmel</td>\n</tr>'])).get('/') assert_equal( agent.one('//td').striptags(), 'flimmel' )
def test_in_operator_works_on_elementwrapper(): agent = TestAgent(wz.Response(['<p>Tea tray tea tray tea tray tea tray</p>'])).get('/') assert 'tea tray' in agent.one('//p') assert 'tea tray' in agent.all('//p')[0] assert 'teat ray' not in agent.one('//p') assert 'teat ray' not in agent.all('//p')[0]
def test_form_field_container(): form_page = TestAgent(TestApp()).get('/form-mixed') form = form_page.one('//form') assert form.fields[u's'] == "O1"
def test_form_checkbox_value_property(): form = TestAgent(FormApp(""" <input name="a" value="1" type="checkbox"/> <input name="a" value="2" type="checkbox"/> """)).get('/').form form.one('//input[@name="a"][1]').checked = True form.one('//input[@name="a"][2]').checked = True assert form.one('//input[@name="a"][1]').value == '1' assert form.one('//input[@name="a"][2]').value == '2' assert form['a'] == ['1', '2'] form.one('//input[@name="a"][1]').checked = False form.one('//input[@name="a"][2]').checked = True assert form.one('//input[@name="a"][1]').value == None assert form.one('//input[@name="a"][2]').value == '2' assert form['a'] == ['2'] form.one('//input[@name="a"][1]').checked = False form.one('//input[@name="a"][2]').checked = False assert form.one('//input[@name="a"][1]').value == None assert form.one('//input[@name="a"][2]').value == None assert form['a'] == [] form.one('//input[@name="a"][1]').value = ['1', '2'] assert form.one('//input[@name="a"][1]').checked == True assert form.one('//input[@name="a"][2]').checked == True assert form['a'] == ['1', '2'] form.one('//input[@name="a"][1]').value = ['1'] assert form.one('//input[@name="a"][1]').checked == True assert form.one('//input[@name="a"][2]').checked == False assert form['a'] == ['1'] form.one('//input[@name="a"][1]').value = [] assert form.one('//input[@name="a"][1]').checked == False assert form.one('//input[@name="a"][2]').checked == False assert form['a'] == []