diff --git a/.gitignore b/.gitignore index 372b1ea..95c47c1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,9 @@ -.DS_Store -node_modules -.tmp -npm-debug.log + +# Playwright +node_modules/ /test-results/ /playwright-report/ /blob-report/ /playwright/.cache/ -.auth/ \ No newline at end of file +/playwright/.auth/ +.auth/ diff --git a/FETCH_HEAD b/FETCH_HEAD new file mode 100644 index 0000000..7dc81c1 --- /dev/null +++ b/FETCH_HEAD @@ -0,0 +1,2 @@ +f2bbe9ea3f079ca2cb9fb27b2c9f8bbbf06a1a99 not-for-merge branch 'main' of github.com:SebastianScherfQA/learning-playwright-5911873 +f2bbe9ea3f079ca2cb9fb27b2c9f8bbbf06a1a99 github.com:LinkedInLearning/learning-playwright-5911873 diff --git a/HEAD b/HEAD new file mode 100644 index 0000000..b870d82 --- /dev/null +++ b/HEAD @@ -0,0 +1 @@ +ref: refs/heads/main diff --git a/config b/config new file mode 100644 index 0000000..1e0bc24 --- /dev/null +++ b/config @@ -0,0 +1,13 @@ +[core] + repositoryformatversion = 0 + filemode = false + bare = true + symlinks = false + ignorecase = true +[submodule] + active = . +[remote "upstream"] + url = git@github.com:LinkedInLearning/learning-playwright-5911873.git +[remote "origin"] + url = git@github.com:SebastianScherfQA/learning-playwright-5911873.git + fetch = +refs/heads/*:refs/remotes/origin/* diff --git a/description b/description new file mode 100644 index 0000000..498b267 --- /dev/null +++ b/description @@ -0,0 +1 @@ +Unnamed repository; edit this file 'description' to name the repository. diff --git a/objects/pack/pack-5e521e3b7d1c3e2310c35f748a365d0d51b2daf6.idx b/objects/pack/pack-5e521e3b7d1c3e2310c35f748a365d0d51b2daf6.idx new file mode 100644 index 0000000..08288a8 Binary files /dev/null and b/objects/pack/pack-5e521e3b7d1c3e2310c35f748a365d0d51b2daf6.idx differ diff --git a/objects/pack/pack-5e521e3b7d1c3e2310c35f748a365d0d51b2daf6.pack b/objects/pack/pack-5e521e3b7d1c3e2310c35f748a365d0d51b2daf6.pack new file mode 100644 index 0000000..1e11586 Binary files /dev/null and b/objects/pack/pack-5e521e3b7d1c3e2310c35f748a365d0d51b2daf6.pack differ diff --git a/objects/pack/pack-5e521e3b7d1c3e2310c35f748a365d0d51b2daf6.rev b/objects/pack/pack-5e521e3b7d1c3e2310c35f748a365d0d51b2daf6.rev new file mode 100644 index 0000000..f1728ab Binary files /dev/null and b/objects/pack/pack-5e521e3b7d1c3e2310c35f748a365d0d51b2daf6.rev differ diff --git a/package-lock.json b/package-lock.json index eeb5bc3..3a9a94d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,18 +9,18 @@ "version": "1.0.0", "license": "ISC", "devDependencies": { - "@playwright/test": "^1.47.2", - "@types/node": "^22.7.4", - "dotenv": "^16.4.5" + "@playwright/test": "^1.59.1", + "@types/node": "^22.7.4" } }, "node_modules/@playwright/test": { - "version": "1.47.2", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.47.2.tgz", - "integrity": "sha512-jTXRsoSPONAs8Za9QEQdyjFn+0ZQFjCiIztAIF6bi1HqhBzG9Ma7g1WotyiGqFSBRZjIEqMdT8RUlbk1QVhzCQ==", + "version": "1.59.1", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.59.1.tgz", + "integrity": "sha512-PG6q63nQg5c9rIi4/Z5lR5IVF7yU5MqmKaPOe0HSc0O2cX1fPi96sUQu5j7eo4gKCkB2AnNGoWt7y4/Xx3Kcqg==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "playwright": "1.47.2" + "playwright": "1.59.1" }, "bin": { "playwright": "cli.js" @@ -30,24 +30,13 @@ } }, "node_modules/@types/node": { - "version": "22.7.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.4.tgz", - "integrity": "sha512-y+NPi1rFzDs1NdQHHToqeiX2TIS79SWEAw9GYhkkx8bD0ChpfqC+n2j5OXOCpzfojBEBt6DnEnnG9MY0zk1XLg==", + "version": "22.19.17", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.17.tgz", + "integrity": "sha512-wGdMcf+vPYM6jikpS/qhg6WiqSV/OhG+jeeHT/KlVqxYfD40iYJf9/AE1uQxVWFvU7MipKRkRv8NSHiCGgPr8Q==", "dev": true, + "license": "MIT", "dependencies": { - "undici-types": "~6.19.2" - } - }, - "node_modules/dotenv": { - "version": "16.4.5", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", - "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" + "undici-types": "~6.21.0" } }, "node_modules/fsevents": { @@ -56,6 +45,7 @@ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -65,12 +55,13 @@ } }, "node_modules/playwright": { - "version": "1.47.2", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.47.2.tgz", - "integrity": "sha512-nx1cLMmQWqmA3UsnjaaokyoUpdVaaDhJhMoxX2qj3McpjnsqFHs516QAKYhqHAgOP+oCFTEOCOAaD1RgD/RQfA==", + "version": "1.59.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.59.1.tgz", + "integrity": "sha512-C8oWjPR3F81yljW9o5OxcWzfh6avkVwDD2VYdwIGqTkl+OGFISgypqzfu7dOe4QNLL2aqcWBmI3PMtLIK233lw==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "playwright-core": "1.47.2" + "playwright-core": "1.59.1" }, "bin": { "playwright": "cli.js" @@ -83,10 +74,11 @@ } }, "node_modules/playwright-core": { - "version": "1.47.2", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.47.2.tgz", - "integrity": "sha512-3JvMfF+9LJfe16l7AbSmU555PaTl2tPyQsVInqm3id16pdDfvZ8TTZ/pyzmkbDrZTQefyzU7AIHlZqQnxpqHVQ==", + "version": "1.59.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.59.1.tgz", + "integrity": "sha512-HBV/RJg81z5BiiZ9yPzIiClYV/QMsDCKUyogwH9p3MCP6IYjUFu/MActgYAvK0oWyV9NlwM3GLBjADyWgydVyg==", "dev": true, + "license": "Apache-2.0", "bin": { "playwright-core": "cli.js" }, @@ -95,10 +87,11 @@ } }, "node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", - "dev": true + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" } } } diff --git a/package.json b/package.json index f9eee43..94563fa 100644 --- a/package.json +++ b/package.json @@ -1,22 +1,22 @@ { "name": "learning-playwright-5911873", "version": "1.0.0", - "description": "This is the repository for the LinkedIn Learning course `learning-playwright`. The full course is available from [LinkedIn Learning][lil-course-url].", + "description": "", "main": "index.js", "scripts": { - "test": "npx playwright test", + "test": "playwright test", "test:chromium": "npx playwright test --project chromium", "test:first": "npx playwright test --grep @first", - "test:local": "BASE_URL=http://localhost:4200 npx playwright test", + "test:local": "cross-env BASE_URL=http://localhost:4200 npx playwright test", "test:report": "npx playwright test && npx playwright show-report", "test:ui": "npx playwright test --ui" }, "keywords": [], "author": "", "license": "ISC", + "type": "commonjs", "devDependencies": { - "@playwright/test": "^1.47.2", - "@types/node": "^22.7.4", - "dotenv": "^16.4.5" + "@playwright/test": "^1.59.1", + "@types/node": "^22.7.4" } } diff --git a/packed-refs b/packed-refs new file mode 100644 index 0000000..18c556e --- /dev/null +++ b/packed-refs @@ -0,0 +1,40 @@ +# pack-refs with: peeled fully-peeled sorted +4080dc101681d46f35b39aafd0c50c50c0f0046d refs/heads/01_01 +4080dc101681d46f35b39aafd0c50c50c0f0046d refs/heads/01_01b +04bdfc084d80de156da67c467d98c88e527f500b refs/heads/01_01e +199e11cd9f820da88dc8834ea546cc55c331a237 refs/heads/01_02b +6eb16c1b763d1758b781a65fd977565217b9c01c refs/heads/01_02e +b15277d2910ee3bf9be8683d4bd4a3c01dc64a0c refs/heads/01_03b +302bfe474c4198c26e0ddcac6690c12a96f630a3 refs/heads/01_03e +9b42469f088ccaab5aaf8163019f4b9a493e08b3 refs/heads/01_04b +8b663b00a458419e5811bdf7d204480a47ac7582 refs/heads/01_04e +a65de21c62b3f0253ed406d12af6742df038960a refs/heads/01_05b +f41e76f083dc52978344b1edd1777e1070ebd36d refs/heads/01_05e +234c5634884d1865293e66fcf528fda8a62a0d6d refs/heads/01_06b +e9f31c2775fbce1afa0e7928a9f338a551f7a8fa refs/heads/01_06e +9080ac26443f3ab2698aac029084dd395ad2a9d2 refs/heads/01_07b +58132cbe00a8a68542b64e14c9634e10ecc206d1 refs/heads/01_07e +06baaa49007e2928428431f5aa2419b9e917e7da refs/heads/02_02b +b1767cd467c700aa3e54be850d59aa7b267300aa refs/heads/02_02e +fb721d2bdff6b222d44c250227b6bff562d8e5f1 refs/heads/02_03b +1ae32de3601906cb1d5bc83cbcfb65c72af36c34 refs/heads/02_03e +8db20e2e044fd6997dbbbf22cd913b87959b556f refs/heads/02_04b +ddc41b845cca889f512398b7e03108564629ed38 refs/heads/02_04e +e2b4e8730d2754e084b204f068470cb69d3e6e14 refs/heads/02_05b +a8e9ea243b8c331fbdab25afe2ef8dd77650dddb refs/heads/02_05e +51f09888e9b32e0db87babf7de20c1dda5dbf7c8 refs/heads/02_06b +8619df2b3c93f36a6cc858fcc897b13dd5b2b9d6 refs/heads/02_06e +8619df2b3c93f36a6cc858fcc897b13dd5b2b9d6 refs/heads/02_07b +2245120498ad746cd87402f171419a8a7524f81b refs/heads/02_07e +eb2e1ea59376b127a3e4b4f6f30c690c302200fc refs/heads/02_08b +3d7fad6beb14f6849eb89431b99596cf9a882b1a refs/heads/02_08e +232758625b3689e29f9d20f8b3227706b3c80711 refs/heads/02_11 +3faa07768eb49913aca163d9c91b2bcf00a55983 refs/heads/02_11b +fdd0baa5b41f6130c930be29ec585daf76b1be86 refs/heads/02_11e +05f2b31c48c7fa22298a5d589bb49b8b3aa1d2e1 refs/heads/03_02b +a1da2a4197b33cf4de9eff2b70488bad16b0d1e8 refs/heads/03_02e +9cf7b2a7654ffedd5ba4b5698cd9fe0f60502d33 refs/heads/03_03b +3ba34c73cd49207bc86c974bac3d92dd7a3fb916 refs/heads/03_03e +defd8b147285e3d410d040d7c56ce662d7981cf6 refs/heads/03_04b +3ff5008f968fed9c8accf4acc2da25b7c624e1fc refs/heads/03_04e +f2bbe9ea3f079ca2cb9fb27b2c9f8bbbf06a1a99 refs/heads/main diff --git a/playwright.config.ts b/playwright.config.ts index e1d54b5..8c68f58 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -1,42 +1,49 @@ -import { defineConfig, devices } from "@playwright/test"; +import { defineConfig, devices } from '@playwright/test'; /** * Read environment variables from file. * https://github.com/motdotla/dotenv */ -import dotenv from "dotenv"; -import path from "path"; -dotenv.config({ path: path.resolve(__dirname, ".env") }); +// import dotenv from 'dotenv'; +// import path from 'path'; +// dotenv.config({ path: path.resolve(__dirname, '.env') }); /** * See https://playwright.dev/docs/test-configuration. */ + export default defineConfig({ timeout: 30_000, globalTimeout: 10 * 60 * 1000, - testDir: "./tests", + testDir: './tests', /* Run tests in files in parallel */ fullyParallel: true, /* Fail the build on CI if you accidentally left test.only in the source code. */ forbidOnly: !!process.env.CI, - /* Retry on CI 2 times and locally 1 time */ + /* Retry on CI 2 times and locally 1 times */ retries: process.env.CI ? 2 : 1, /* Opt out of parallel tests on CI. */ workers: process.env.CI ? 1 : undefined, /* Reporter to use. See https://playwright.dev/docs/test-reporters */ - reporter: [["html"], ["list"]], + reporter: 'html', /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ use: { - /* Base URL to use in actions like `await page.goto('/')`. */ - baseURL: "https://practicesoftwaretesting.com", + /* Base URL to use in actions like `await page.goto('')`. */ + baseURL: 'https://practicesoftwaretesting.com', testIdAttribute: "data-test", + +// baseURL: 'http://portal.videc.info/', +// locale: 'de-DE', +// launchOptions: { +// args: ['--disable-features=Translate'], +// }, /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */ - trace: "on", + trace: 'on', actionTimeout: 0, ignoreHTTPSErrors: true, - video: "retain-on-failure", - screenshot: "only-on-failure", - headless: true, + video: 'retain-on-failure', + screenshot: 'only-on-failure', + headless: true }, /* Configure projects for major browsers */ @@ -46,10 +53,11 @@ export default defineConfig({ testMatch: /.*\.setup\.ts/, }, { - name: "chromium", + name: 'chromium', dependencies: ["setup"], - use: { ...devices["Desktop Chrome"], permissions: ["clipboard-read"] }, - }, + use: { ...devices['Desktop Chrome'], permissions: ["clipboard-read"]}, + } + // { // name: 'firefox', // dependencies: ["setup"], @@ -86,7 +94,7 @@ export default defineConfig({ /* Run your local dev server before starting the tests */ // webServer: { // command: 'npm run start', - // url: 'http://127.0.0.1:3000', + // url: 'http://localhost:3000', // reuseExistingServer: !process.env.CI, // }, }); diff --git a/refs/remotes/origin/HEAD b/refs/remotes/origin/HEAD new file mode 100644 index 0000000..4b0a875 --- /dev/null +++ b/refs/remotes/origin/HEAD @@ -0,0 +1 @@ +ref: refs/remotes/origin/main diff --git a/refs/remotes/origin/main b/refs/remotes/origin/main new file mode 100644 index 0000000..e63be38 --- /dev/null +++ b/refs/remotes/origin/main @@ -0,0 +1 @@ +f2bbe9ea3f079ca2cb9fb27b2c9f8bbbf06a1a99 diff --git a/tests/June5.spec.ts b/tests/June5.spec.ts new file mode 100644 index 0000000..0564618 --- /dev/null +++ b/tests/June5.spec.ts @@ -0,0 +1,20 @@ +import { test, expect } from '@playwright/test'; + +test('test', async ({ page }) => { + await page.goto('http://portal.videc.info/index.html#/'); + await page.getByRole('textbox', { name: 'Benutzername' }).click(); + await page.getByRole('textbox', { name: 'Benutzername' }).fill('admin'); + await page.getByRole('textbox', { name: 'Kennwort' }).click(); + await page.getByRole('textbox', { name: 'Kennwort' }).fill('admin'); + await page.getByRole('button', { name: 'Anmelden' }).click(); + await expect(page.locator('gridster')).toContainText('Kesseltemperatur [°C] (INT 1 h)'); + await expect(page.getByRole('heading', { name: '90,7 [°C]' })).toBeVisible(); + + await expect(page.locator('gridster')).toContainText('Berlin'); + await expect(page.locator('gridster')).toContainText('Hamburg'); + await expect(page.locator('gridster')).toContainText('Dortmund'); + await expect(page.locator('gridster')).toContainText('Erlangen'); + + await expect(page.locator('#navbar-container')).toMatchAriaSnapshot(`- text:  Sichten Dashboard`); + +}); \ No newline at end of file diff --git a/tests/api.spec.ts b/tests/api.spec.ts new file mode 100644 index 0000000..6aa19e1 --- /dev/null +++ b/tests/api.spec.ts @@ -0,0 +1,25 @@ +import { test, expect } from "@playwright/test"; + +test("GET /products", async ({ request }) => { + const apiURL = "https://api.practicesoftwaretesting.com"; + const response = await request.get(apiURL + "/products"); + + expect(response.status()).toBe(200); + const body = await response.json(); + console.log(body); + expect(body.data.length).toBe(9); + expect(body.total).toBe(50); +}); + +test("POST/users/login", async ({ request }) => { + const apiURL = "https://api.practicesoftwaretesting.com"; + const response = await request.post(apiURL + "/users/login", { + data: { + email: "customer@practicesoftwaretesting.com", + password: "welcome01", + }, + }); + expect(response.status()).toBe(200); + const body = await response.json(); + expect(body.token).toBeTruthy(); +}); diff --git a/tests/auth.setup.ts b/tests/auth.setup.ts index fc44e9b..57546d2 100644 --- a/tests/auth.setup.ts +++ b/tests/auth.setup.ts @@ -6,11 +6,10 @@ setup("Create customer 01 auth", async ({ page, context }) => { const customer01AuthFile = ".auth/customer01.json"; await page.goto("https://practicesoftwaretesting.com/auth/login"); - await page.getByTestId("email").fill(email); await page.getByTestId("password").fill(password); await page.getByTestId("login-submit").click(); - await expect(page.getByTestId("nav-menu")).toContainText("Jane Doe"); + await context.storageState({ path: customer01AuthFile }); }); diff --git a/tests/example.spec.ts b/tests/example.spec.ts new file mode 100644 index 0000000..62701d6 --- /dev/null +++ b/tests/example.spec.ts @@ -0,0 +1,18 @@ +import { test, expect } from '@playwright/test'; + +test('has title', async ({ page }) => { + await page.goto('https://playwright.dev/'); + + // Expect a title "to contain" a substring. + await expect(page).toHaveTitle(/Playwright/); +}); + +test('get started link', {tag: "@first"}, async ({ page }) => { + await page.goto('https://playwright.dev/'); + + // Click the get started link. + await page.getByRole('link', { name: 'Get started' }).click(); + + // Expects page to have a heading with the name of Installation. + await expect(page.getByRole('heading', { name: 'Installation' })).toBeVisible(); +}); diff --git a/tests/homepage/home.spec.ts b/tests/home.spec.ts similarity index 51% rename from tests/homepage/home.spec.ts rename to tests/home.spec.ts index a9c6a60..41f7787 100644 --- a/tests/homepage/home.spec.ts +++ b/tests/home.spec.ts @@ -7,33 +7,50 @@ test.describe("Home page with no auth", () => { test("visual test", async ({ page }) => { await page.waitForLoadState("networkidle"); - await expect(page).toHaveScreenshot("home-page-no-auth.png", { - mask: [page.getByTitle("Practice Software Testing - Toolshop")], - }); + await expect(page).toHaveScreenshot( + "home-page-no-auth-chromium-win32.png", + { + mask: [page.getByTitle("Practice Software Testing - Toolshop")], + }, + ); }); - test("check sign in", async ({ page }) => { await expect(page.getByTestId("nav-sign-in")).toHaveText("Sign in"); }); test("validate page title", async ({ page }) => { await expect(page).toHaveTitle( - "Practice Software Testing - Toolshop - v5.0" + "Practice Software Testing - Toolshop - v5.0", ); }); test("grid loads with 9 items", async ({ page }) => { const productGrid = page.locator(".col-md-9"); await expect(productGrid.getByRole("link")).toHaveCount(9); - expect(await productGrid.getByRole("link").count()).toBe(9); }); - test("search for Thor Hammer", async ({ page }) => { + test("Search for Thor Hammer and check the result", async ({ page }) => { const productGrid = page.locator(".col-md-9"); await page.getByTestId("search-query").fill("Thor Hammer"); await page.getByTestId("search-submit").click(); await expect(productGrid.getByRole("link")).toHaveCount(1); await expect(page.getByAltText("Thor Hammer")).toBeVisible(); + await expect(productGrid.getByTestId("product-price")).toBeVisible(); + }); + + test("Search for Pliers and check the result", async ({ page }) => { + const productGrid = page.locator(".col-md-9"); + await page.getByTestId("search-query").fill("Pliers"); + await page.getByTestId("search-submit").click(); + await expect(productGrid.getByRole("link")).toHaveCount(4); + await expect(page.getByAltText("Long Nose Pliers")).toBeVisible(); + + // await expect(page.getByTestId('product-01KRBNDCHCC5QYYNCSXPXGEP6Q')).toBeVisible(); + // const product = page.getByTestId('product-01KRBNDCHCC5QYYNCSXPXGEP6Q'); + // await expect(product.getByTestId('product-name')).toHaveText('Combination Pliers'); + // await expect(product.getByTestId('product-price')).toHaveText('$14.15'); + // await expect(product.getByTestId('co2-rating-badge')).toBeVisible(); + // await expect(product.getByTestId('co2-rating-badge')).toHaveText('ABCDE'); }); }); @@ -45,10 +62,14 @@ test.describe("Home page customer 01 auth", () => { test("visual test authorized", async ({ page }) => { await page.waitForLoadState("networkidle"); - await expect(page).toHaveScreenshot("home-page-customer01.png", { - mask: [page.getByTitle("Practice Software Testing - Toolshop")], - }); + await expect(page).toHaveScreenshot( + "home-page-customer01-chromium-win32.png", + { + mask: [page.getByTitle("Practice Software Testing - Toolshop")], + }, + ); }); + test("check customer 01 is signed in", async ({ page }) => { await expect(page.getByTestId("nav-sign-in")).not.toBeVisible(); await expect(page.getByTestId("nav-menu")).toContainText("Jane Doe"); diff --git a/tests/home.spec.ts-snapshots/home-page-customer01-chromium-win32-chromium-win32.png b/tests/home.spec.ts-snapshots/home-page-customer01-chromium-win32-chromium-win32.png new file mode 100644 index 0000000..364e2a9 Binary files /dev/null and b/tests/home.spec.ts-snapshots/home-page-customer01-chromium-win32-chromium-win32.png differ diff --git a/tests/home.spec.ts-snapshots/home-page-customer01-chromium-win32.png b/tests/home.spec.ts-snapshots/home-page-customer01-chromium-win32.png new file mode 100644 index 0000000..1caacd7 Binary files /dev/null and b/tests/home.spec.ts-snapshots/home-page-customer01-chromium-win32.png differ diff --git a/tests/home.spec.ts-snapshots/home-page-no-auth-chromium-win32-chromium-win32.png b/tests/home.spec.ts-snapshots/home-page-no-auth-chromium-win32-chromium-win32.png new file mode 100644 index 0000000..6264f84 Binary files /dev/null and b/tests/home.spec.ts-snapshots/home-page-no-auth-chromium-win32-chromium-win32.png differ diff --git a/tests/home.spec.ts-snapshots/home-page-no-auth-chromium-win32.png b/tests/home.spec.ts-snapshots/home-page-no-auth-chromium-win32.png new file mode 100644 index 0000000..7896b86 Binary files /dev/null and b/tests/home.spec.ts-snapshots/home-page-no-auth-chromium-win32.png differ diff --git a/tests/homepage/home.spec.ts-snapshots/home-page-customer01-auth-chromium-win32.png b/tests/homepage/home.spec.ts-snapshots/home-page-customer01-auth-chromium-win32.png new file mode 100644 index 0000000..bd93629 Binary files /dev/null and b/tests/homepage/home.spec.ts-snapshots/home-page-customer01-auth-chromium-win32.png differ diff --git a/tests/homepage/home.spec.ts-snapshots/home-page-customer01-chromium-darwin.png b/tests/homepage/home.spec.ts-snapshots/home-page-customer01-chromium-darwin.png deleted file mode 100644 index 053d2eb..0000000 Binary files a/tests/homepage/home.spec.ts-snapshots/home-page-customer01-chromium-darwin.png and /dev/null differ diff --git a/tests/homepage/home.spec.ts-snapshots/home-page-customer01-chromium-win32.png b/tests/homepage/home.spec.ts-snapshots/home-page-customer01-chromium-win32.png new file mode 100644 index 0000000..695a8e0 Binary files /dev/null and b/tests/homepage/home.spec.ts-snapshots/home-page-customer01-chromium-win32.png differ diff --git a/tests/homepage/home.spec.ts-snapshots/home-page-no-auth-chromium-darwin.png b/tests/homepage/home.spec.ts-snapshots/home-page-no-auth-chromium-darwin.png deleted file mode 100644 index 055d140..0000000 Binary files a/tests/homepage/home.spec.ts-snapshots/home-page-no-auth-chromium-darwin.png and /dev/null differ diff --git a/tests/homepage/home.spec.ts-snapshots/home-page-no-auth-chromium-win32.png b/tests/homepage/home.spec.ts-snapshots/home-page-no-auth-chromium-win32.png new file mode 100644 index 0000000..fe4d31f Binary files /dev/null and b/tests/homepage/home.spec.ts-snapshots/home-page-no-auth-chromium-win32.png differ diff --git a/tests/login.spec.ts b/tests/login.spec.ts new file mode 100644 index 0000000..78b69ba --- /dev/null +++ b/tests/login.spec.ts @@ -0,0 +1,15 @@ +import { test, expect } from '@playwright/test'; + +test('Login test', async ({ page }) => { + await page.goto('https://practicesoftwaretesting.com/'); + await page.locator('[data-test="language-select"]').click(); + await page.locator('[data-test="lang-en"]').click(); + await page.locator('[data-test="nav-sign-in"]').click(); +// await page.locator('[data-test="email"]').click(); + await page.locator('[data-test="email"]').fill('customer@practicesoftwaretesting.com'); +// await page.locator('[data-test="password"]').click(); + await page.locator('[data-test="password"]').fill('welcome01'); + await page.locator('[data-test="login-submit"]').click(); + await expect(page.locator('[data-test="nav-menu"]')).toContainText('Jane Doe'); + await expect(page.locator('[data-test="page-title"]')).toContainText('My account'); +}); \ No newline at end of file diff --git a/tests/test-3.spec.ts b/tests/test-3.spec.ts new file mode 100644 index 0000000..47c2f17 --- /dev/null +++ b/tests/test-3.spec.ts @@ -0,0 +1,9 @@ +import { test, expect } from '@playwright/test'; + +test('test', async ({ page }) => { + await page.goto('https://playwright.dev/'); + await page.getByRole('link', { name: 'Docs' }).click(); + await page.getByRole('link', { name: 'Retries' }).click(); + await page.getByRole('heading', { name: 'IntroductionDirect link to' }).click(); + await expect(page.locator('#failures')).toContainText('Failures'); +}); \ No newline at end of file diff --git a/tests/test-4.spec.ts b/tests/test-4.spec.ts new file mode 100644 index 0000000..f936baf --- /dev/null +++ b/tests/test-4.spec.ts @@ -0,0 +1,25 @@ +import { test, expect } from '@playwright/test'; + +test('test', async ({ page }) => { + await page.goto('https://playwright.dev/'); + await page.getByRole('link', { name: 'Ambassadors' }).click(); + await page.getByRole('img', { name: 'Butch Mayhew\'s avatar' }).click(); + await expect(page.getByRole('img', { name: 'Ben Fellows\'s avatar' })).toBeVisible(); + await page.getByText('Ben Fellows').click(); + await expect(page.locator('section')).toContainText('Butch Mayhew'); + await expect(page.locator('section')).toMatchAriaSnapshot(` + - listitem: + - img "Carlos Gauto's avatar" + - text: Carlos Gauto + - paragraph: Berazategui + - paragraph: Argentina + - paragraph: Spanish, English + - link "GitHub": + - /url: https://github.com/charlyautomatiza + - link "Twitter": + - /url: https://twitter.com/char_automatiza + - link "Website": + - /url: https://linktr.ee/charlyautomatiza + `); + await page.getByRole('listitem').filter({ hasText: 'Carlos' }).click(); +}); \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..6a5a200 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,34 @@ +{ + "compilerOptions": { + /* Sprache & Ziel */ + "target": "ESNext", + "lib": ["ESNext"], + "module": "commonjs", + "moduleResolution": "node", + + /* Node + Playwright */ + "types": ["node", "@playwright/test"], + + /* Komfort & Kompatibilität */ + "esModuleInterop": true, + "resolveJsonModule": true, + "allowJs": true, + + /* Qualität */ + "strict": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + + /* Output (optional, da Playwright meist direkt TS nutzt) */ + "outDir": "dist" + }, + + "include": [ + "tests", + "playwright.config.ts" + ], + + "exclude": [ + "node_modules" + ] +} \ No newline at end of file