Exemplo n.º 1
0
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'
    )
Exemplo n.º 2
0
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')
Exemplo n.º 3
0
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')
Exemplo n.º 4
0
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
    )
Exemplo n.º 5
0
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
Exemplo n.º 6
0
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>')
Exemplo n.º 7
0
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>')
Exemplo n.º 8
0
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'])
Exemplo n.º 9
0
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!")]
Exemplo n.º 10
0
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')
Exemplo n.º 11
0
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")
Exemplo n.º 12
0
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''])
Exemplo n.º 13
0
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
Exemplo n.º 14
0
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
    )
Exemplo n.º 15
0
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'
Exemplo n.º 16
0
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()
Exemplo n.º 17
0
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"]
Exemplo n.º 18
0
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])
Exemplo n.º 19
0
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>"
    )
Exemplo n.º 20
0
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()
Exemplo n.º 21
0
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>"
    )
Exemplo n.º 22
0
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")
Exemplo n.º 23
0
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'))
Exemplo n.º 24
0
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'))
Exemplo n.º 25
0
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>')
Exemplo n.º 26
0
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,
        ''
    )
Exemplo n.º 27
0
def test_striptags_handles_trailing_newline():
    agent = TestAgent(wz.Response(['<tr><td>flimmel</td>\n</tr>'])).get('/')
    assert_equal(
        agent.one('//td').striptags(),
        'flimmel'
    )
Exemplo n.º 28
0
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]
Exemplo n.º 29
0
def test_form_field_container():
    form_page = TestAgent(TestApp()).get('/form-mixed')
    form = form_page.one('//form')
    assert form.fields[u's'] == "O1"
Exemplo n.º 30
0
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'] == []