wabot/tests/integration/test_ephemeral.py

61 lines
1.8 KiB
Python

"""Drive the full page-object stack against a real headless browser."""
import pytest
import wabot
from .conftest import BROWSERS
class LoginPage(wabot.Page):
elements = {
"title": ("el", ("id", "page-title")),
"username": ("el", ("id", "username")),
"state": ("select", ("id", "state")),
"agree": ("checkbox", ("id", "agree")),
"submit": ("el", ("id", "submit-btn")),
}
def verify(self):
return self.driver.title == "Login"
def log_in(self, username):
self["username"].set_value(username)
self["state"].set_value(value="CO")
self["agree"].set_checked(True)
return self["submit"].click_and_go()
class WelcomePage(wabot.Page):
elements = {"greeting": ("el", ("id", "greeting"))}
def verify(self):
return self.driver.title == "Welcome"
@pytest.mark.parametrize("browser_name", BROWSERS)
def test_login_flow_end_to_end(browser_name, site_url):
bot = wabot.browser(browser=browser_name, headless=True, pacing=wabot.NoPacing())
try:
bot.driver.get(f"{site_url}/login.html")
assert bot.set_page(LoginPage) is True
assert bot.log_in("mathew") is True
assert bot.set_page(WelcomePage) is True
assert bot["greeting"].text == "You made it."
assert bot.good is True
finally:
bot.driver.quit()
@pytest.mark.parametrize("browser_name", BROWSERS)
def test_full_page_screenshot(browser_name, site_url, tmp_path):
bot = wabot.browser(browser=browser_name, headless=True, pacing=wabot.NoPacing())
try:
bot.driver.get(f"{site_url}/login.html")
bot.set_page(LoginPage)
out = tmp_path / "shot.png"
assert bot.save_screenshot(str(out)) is True
assert out.stat().st_size > 0
finally:
bot.driver.quit()