[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M78GDMP7F3DA1PETT14D5002":3,"skill-same:01M78GDMP7F3DA1PETT14D5002":51},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":19,"linkOnly":20,"markdownContent":21,"markdownBody":22,"frontMatter":23,"refName":28,"commitSha":29,"skillDirectory":30,"forksCount":31,"repositoryHtmlUrl":32,"repositoryHomepageUrl":6,"ownerHtmlUrl":33,"ownerBlogUrl":34,"ownerDescription":35,"updatedAt":36,"install":37,"resources":50},"01M78GDMP7F3DA1PETT14D5002","pw-fixture-designer",null,"Designs custom Playwright test fixtures (auth\u002Fsession, seeded data, page objects) with correct setup\u002Fteardown and scope. Use when an SDET says \"create an auth fixture\", \"I need a logged-in page fixture\", \"set up test data fixtures\", \"share a page object via fixture\", or wants to stop repeating login in every test. Produces a typed fixtures module — a draft to wire in and run.","PramodDutta\u002Fskillmasterclass","PramodDutta","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F1409610?v=4","01M78G6P6117ADPGFVHSBGTRE6","Promode","01M78G6P6MJD4FF669N45VMYBE",4,"MIT","https:\u002F\u002Fgithub.com\u002FPramodDutta\u002Fskillmasterclass\u002Fblob\u002Fmain\u002Fskillmasterclass\u002Fskills\u002Fframework-packs\u002Fplaywright-pack\u002Fpw-fixture-designer\u002FSKILL.md",[],[],"2026-11-15 14:19:17",false,"---\nname: pw-fixture-designer\ndescription: >-\n  Designs custom Playwright test fixtures (auth\u002Fsession, seeded data, page\n  objects) with correct setup\u002Fteardown and scope. Use when an SDET says \"create\n  an auth fixture\", \"I need a logged-in page fixture\", \"set up test data\n  fixtures\", \"share a page object via fixture\", or wants to stop repeating login\n  in every test. Produces a typed fixtures module — a draft to wire in and run.\nlicense: MIT\nmetadata:\n  author: TheTestingAcademy\n  pack: playwright\n  version: 1.0.0\n---\n\n# PW Fixture Designer\n\nYou design **fixtures the engineer must wire into the config and run** — never a\nguaranteed-working setup. You pick the right scope, and always tear down cleanly.\n\n## When to use\n- Login\u002Fsetup is duplicated across specs and should become a fixture.\n- Tests need seeded data, a pre-authenticated context, or shared page objects.\n- Someone says \"design\u002Fcreate a fixture for X\".\n\n## Workflow\n1. **Classify each fixture's scope.** Per-`test` for isolation (fresh data, a page\n   object); `worker`-scoped for expensive shared setup (a storage-state login once\n   per worker). Default to test scope unless reuse is safe and read-only.\n2. **Prefer `storageState` for auth** — authenticate once (global setup or a worker\n   fixture), persist state, and inject it, rather than logging in through the UI in\n   every test.\n3. **Split setup from teardown** with the `use()` pattern: arrange before `await\n   use(value)`, clean up after. Every created resource (DB row, temp user) gets\n   deleted or reset.\n4. **Type the fixtures** via `test.extend\u003CMyFixtures>()` so consumers get IntelliSense.\n5. **List preconditions** — env vars, API endpoints, seed scripts the engineer must\n   supply — and mark anything you assumed.\n\n## Output shape\n```typescript\nimport { test as base, expect } from '@playwright\u002Ftest';\nimport { LoginPage } from '..\u002Fpages\u002FLoginPage';\n\ntype Fixtures = { loginPage: LoginPage; seededOrderId: string };\n\nexport const test = base.extend\u003CFixtures>({\n  loginPage: async ({ page }, use) => {\n    await use(new LoginPage(page));            \u002F\u002F test-scoped, fresh per test\n  },\n  seededOrderId: async ({ request }, use) => {\n    const res = await request.post('\u002Fapi\u002Forders', { data: { sku: 'ABC' } });\n    const { id } = await res.json();\n    await use(id);                              \u002F\u002F arrange\n    await request.delete(`\u002Fapi\u002Forders\u002F${id}`);  \u002F\u002F teardown — always clean up\n  },\n});\nexport { expect };\n```\n\n## Guardrails\n- This is a **draft the engineer must wire into `playwright.config.ts` and run** —\n  never assume an API route, seed script, or env var exists; list what's required.\n- Never fabricate endpoints or credentials; flag them as inputs the team provides.\n- Always tear down created resources — a fixture that leaks state causes flakiness.\n- Do not put auth in a UI-login-per-test; use `storageState`. No `waitForTimeout`.\n","# PW Fixture Designer\n\nYou design **fixtures the engineer must wire into the config and run** — never a\nguaranteed-working setup. You pick the right scope, and always tear down cleanly.\n\n## When to use\n- Login\u002Fsetup is duplicated across specs and should become a fixture.\n- Tests need seeded data, a pre-authenticated context, or shared page objects.\n- Someone says \"design\u002Fcreate a fixture for X\".\n\n## Workflow\n1. **Classify each fixture's scope.** Per-`test` for isolation (fresh data, a page\n   object); `worker`-scoped for expensive shared setup (a storage-state login once\n   per worker). Default to test scope unless reuse is safe and read-only.\n2. **Prefer `storageState` for auth** — authenticate once (global setup or a worker\n   fixture), persist state, and inject it, rather than logging in through the UI in\n   every test.\n3. **Split setup from teardown** with the `use()` pattern: arrange before `await\n   use(value)`, clean up after. Every created resource (DB row, temp user) gets\n   deleted or reset.\n4. **Type the fixtures** via `test.extend\u003CMyFixtures>()` so consumers get IntelliSense.\n5. **List preconditions** — env vars, API endpoints, seed scripts the engineer must\n   supply — and mark anything you assumed.\n\n## Output shape\n```typescript\nimport { test as base, expect } from '@playwright\u002Ftest';\nimport { LoginPage } from '..\u002Fpages\u002FLoginPage';\n\ntype Fixtures = { loginPage: LoginPage; seededOrderId: string };\n\nexport const test = base.extend\u003CFixtures>({\n  loginPage: async ({ page }, use) => {\n    await use(new LoginPage(page));            \u002F\u002F test-scoped, fresh per test\n  },\n  seededOrderId: async ({ request }, use) => {\n    const res = await request.post('\u002Fapi\u002Forders', { data: { sku: 'ABC' } });\n    const { id } = await res.json();\n    await use(id);                              \u002F\u002F arrange\n    await request.delete(`\u002Fapi\u002Forders\u002F${id}`);  \u002F\u002F teardown — always clean up\n  },\n});\nexport { expect };\n```\n\n## Guardrails\n- This is a **draft the engineer must wire into `playwright.config.ts` and run** —\n  never assume an API route, seed script, or env var exists; list what's required.\n- Never fabricate endpoints or credentials; flag them as inputs the team provides.\n- Always tear down created resources — a fixture that leaks state causes flakiness.\n- Do not put auth in a UI-login-per-test; use `storageState`. No `waitForTimeout`.\n",{"name":5,"license":15,"metadata":24,"description":7},{"pack":25,"author":26,"version":27},"playwright","TheTestingAcademy","1.0.0","main","d8c5108d5ae524b10a5a1c695cdee8cfc018be7b","skillmasterclass\u002Fskills\u002Fframework-packs\u002Fplaywright-pack\u002Fpw-fixture-designer",8,"https:\u002F\u002Fgithub.com\u002FPramodDutta\u002Fskillmasterclass","https:\u002F\u002Fgithub.com\u002FPramodDutta","https:\u002F\u002Fscrolltest.com","Blogger at http:\u002F\u002Fscrolltest.com , Youtuber - https:\u002F\u002Fwww.youtube.com\u002Fc\u002FItsTechMode ","2026-07-15 00:36:00",{"source":8,"skillName":5,"commands":38,"prompt":48,"zipAvailable":49},[39,42,45],{"tool":40,"command":41},"npx","npx skills add PramodDutta\u002Fskillmasterclass --skill pw-fixture-designer",{"tool":43,"command":44},"bunx","bunx skills add PramodDutta\u002Fskillmasterclass --skill pw-fixture-designer",{"tool":46,"command":47},"pnpm","pnpm dlx skills add PramodDutta\u002Fskillmasterclass --skill pw-fixture-designer","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FPramodDutta\u002Fskillmasterclass\u002Fblob\u002Fmain\u002Fskillmasterclass\u002Fskills\u002Fframework-packs\u002Fplaywright-pack\u002Fpw-fixture-designer\u002FSKILL.md",true,[],[52,59,66,73,80,87],{"skillNo":53,"name":54,"nameZh":6,"description":55,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":56,"categories":57,"keywords":58,"publishedAt":19},"01M78GFBQAXS855299M20HQGYV","se-wait-fixer","Scans Selenium Java code for Thread.sleep and for implicit+explicit wait mixing, then replaces them with WebDriverWait\u002FExpectedConditions or FluentWait to fix synchronization. Use when an SDET says \"remove Thread.sleep from my tests\", \"fix the flaky waits\", \"my implicit and explicit waits conflict\", or pastes code full of hard sleeps. Produces refactors the engineer must run and confirm.","https:\u002F\u002Fgithub.com\u002FPramodDutta\u002Fskillmasterclass\u002Fblob\u002Fmain\u002Fskillmasterclass\u002Fskills\u002Fframework-packs\u002Fselenium-pack\u002Fse-wait-fixer\u002FSKILL.md",[],[],{"skillNo":60,"name":61,"nameZh":6,"description":62,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":63,"categories":64,"keywords":65,"publishedAt":19},"01M78GF8WPMW41VPA7RS4SHK80","se-test-generator","Generates a runnable Selenium 4 + TestNG test in Java from a plain-language scenario, using explicit waits and stable locators. Use when an SDET says \"write a Selenium test for login\", \"generate a TestNG test for the checkout flow\", \"automate this scenario in Selenium\", or pastes Gherkin\u002Fsteps and wants Java WebDriver code. Produces a draft test the engineer must review and run.","https:\u002F\u002Fgithub.com\u002FPramodDutta\u002Fskillmasterclass\u002Fblob\u002Fmain\u002Fskillmasterclass\u002Fskills\u002Fframework-packs\u002Fselenium-pack\u002Fse-test-generator\u002FSKILL.md",[],[],{"skillNo":67,"name":68,"nameZh":6,"description":69,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":70,"categories":71,"keywords":72,"publishedAt":19},"01M78GF5X9HP46NT4B3Q993EXP","se-report-integrator","Integrates reporting (Allure or ExtentReports) into a Selenium + TestNG suite with listeners, screenshot-on-failure, and step logging. Use when an SDET says \"add Allure to my tests\", \"set up ExtentReports\", \"capture a screenshot on failure\", \"add a TestNG listener for reporting\", or wants readable run reports. Produces listener and config code the engineer must run to generate a report.","https:\u002F\u002Fgithub.com\u002FPramodDutta\u002Fskillmasterclass\u002Fblob\u002Fmain\u002Fskillmasterclass\u002Fskills\u002Fframework-packs\u002Fselenium-pack\u002Fse-report-integrator\u002FSKILL.md",[],[],{"skillNo":74,"name":75,"nameZh":6,"description":76,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":77,"categories":78,"keywords":79,"publishedAt":19},"01M78GF31BMJCFXTF7CKY8TGV0","se-page-object-builder","Builds a Page Object Model class in Java (PageFactory @FindBy or explicit locators) with action methods and a WebDriverWait for a given page. Use when an SDET says \"create a page object for the login page\", \"build a POM class\", \"refactor these locators into a page object\", or pastes a page's fields and wants a reusable POM. Produces a draft class the engineer must review and run.","https:\u002F\u002Fgithub.com\u002FPramodDutta\u002Fskillmasterclass\u002Fblob\u002Fmain\u002Fskillmasterclass\u002Fskills\u002Fframework-packs\u002Fselenium-pack\u002Fse-page-object-builder\u002FSKILL.md",[],[],{"skillNo":81,"name":82,"nameZh":6,"description":83,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":84,"categories":85,"keywords":86,"publishedAt":19},"01M78GEYWZPDFSZPFZ2VYV7GRD","se-locator-strategist","Recommends and repairs Selenium locator strategy — replaces brittle absolute XPath with By.id, By.cssSelector, or Selenium 4 relative locators, and explains the trade-offs. Use when an SDET says \"this XPath keeps breaking\", \"make this locator more stable\", \"why is my locator flaky\", \"convert this XPath to CSS\", or pastes selectors to harden. Produces proposals the engineer must verify in the DOM.","https:\u002F\u002Fgithub.com\u002FPramodDutta\u002Fskillmasterclass\u002Fblob\u002Fmain\u002Fskillmasterclass\u002Fskills\u002Fframework-packs\u002Fselenium-pack\u002Fse-locator-strategist\u002FSKILL.md",[],[],{"skillNo":88,"name":89,"nameZh":6,"description":90,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":91,"categories":92,"keywords":93,"publishedAt":19},"01M78GEV918RERKZ0ZDY5RRF57","se-grid-configurator","Configures Selenium Grid 4 (hub-and-node or standalone, including Docker) and wires RemoteWebDriver for parallel and distributed runs. Use when an SDET says \"set up Selenium Grid\", \"run my tests on a remote grid\", \"dockerize Selenium Grid 4\", \"point my tests at RemoteWebDriver\", or wants parallel execution across nodes. Produces config and code the engineer must run and validate in their environment.","https:\u002F\u002Fgithub.com\u002FPramodDutta\u002Fskillmasterclass\u002Fblob\u002Fmain\u002Fskillmasterclass\u002Fskills\u002Fframework-packs\u002Fselenium-pack\u002Fse-grid-configurator\u002FSKILL.md",[],[]]