{"id":14978843,"url":"https://github.com/wasiqb/coteafs-selenium","last_synced_at":"2025-10-28T13:31:21.770Z","repository":{"id":35109560,"uuid":"131021326","full_name":"WasiqB/coteafs-selenium","owner":"WasiqB","description":":computer: Selenium WebDriver wrapper framework in Java for clean and maintainable tests.","archived":false,"fork":false,"pushed_at":"2023-07-16T20:42:57.000Z","size":23540,"stargazers_count":78,"open_issues_count":8,"forks_count":35,"subscribers_count":14,"default_branch":"master","last_synced_at":"2024-09-29T02:05:40.528Z","etag":null,"topics":["automation-framework","automation-test","cross-browser","hacktoberfest","java","selenium","selenium-webdriver","software-testing","test-automation","testing-tools"],"latest_commit_sha":null,"homepage":"https://wasiqb.github.io/projects/selenium/","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/WasiqB.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"patreon":"wasiqb"}},"created_at":"2018-04-25T14:45:17.000Z","updated_at":"2024-08-09T09:09:18.000Z","dependencies_parsed_at":"2024-09-24T01:30:54.593Z","dependency_job_id":"1671311b-dc90-473d-96e5-eaf24a5e5ce4","html_url":"https://github.com/WasiqB/coteafs-selenium","commit_stats":{"total_commits":128,"total_committers":6,"mean_commits":"21.333333333333332","dds":0.15625,"last_synced_commit":"1d84a4f9d5a1a6d85560297c1b488cb04c53c3af"},"previous_names":[],"tags_count":12,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WasiqB%2Fcoteafs-selenium","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WasiqB%2Fcoteafs-selenium/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WasiqB%2Fcoteafs-selenium/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WasiqB%2Fcoteafs-selenium/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/WasiqB","download_url":"https://codeload.github.com/WasiqB/coteafs-selenium/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":219859520,"owners_count":16556036,"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","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":["automation-framework","automation-test","cross-browser","hacktoberfest","java","selenium","selenium-webdriver","software-testing","test-automation","testing-tools"],"created_at":"2024-09-24T13:58:30.876Z","updated_at":"2025-10-28T13:31:21.349Z","avatar_url":"https://github.com/WasiqB.png","language":"Java","funding_links":["https://patreon.com/wasiqb"],"categories":[],"sub_categories":[],"readme":"# 🚨🚨 This project is no longer maintained!\n## 📢 I have created new project [Boyka-Framework](https://github.com/BoykaFramework/boyka-framework) which has all the functionality this project provides and many more features.\n## PLEASE START USING [BOYKA-FRAMEWORK](https://github.com/BoykaFramework/boyka-framework) INSTEAD!!!\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"\"\u003e\n    \u003cimg src=\"assets/coteafs-selenium-logo.png\" width=300 padding=10 /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003eSelenium WebDriver wrapper Framework in Java, which supports Automation of most of the web browsers.\u003c/h1\u003e\n\n\u003cdiv align=\"center\"\u003e\n\n[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/WasiqB/coteafs-selenium)\n\n[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)][home]\n[![Discord](https://img.shields.io/discord/874329599285268561?label=Discord\u0026logo=Discord\u0026style=for-the-badge)](https://discord.gg/DWVM398zsC)\n[![GitHub Actions workflow](https://github.com/WasiqB/coteafs-selenium/actions/workflows/test.yml/badge.svg)](https://github.com/WasiqB/coteafs-selenium/actions/workflows/test.yml)\n![CodeQL](https://github.com/WasiqB/coteafs-selenium/workflows/CodeQL/badge.svg)\n[![Test Coverage](https://sonarcloud.io/api/project_badges/measure?project=com.github.wasiqb.coteafs%3Aselenium\u0026metric=coverage)][coverage]\n[![Quality Gate](https://sonarcloud.io/api/project_badges/measure?project=com.github.wasiqb.coteafs%3Aselenium\u0026metric=alert_status)](https://sonarcloud.io/dashboard?id=com.github.wasiqb.coteafs%3Aselenium)\n[![Maintainability](https://sonarcloud.io/api/project_badges/measure?project=com.github.wasiqb.coteafs%3Aselenium\u0026metric=sqale_rating)](https://sonarcloud.io/component_measures?id=com.github.wasiqb.coteafs%3Aselenium\u0026metric=Maintainability)\n[![Reliability](https://sonarcloud.io/api/project_badges/measure?project=com.github.wasiqb.coteafs%3Aselenium\u0026metric=reliability_rating)](https://sonarcloud.io/component_measures?id=com.github.wasiqb.coteafs%3Aselenium\u0026metric=Reliability)\n[![Security](https://sonarcloud.io/api/project_badges/measure?project=com.github.wasiqb.coteafs%3Aselenium\u0026metric=security_rating)](https://sonarcloud.io/component_measures?id=com.github.wasiqb.coteafs%3Aselenium\u0026metric=Security)\n[![Vulnerability](https://sonarcloud.io/api/project_badges/measure?project=com.github.wasiqb.coteafs%3Aselenium\u0026metric=vulnerabilities)](https://sonarcloud.io/component_measures?id=com.github.wasiqb.coteafs%3Aselenium\u0026metric=new_vulnerabilities)\n[![Duplicate Code](https://sonarcloud.io/api/project_badges/measure?project=com.github.wasiqb.coteafs%3Aselenium\u0026metric=duplicated_lines_density)](https://sonarcloud.io/component_measures?id=com.github.wasiqb.coteafs%3Aselenium\u0026metric=Duplications)\n[![Maven Central](https://img.shields.io/maven-central/v/com.github.wasiqb.coteafs/selenium.svg)][maven]\n[![Github Releases](https://img.shields.io/github/downloads/WasiqB/coteafs-selenium/total.svg)](https://github.com/WasiqB/coteafs-selenium/releases)\n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\n\n\u003c/div\u003e\n\n\u003e **Detailed documentation on main project site is under development.**\n\n## :question: What is this Framework about?\n\nThis is a Selenium WebDriver wrapper Framework which enables robust, maintainable and easy to write test scripts. _**It\nsupports the latest stable Selenium WebDriver 4.1.1**_.\n\n## :bulb: What features do this framework offer?\n\nSome key features which this framework offers are as follows:\n\n:point_right: Latest stable Selenium WebDriver 4.1.1\n\n:point_right: Minimal learning curve.\n\n:point_right: Supports Chrome, Safari, Firefox, IE and Edge\n\n:point_right: Supports execution on BrowserStack, SauceLabs and Selenium Grid.\n\n:point_right: On-demand highlighting of Elements.\n\n:point_right: On-demand video recording and screenshots.\n\n:point_right: On-demand delay of test execution by allowing predefined delays.\n\n:point_right: On-demand headless mode execution for Chrome and Firefox.\n\n:point_right: Inline verification of elements.\n\n:point_right: Supports logging of events to Log file.\n\n:point_right: Supports all major test frameworks like TestNG, JUnit, Cucumber, etc.\n\n:point_right: Parallel execution of tests on different browsers.\n\n## :pushpin: Usage?\n\nYou can use the following dependency into your `pom.xml` to use this library.\n\n```xml\n\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.github.wasiqb.coteafs\u003c/groupId\u003e\n    \u003cartifactId\u003eselenium\u003c/artifactId\u003e\n    \u003cversion\u003e4.2.0\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\nOr you can add the following into your `build.gradle` file.\n\n ```gradle\n compile \"com.github.wasiqb.coteafs:selenium:4.2.0\"\n ```\n\n## :smile: How it is easy to write Tests with this Framework?\n\nGetting hands-on with this framework requires minimal time. You can start writing tests in following 4 simple steps.\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003e1. :wrench: Create Config file\u003c/strong\u003e\u003c/summary\u003e\n  \u003cbr/\u003e\n\nConfig file is by default searched in `src/test/resources` folder. The name of the config file is by default considered\nas `selenium-config.yaml`.\n\n### Sample Config file\n\n`src/test/resources/selenium-config.yaml`\n\n```yaml\nbrowsers:\n  local_browser:\n    browser: CHROME           # CHROME, SAFARI, EDGE, FIREFOX, IE.\n    url: http://demo.guru99.com/V4/   # Application URL.\n    headless_mode: false      # true, for headless, else false.\n    driver: # Driver manager specific settings.\n      force_cache: true       # true, false (default). Forces to use cached driver.\n      force_download: true    # true, false (default). Forces to download driver each time.\n      path: /drivers/         # Local path where drivers will searched for.\n      version: 2.14           # Version of driver.\n      exe_url: https://driver/download/url    # Driver download URL.\n    remote: # Remote settings block (required when Browser is Remote).\n      user_id: ${CLOUD_USER}  # Cloud User. Not required for Grid.\n      password: ${CLOUD_KEY}  # Cloud Key. Not required for Grid.\n      protocol: HTTPS         # HTTP, HTTPS. Default HTTP.\n      url: hub-cloud.browserstack.com   # Remote hub URL\n      source: BROWSERSTACK    # BROWSERSTACK, GRID, SAUCELABS\n      capabilities: # Remote capabilities.\n        browser: Chrome\n        browser_version: 75.0\n        os: Windows\n        os_version: 10\n        resolution: 1024x768\n        name: Any Test name\n      cloud_capabilities: # Cloud specific capabilities.\n        seleniumVersion: 3.141.59\n        name: Sauce-[Java] Sample Test\n    params: # test specific map.\n      user: \u003ctest-specific-user\u003e\n      password: \u003ctest-specific-password\u003e\n    playback: # Playback settings.\n      screen_state: NORMAL  # FULL_SCREEN, MAXIMIZED, NORMAL\n      highlight: true       # true, to highlight elements, else false.\n      screen_resolution: # Screen resolution settings.\n        width: 1280     # Screen width.\n        height: 768     # Screen height.\n      recording:\n        enable: true    # true, to enable recording, else false.\n        path: ./video   # Video recording path.\n        prefix: VID     # Video file prefix.\n      delays: # On demand delay settings.\n        implicit: 60          # Implicit waits in seconds.\n        explicit: 60          # Explicit waits in seconds.\n        after_frame_switch: 500   # Delay after iFrame switch in milliseconds.\n        after_window_switch: 500  # Delay after Window switch in milliseconds.\n        before_key_press: 0   # delay before key press in milliseconds.\n        after_key_press: 0    # delay after key press in milliseconds.\n        before_mouse_move: 0  # delay before mouse move in milliseconds.\n        after_mouse_move: 0   # delay after mouse move in milliseconds.\n        before_click: 0       # delay before mouse click in milliseconds.\n        after_click: 0        # delay after mouse click in milliseconds.\n        page_load: 60         # page load timeout in seconds.\n        script_load: 60       # script load timeout in seconds.\n        highlight: 500        # highlight delay in milliseconds.\n      screenshot: # Screenshot settings.\n        path: ~/screenshots     # default screenshot path.\n        prefix: SCR             # screenshot file prefix.\n        extension: jpeg         # screenshot file extension.\n        capture_on_error: false # screenshot on error.\n        capture_all: true       # always capture screenshot on each event, when true.\n```\n\n\u003e **Note:** If you find any config not working, feel free to raise [an issue][].\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003e2. :page_facing_up: Create Page object class\u003c/strong\u003e\u003c/summary\u003e\n  \u003cbr/\u003e\n\nCheckout the following examples which will guide you in writing tests. Let's have a look at the Login page of Guru99\ndemo site.\n\n\u003e Remember, `BrowserPage` class needs to be extended for every page and also a flavour of inheritance can be added as per requirement.\n\n### Sample Page object\n\n```java\npackage com.github.wasiqb.coteafs.selenium.pages;\n\nimport com.github.wasiqb.coteafs.selenium.core.element.ITextBoxActions;\nimport org.openqa.selenium.By;\n\nimport com.github.wasiqb.coteafs.selenium.core.BrowserPage;\nimport com.github.wasiqb.coteafs.selenium.core.element.IMouseActions;\n\npublic class LoginPage extends BrowserPage {\n    public ITextBoxActions password () {\n        return form ().find (By.name (\"password\"), \"Password\");\n    }\n\n    public IMouseActions signIn () {\n        return form ().find (By.name (\"btnLogin\"), \"Login\");\n    }\n\n    public ITextBoxActions userId () {\n        return form ().find (By.name (\"uid\"), \"User ID\");\n    }\n\n    private IMouseActions form () {\n        return onClickable (By.name (\"frmLogin\"), \"Form\");\n    }\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003e3. :runner: Create Page Action class\u003c/strong\u003e\u003c/summary\u003e\n  \u003cbr/\u003e\n\nThis is a new concept, here you can define actions specific to each page. This approach abstracts out the page action\nflows and helps in modularising the classes. So whenever the flow of the page changes, you need to change only at single\nplace.\n\n\u003e For every page action you need to extend `AbstractPageAction`. Since it is a generic class, you need to pass the action class name as it's generic type.\n\u003e Also, `perform` method needs to be implemented for every action class.\n\n### Sample page action\n\n```java\npackage com.github.wasiqb.coteafs.selenium.pages.action;\n\nimport static java.text.MessageFormat.format;\n\nimport com.github.wasiqb.coteafs.selenium.core.page.AbstractPageAction;\nimport com.github.wasiqb.coteafs.selenium.pages.LoginPage;\nimport com.github.wasiqb.coteafs.selenium.pages.MainPage;\n\npublic class LoginPageAction extends AbstractPageAction\u003cLoginPageAction\u003e {\n    public static final String PASS    = \"password\";\n    public static final String USER_ID = \"userId\";\n\n    @Override\n    public void perform () {\n        final LoginPage login = new LoginPage ();\n        login.userId ()\n            .enterText (value (USER_ID));\n        login.password ()\n            .enterText (value (PASS));\n        login.signIn ()\n            .click ();\n\n        login.nextPage (MainPage.class)\n            .managerIdBanner ()\n            .verifyText ()\n            .endsWith (format (\"Manger Id : {0}\", value (USER_ID).toString ()));\n    }\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003e4. :white_check_mark: Write Test class\u003c/strong\u003e\u003c/summary\u003e\n  \u003cbr/\u003e\n\nTest which are written using this framework are slightly different than usual. In the tests, Page actions is used\ninstead of page objects. This can be demonstrated as shown below:\n\n### Sample Test\n\n\u003e Every test class extends `BrowserTest` class.\n\n```java\npackage com.github.wasiqb.coteafs.selenium;\n\nimport static com.github.wasiqb.coteafs.selenium.config.ConfigUtil.appSetting;\nimport static com.github.wasiqb.coteafs.selenium.pages.action.LoginPageAction.PASS;\nimport static com.github.wasiqb.coteafs.selenium.pages.action.LoginPageAction.USER_ID;\n\nimport org.testng.annotations.BeforeClass;\nimport org.testng.annotations.Test;\n\nimport com.github.wasiqb.coteafs.selenium.core.BrowserTest;\nimport com.github.wasiqb.coteafs.selenium.pages.MainPage;\nimport com.github.wasiqb.coteafs.selenium.pages.action.LoginPageAction;\n\npublic class SeleniumTest extends BrowserTest {\n    @BeforeClass\n    public void setupMethod () {\n        final MainPage main = new MainPage ();\n        main.onDriver ()\n            .navigateTo (appSetting ().getUrl ());\n    }\n\n    @Test\n    public void testSignIn () {\n        final LoginPageAction login = new LoginPageAction ();\n        login.addInputValue (USER_ID, appSetting ().getParams ()\n                .get (\"user\"))\n            .addInputValue (PASS, appSetting ().getParams ()\n                .get (\"password\"))\n            .perform ();\n    }\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003e5. :microscope: Create TestNG XML file\u003c/strong\u003e\u003c/summary\u003e\n  \u003cbr/\u003e\n\n### Basic synchronous run\n\nFollowing is a simple `testng.yaml` file for running the tests on Chrome browser **locally, on grid and on\nBrowserStack** in sync.\n\n```yaml\nname: Local Suite\ntests:\n  - name: Test Local\n    preserveOrder: true\n    parameters: {\n      test.browser: local\n    }\n    classes:\n      - name: com.github.wasiqb.coteafs.selenium.SeleniumTest\n        includedMethods:\n          - testLogin\n          - testCheckboxes\n          - testDropDownBox\n  - name: Test Grid\n    parameters: {\n      test.browser: grid\n    }\n    classes:\n      - name: com.github.wasiqb.coteafs.selenium.SeleniumTest\n        includedMethods:\n          - testLogin\n  - name: Test BrowserStack Chrome\n      preserveOrder: true\n      parameters: {\n        test.browser: bs_chrome\n      }\n      classes:\n        - name: com.github.wasiqb.coteafs.selenium.SeleniumTest\n          includedMethods:\n            - testLogin\n            - testCheckboxes\n            - testDropDownBox\n```\n\n- `test.browser`: Here, the browser config key is used to tell the framework which browser config needs to be executed.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003e6. :cyclone: Running TestNG XML file\u003c/strong\u003e\u003c/summary\u003e\n  \u003cbr/\u003e\n\n### Running on local browsers or on Selenium Grid\n\nRun the tests using following command,\n\n```bash\n$ mvn clean install -Dsuite-xml=testng.yaml\n```\n\n### Running on BrowserStack or any other cloud solution\n\nRun the tests using following command,\n\n```bash\n$ mvn clean install -Dsuite-xml=testng.yaml -DCLOUD_USER=\u003ccloud_user\u003e -DCLOUD_KEY=\u003ccloud_key\u003e\n```\n\n\u003c/details\u003e\n\n## :question: Need Assistance?\n\n- You can join and chat with us on our [Discord][discord] server.\n- Directly chat with me on my [site][] and I'll revert to you as soon as possible.\n- Discuss your queries by writing to me @ [wasbhamla2005@gmail.com][mail]\n- If you find any issue which is bottleneck for you, [search the issue tracker][tracker] to see if it is already raised.\n- If not raised, then you can create a [new issue][issue] with required details as mentioned in the issue template.\n\n## :star2: What you do if you like the project?\n\n- Spread the word with your network.\n- **Star** the project to make the project popular.\n- Stay updated with the project progress by **Watching** it.\n- **Contribute** to fix open issues, documentations or add new features. To know more, see our [contributing][] page.\n- I would be delighted if you can **Sponsor** this project and provide your support to open source development by\n  clicking on the Sponsor button on the top of this repository.\n\n## :gift_heart: Thanks for the support.\n\n\u003cp align=\"left\"\u003e\n  \u003ca href=\"http://browserstack.com\"\u003e\n    \u003cimg src=\"assets/browserstack-logo.png\" width=300 /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\nFor allowing us to run our unit tests on different cloud platforms.\n\n## :white_check_mark: Contributors\n\n\u003cdiv\u003e\n  \u003cul\u003e\n    \u003cli\u003e\n      \u003ca href=\"https://github.com/WasiqB\"\u003e\n        \u003cimg alt=\"Wasiq Bhamla: Framework developer and maintainer.\" src=\"https://github.com/WasiqB.png\" width=100 height=100 /\u003e\n      \u003c/a\u003e\n    \u003c/li\u003e\n    \u003cli\u003e\n      \u003ca href=\"https://github.com/mfaisalkhatri\"\u003e\n        \u003cimg alt=\"Mohammad Faisal Khatri: Framework Tester.\" src=\"https://github.com/mfaisalkhatri.png\" width=100 height=100 /\u003e\n      \u003c/a\u003e\n    \u003c/li\u003e\n    \u003cli\u003e\n      \u003ca href=\"https://github.com/jayeshd7\"\u003e\n        \u003cimg alt=\"Jayesh Dalal: Framework Contributor.\" src=\"https://github.com/jayeshd7.png\" width=100 height=100 /\u003e\n      \u003c/a\u003e\n    \u003c/li\u003e\n  \u003c/ul\u003e\n\u003c/div\u003e\n\n## :ticket: Versioning ideology\n\n\u003cp align=\"left\"\u003e\n  \u003ca href=\"http://semver.org/\"\u003e\n    \u003cimg src=\"assets/semver.png\" width=300 /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n## :copyright: Wasiq Bhamla\n\n\u003cp align=\"left\"\u003e\n  \u003ca href=\"http://www.apache.org/licenses/LICENSE-2.0\"\u003e\n    \u003cimg src=\"http://www.apache.org/img/asf_logo.png\" width=300 /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n[discord]: https://discord.gg/DWVM398zsC\n\n[home]: https://github.com/wasiqb/coteafs-selenium\n\n[coverage]: https://sonarcloud.io/component_measures?id=com.github.wasiqb.coteafs%3Aselenium\u0026metric=Coverage\n\n[maven]: https://maven-badges.herokuapp.com/maven-central/com.github.wasiqb.coteafs/selenium\n\n[site]: https://wasiqb.github.io\n\n[tracker]: https://github.com/WasiqB/coteafs-selenium/issues?q=something\n\n[issue]: https://github.com/WasiqB/coteafs-selenium/issues/new\n\n[contributing]: .github/CONTRIBUTING.md\n\n[mail]: mailto:wasbhamla2005@gmail.com\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwasiqb%2Fcoteafs-selenium","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwasiqb%2Fcoteafs-selenium","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwasiqb%2Fcoteafs-selenium/lists"}