diff --git a/tests/integration/test_ephemeral.py b/tests/integration/test_ephemeral.py new file mode 100644 index 0000000..ffb864c --- /dev/null +++ b/tests/integration/test_ephemeral.py @@ -0,0 +1,60 @@ +"""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()