{"id":31096626,"url":"https://github.com/recep-d/playwright_bdd_ai_fexse_l","last_synced_at":"2026-05-17T02:04:03.591Z","repository":{"id":313778221,"uuid":"1052220610","full_name":"Recep-D/PLAYWRIGHT_BDD_AI_FEXSE_L","owner":"Recep-D","description":"Using Cursor AI, I developed a Playwright-Java-BDD-Cucumber framework from the ground up, with zero manual coding.","archived":false,"fork":false,"pushed_at":"2025-09-12T07:08:56.000Z","size":25572,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-09-16T19:38:59.998Z","etag":null,"topics":["bdd-framework","cucumber","cursor-ai","playwright-java"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Recep-D.png","metadata":{"files":{"readme":"ReadMe.txt","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-07T16:46:52.000Z","updated_at":"2025-09-12T07:09:00.000Z","dependencies_parsed_at":null,"dependency_job_id":"f8d0841d-d4b5-4de4-8940-f2aee1964319","html_url":"https://github.com/Recep-D/PLAYWRIGHT_BDD_AI_FEXSE_L","commit_stats":null,"previous_names":["recep-d/playwright_bdd_ai_fexse_l"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Recep-D/PLAYWRIGHT_BDD_AI_FEXSE_L","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Recep-D%2FPLAYWRIGHT_BDD_AI_FEXSE_L","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Recep-D%2FPLAYWRIGHT_BDD_AI_FEXSE_L/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Recep-D%2FPLAYWRIGHT_BDD_AI_FEXSE_L/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Recep-D%2FPLAYWRIGHT_BDD_AI_FEXSE_L/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Recep-D","download_url":"https://codeload.github.com/Recep-D/PLAYWRIGHT_BDD_AI_FEXSE_L/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Recep-D%2FPLAYWRIGHT_BDD_AI_FEXSE_L/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":281660574,"owners_count":26539756,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-29T02:00:06.901Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bdd-framework","cucumber","cursor-ai","playwright-java"],"created_at":"2025-09-16T18:46:57.790Z","updated_at":"2025-10-29T17:10:52.786Z","avatar_url":"https://github.com/Recep-D.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"description:\nglobs:\nalwaysApply: true\n---\n# This is a robust and maintainable BDD automation project built with Playwright, Java, and Cucumber.\n# Core principles: Code simplicity, unique locators, and smart waiting mechanisms.\n\n# --- GENERAL RULES ---\n# 1. AUTO-WAITING: Use Playwright’s built-in auto-waiting mechanisms.\n# Methods like locator.click(), locator.fill(), assertThat(locator).isVisible() already wait for the element to be ready.\n# NEVER use Thread.sleep(). Only in very rare cases (e.g., waiting for an animation to finish), use page.waitForTimeout().\n\n# 2. UNIQUE LOCATOR: Locator priority order should be:\n#    - page.getByTestId(\"...\") or [data-testid=\"...\"] (Best choice)\n#    - page.getByRole(...)\n#    - page.getById(\"#...\")\n#    - Non-dynamic, stable CSS classes or XPath (Last resort)\n\n# 3. CODE SIMPLICITY: Avoid unnecessary code.\n# Methods must do only one thing, and their names should reflect that purpose.\n# Instead of chaining complex commands, create helper methods.\n\n# --- FILE RULES ---\n\n# Feature Files: Clear, business-focused scenarios.\nsrc/test/resources/features//*.feature -\u003e\nA BDD test scenario. Contains user-focused steps, free of technical details.\n\n# Page Object Classes: Encapsulation of a web page or component.\nsrc/test/java/com/yourcompany/pages/*.java -\u003e\nThis is a Page Object class.\n- Contains only private final Page page and private final Locator fields.\n- Constructor accepts a Page object and initializes locators.\n- Public methods for page actions (navigate, click, fill). These leverage Playwright’s auto-waiting.\n- Public methods for verifications. These use assertThat(locator)... with reliable assertions and internal waiting.\n\n# Step Definition Classes: Bridge between Gherkin and Java.\nsrc/test/java/com/yourcompany/stepdefs/*.java -\u003e\nThis is a Cucumber Step Definition class.\n- PURPOSE: Delegate Gherkin steps to corresponding Page Object methods.\n- MUST NOT call Playwright API directly like page.click(). All interactions must go through Page classes.\n- Constructor obtains the current Page instance via PlaywrightManager.getPage() and initializes the relevant Page Object.\n\n# Core Classes: Framework infrastructure.\nsrc/test/java/com/yourcompany/core/*.java -\u003e\nThis contains framework infrastructure code.\n- PlaywrightManager: Manages Playwright lifecycle with ThreadLocal, ensuring thread safety for parallel execution.\n- Hooks: Uses @Before and @After to start and close the browser cleanly for each scenario.\n\nAllure + Playwright Trace Reporting\n-----------------------------------\n\nRun tests:\n- mvn test\n\nServe Allure report (auto-opens in browser):\n- mvn allure:serve\n\nAlternatively, generate static report and open:\n- mvn allure:report\n- open target/site/allure-maven-plugin/index.html\n\n# Test Runner: Entry point for running tests.\nsrc/test/java/com/yourcompany/runners/*.java -\u003e\nThis is a JUnit/Cucumber test runner. Contains only @CucumberOptions for configuration.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frecep-d%2Fplaywright_bdd_ai_fexse_l","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frecep-d%2Fplaywright_bdd_ai_fexse_l","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frecep-d%2Fplaywright_bdd_ai_fexse_l/lists"}