diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 855659a66b..c92116de11 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -9,6 +9,13 @@ USER $USER # install devcontainer requirements RUN pip install -e .[dev,test] +USER root +RUN pip install pytest-playwright playwright -U +RUN playwright install-deps + +USER $USER +RUN playwright install + # docs requirements are in a separate file for the GitHub Action COPY docs/requirements.txt docs/requirements.txt RUN pip install -r docs/requirements.txt diff --git a/pyproject.toml b/pyproject.toml index ce729d2ef3..dcbb4b22a5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -33,8 +33,10 @@ dev = [ test = [ "coverage", "pytest", + "playwright", "pytest-django", "pytest-mock", + "pytest-playwright", "pytest-socket", ] diff --git a/run_playwright.sh b/run_playwright.sh new file mode 100644 index 0000000000..89a57a8f0b --- /dev/null +++ b/run_playwright.sh @@ -0,0 +1,21 @@ +# Basic command (runs Chromium) + +pytest -k test_example --headed --slowmo 1000 + +# (From here, run second test only in the interest of time) + +# Use --browser to run with a different browser + +# pytest -k test_get_started_link --headed --browser firefox + +# Use --device to run with different viewports + +# pytest -k test_get_started_link --headed --device "iPhone 13" + +# Run in debug mode (https://playwright.dev/python/docs/running-tests#debugging-tests) + +# PWDEBUG=1 pytest -s -k test_get_started_link + +# More CLI options: +# https://playwright.dev/python/docs/test-runners +# https://playwright.dev/python/docs/running-tests#command-line diff --git a/test_example.py b/test_example.py new file mode 100644 index 0000000000..dbf2900c55 --- /dev/null +++ b/test_example.py @@ -0,0 +1,29 @@ +import re +from playwright.sync_api import Page, expect + + +def test_has_title(page: Page): + page.goto("https://dev-benefits.calitp.org/") + + # Expect a title "to contain" a substring. + expect(page).to_have_title(re.compile("Cal-ITP")) + + +def test_get_started_link(page: Page): + page.goto("https://dev-benefits.calitp.org/") + + # Click the Choose your provider link. + page.get_by_text("Choose your provider").click() + + page.get_by_text("California State Transit (dev)").click() + + page.get_by_label("Medicare Cardholder").click() + + page.get_by_text("Choose this benefit").click() + + page.get_by_text("Continue to Medicare.gov").click() + + page.wait_for_timeout(5000) + + # # Expects page to have a heading with the name of Installation. + # expect(page.get("heading", name="Installation")).to_be_visible() diff --git a/tests/cypress/cypress.config.js b/tests/cypress/cypress.config.js index 55296b755d..6a9a4a82ab 100644 --- a/tests/cypress/cypress.config.js +++ b/tests/cypress/cypress.config.js @@ -1,6 +1,4 @@ -const { defineConfig } = require("cypress"); - -module.exports = defineConfig({ +module.exports = { downloadsFolder: "downloads", fixturesFolder: "fixtures", screenshotsFolder: "screenshots", @@ -15,5 +13,6 @@ module.exports = defineConfig({ }, specPattern: "specs/**/*.cy.{js,jsx,ts,tsx}", supportFile: false, + baseUrl: "http://localhost:11369", }, -}); +};