"""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()