Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def test_choose_submit_fail(select_name):
browser = mechanicalsoup.StatefulBrowser()
browser.open_fake_page(choose_submit_fail_form)
form = browser.select_form('#choose-submit-form')
if select_name['fails']:
with pytest.raises(mechanicalsoup.utils.LinkNotFoundError):
form.choose_submit(select_name['name'])
else:
form.choose_submit(select_name['name'])
def test_submit_set(httpbin):
"""Complete and submit the pizza form at http://httpbin.org/forms/post """
browser = mechanicalsoup.Browser()
page = browser.get(httpbin + "/forms/post")
form = mechanicalsoup.Form(page.soup.form)
form["custname"] = "Philip J. Fry"
form["size"] = "medium"
form["topping"] = ("cheese", "onion")
form["comments"] = "freezer"
response = browser.submit(form, page.url)
# helpfully the form submits to http://httpbin.org/post which simply
# returns the request headers in json format
json = response.json()
data = json["form"]
assert data["custname"] == "Philip J. Fry"
assert data["custtel"] == "" # web browser submits "" for input left blank
def test_issue180():
"""Test that a KeyError is not raised when Form.choose_submit is called
on a form where a submit element is missing its name-attribute."""
browser = mechanicalsoup.StatefulBrowser()
html = '''
<form>
<input value="Invalid" type="submit">
<input value="Valid" name="valid" type="submit">
</form>
'''
browser.open_fake_page(html)
form = browser.select_form()
with pytest.raises(mechanicalsoup.utils.LinkNotFoundError):
form.choose_submit('not_found')
def authorize(auth_url, user, password):
browser = mechanicalsoup.StatefulBrowser(raise_on_404=True)
logger.info("opening auth_url")
response = browser.open(auth_url)
assert(response.ok)
browser.select_form('form[action="/vpn-user-portal/_form/auth/verify"]')
browser["userName"] = user
browser["userPass"] = password
logger.info("logging in")
response = browser.submit_selected()
assert(response.ok)
form = browser.select_form()
if 'action' in form.form.attrs and form.form.attrs['action'] == '/vpn-user-portal/_two_factor/auth/verify/totp':
raise EduvpnAuthException("otp enabled")
assert(urlparse(browser.get_url()).path == "/vpn-user-portal/_oauth/authorize") # make sure is the right page
form = browser.select_form()
form.form.select('button[value="yes"]')
logger.info("authorising app")
def test_link_arg_multiregex(httpbin):
browser = mechanicalsoup.StatefulBrowser()
browser.open_fake_page('<a href="/get">Link</a>', httpbin.url)
with pytest.raises(ValueError, match="link parameter cannot be .*"):
browser.follow_link('foo', url_regex='bar')
def test_launch_browser(mocker):
browser = mechanicalsoup.StatefulBrowser()
browser.set_debug(True)
browser.open_fake_page('')
mocker.patch('webbrowser.open')
with pytest.raises(mechanicalsoup.LinkNotFoundError):
browser.follow_link('nosuchlink')
# mock.assert_called_once() not available on some versions :-(
assert webbrowser.open.call_count == 1
mocker.resetall()
with pytest.raises(mechanicalsoup.LinkNotFoundError):
browser.select_form('nosuchlink')
# mock.assert_called_once() not available on some versions :-(
assert webbrowser.open.call_count == 1
def test_404(httpbin):
browser = mechanicalsoup.Browser(raise_on_404=True)
with pytest.raises(mechanicalsoup.LinkNotFoundError):
resp = browser.get(httpbin + "/nosuchpage")
resp = browser.get(httpbin.url)
assert resp.status_code == 200
def test__request_disabled_attr(httpbin):
"""Make sure that disabled form controls are not submitted."""
form_html = """
<form action="{}/post" method="post">
<input value="1" name="nosubmit" disabled="">
</form>""".format(httpbin.url)
browser = mechanicalsoup.Browser()
response = browser._request(BeautifulSoup(form_html, "lxml").form)
assert response.json()['form'] == {}
<legend> Pizza Toppings </legend>
<p><input checked="" value="bacon" name="topping" type="CHECKBOX">Bacon</p>
<p><input value="cheese" name="topping" type="checkBox">Extra Cheese</p>
<p><input checked="" value="onion" name="topping" type="checkbox">Onion</p>
<p><input value="mushroom" name="topping" type="checkbox">Mushroom</p>
<select name="shape">
<option value="round">Round</option>
<option selected="" value="square">Square</option>
</select>
""".format(httpbin.url)
form = BeautifulSoup(form_html, "lxml").form
browser = mechanicalsoup.Browser()
response = browser._request(form)
data = response.json()['form']
assert data["customer"] == "Philip J. Fry"
assert data["telephone"] == "555"
assert data["comments"] == "freezer"
assert data["size"] == "medium"
assert data["topping"] == ["bacon", "onion"]
assert data["shape"] == "square"
assert "application/x-www-form-urlencoded" in response.request.headers[
"Content-Type"]
def test_form_not_found():
browser = mechanicalsoup.StatefulBrowser()
browser.open_fake_page(page_with_various_fields)
form = browser.select_form('form')
with pytest.raises(mechanicalsoup.utils.LinkNotFoundError):
form.input({'foo': 'bar', 'nosuchname': 'nosuchval'})
with pytest.raises(mechanicalsoup.utils.LinkNotFoundError):
form.check({'foo': 'bar', 'nosuchname': 'nosuchval'})
with pytest.raises(mechanicalsoup.utils.LinkNotFoundError):
form.check({'entree': 'cheese'})
with pytest.raises(mechanicalsoup.utils.LinkNotFoundError):
form.check({'topping': 'tofu'})
with pytest.raises(mechanicalsoup.utils.LinkNotFoundError):
form.textarea({'bar': 'value', 'foo': 'nosuchval'})
with pytest.raises(mechanicalsoup.utils.LinkNotFoundError):
form.set_radio({'size': 'tiny'})
with pytest.raises(mechanicalsoup.utils.LinkNotFoundError):
form.set_select({'entree': ('no_multiple', 'no_multiple')})