{"id":15288920,"url":"https://github.com/kripaliz/unifiedbdd-automation-framework","last_synced_at":"2025-07-26T06:14:30.302Z","repository":{"id":48088768,"uuid":"156530382","full_name":"kripaliz/unifiedbdd-automation-framework","owner":"kripaliz","description":"Automation framework / solution implemented in Java to support web browser as well as mobile browser / App automation","archived":false,"fork":false,"pushed_at":"2023-06-14T22:20:12.000Z","size":85,"stargazers_count":3,"open_issues_count":1,"forks_count":2,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-07-10T03:53:14.387Z","etag":null,"topics":["allure-report","allure2","appium","automated-testing","bdd","bdd-tests","cucumber","cucumber-jvm","gherkin","java","pageobjects","selenium-webdriver","spring-boot","spring-boot-starter-test","testng","webdriver-manager"],"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/kripaliz.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","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}},"created_at":"2018-11-07T10:34:40.000Z","updated_at":"2023-12-05T17:37:41.000Z","dependencies_parsed_at":"2025-04-13T08:11:36.152Z","dependency_job_id":"b34f62d6-82ef-4206-acc7-36f825347a37","html_url":"https://github.com/kripaliz/unifiedbdd-automation-framework","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/kripaliz/unifiedbdd-automation-framework","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kripaliz%2Funifiedbdd-automation-framework","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kripaliz%2Funifiedbdd-automation-framework/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kripaliz%2Funifiedbdd-automation-framework/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kripaliz%2Funifiedbdd-automation-framework/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kripaliz","download_url":"https://codeload.github.com/kripaliz/unifiedbdd-automation-framework/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kripaliz%2Funifiedbdd-automation-framework/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267127943,"owners_count":24040154,"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-07-26T02:00:08.937Z","response_time":62,"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":["allure-report","allure2","appium","automated-testing","bdd","bdd-tests","cucumber","cucumber-jvm","gherkin","java","pageobjects","selenium-webdriver","spring-boot","spring-boot-starter-test","testng","webdriver-manager"],"created_at":"2024-09-30T15:54:40.132Z","updated_at":"2025-07-26T06:14:30.277Z","avatar_url":"https://github.com/kripaliz.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# UnifiedBDD Automation Framework\n\n## BDD automation testing made simple\n[![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.github.kripaliz/unifiedbdd-automation-framework/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.github.kripaliz/unifiedbdd-automation-framework)\n\nAutomation framework / solution implemented in Java to support web browser as well as mobile browser / App automation. This includes\n\n* abstraction for PageObject\n* ContextLoader for Spring context initialisation\n* Junit5 test runner that kicks off cucumber\n* Spring Boot application configuration\n* Webdriver properties, test data properties\n\n## Built With\n\n* [Cucumber](https://cucumber.io/docs/cucumber/) – BDD tests\n* [Allure Reports](https://docs.qameta.io/allure/) - test report\n* [Selenium](https://www.seleniumhq.org/) – web automation\n* [Appium](http://appium.io/) – mobile automation\n* [Page Object Model](https://www.selenium.dev/documentation/test_practices/encouraged/page_object_models/) – design pattern to abstract page behaviour\n* [Spring Boot](http://spring.io/projects/spring-boot) – cleaner code\n* [Webdriver Manager](https://github.com/bonigarcia/webdrivermanager) – manage webdriver executables automatically\n\n## Prerequisites\n\n* [JDK 11](https://openjdk.org/projects/jdk/11)\n* [Maven](https://maven.apache.org/download.cgi)\n\n## Usage\n\nTo use this automation framework in your test suite:\n\n1. Inherit from [unifiedbdd-automation-parent](https://github.com/kripaliz/unifiedbdd-automation-parent)\n\n\t```xml\n\t\u003cproject xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\"\u003e\n\t\t\u003cmodelVersion\u003e4.0.0\u003c/modelVersion\u003e\n\t\t\u003cparent\u003e\n\t\t\t\u003cgroupId\u003ecom.github.kripaliz\u003c/groupId\u003e\n\t\t\t\u003cartifactId\u003eunifiedbdd-automation-parent\u003c/artifactId\u003e\n\t\t\t\u003cversion\u003e0.1.6\u003c/version\u003e\n\t\t\u003c/parent\u003e\n\t\t\u003cgroupId\u003ecom.company.testing\u003c/groupId\u003e\n\t\t\u003cartifactId\u003euiautomation-suite\u003c/artifactId\u003e\n\t\t\u003cversion\u003e0.0.1-SNAPSHOT\u003c/version\u003e\n\n\t\t\u003cproperties\u003e\n\t\t\t\u003ccucumber.execution.parallel.enabled\u003etrue\u003c/cucumber.execution.parallel.enabled\u003e\n\t\t\t\u003ccucumber.glue\u003ecom.company.testing.step\u003c/cucumber.glue\u003e\n\t\t\t\u003ccucumber.plugin\u003ejson:target/cucumber-reports/result.json,junit:target/cucumber-reports/result.xml\u003c/cucumber.plugin\u003e\n\t\t\u003c/properties\u003e\n\t\u003c/project\u003e\n\t```\n\n2. Create an application.yml file for spring boot\n\n\t```yml\n\tspring.main.sources: com.company.testing\n\n\tspring.profiles.active: chrome\n\n\t---\n\tspring.config.activate.on-profile: chrome\n\twebdriver:\n\t  type: chrome\n\n\t---\n\tspring.config.activate.on-profile: saucelabs\n\twebdriver:\n\t  type: remote\n\t  url: http://user:password@ondemand.saucelabs.com:80/wd/hub\n\t  desiredCapabilities:\n\t    browserName: chrome\n\t    browserVersion: latest\n\t    platformName: macOS 10.13\n\t```\n\n3. Create [logback](https://logback.qos.ch/manual/configuration.html) xml\n\n\t```xml\n\t\u003c?xml version=\"1.0\" encoding=\"UTF-8\"?\u003e\n\t\u003cconfiguration\u003e\n\n\t\t\u003cappender name=\"STDOUT\" class=\"ch.qos.logback.core.ConsoleAppender\"\u003e\n\t\t\t\u003c!-- encoders are assigned the type ch.qos.logback.classic.encoder.PatternLayoutEncoder\n\t\t\t\tby default --\u003e\n\t\t\t\u003cencoder\u003e\n\t\t\t\t\u003cpattern\u003e%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n\u003c/pattern\u003e\n\t\t\t\u003c/encoder\u003e\n\t\t\u003c/appender\u003e\n\n\t\t\u003clogger name=\"org.apache.http\" level=\"INFO\" /\u003e\n\t\t\u003clogger name=\"org.springframework\" level=\"INFO\" /\u003e\n\n\t\t\u003croot level=\"debug\"\u003e\n\t\t\t\u003cappender-ref ref=\"STDOUT\" /\u003e\n\t\t\u003c/root\u003e\n\t\u003c/configuration\u003e\n\t```\n4. Create a Test suite class\n\n\t```java\n\t@Suite\n\t@IncludeEngines(\"cucumber\")\n\t@SelectClasspathResource(\"features\")\n\tpublic class AutomationTests {\n\n\t}\n\t```\n\n\tReference: https://github.com/cucumber/cucumber-jvm/tree/v7.8.1/cucumber-junit-platform-engine#suites-with-different-configurations\n\n5. Create PageObject classes that extend `com.github.kripaliz.automation.pageobject.AbstractPage` and use the marker interface `com.github.kripaliz.automation.pageobject.PageObject`.\n\n\t```java\n\t@PageObject\n\tpublic class AnukoHomePage extends AbstractPage {\n\n\t\t@FindBy(css = AnukoHomePageConstants.LOGIN_LINK_CSS)\n\t\tprivate WebElement loginLink;\n\n\t\tpublic void visitUrl() {\n\t\t\twebDriver.get(\"https://timetracker.anuko.com/\");\n\t\t}\n\t}\n\t```\n6. Create [StepDef](https://cucumber.io/docs/cucumber/step-definitions/) classes that use spring dependency injection to get pageObjects. (under a package you configured in `cucumber.glue` in pom.xml)\n\n\t```java\n\tpublic class SignInSteps {\n\n\t\t@Autowired\n\t\tprivate AnukoHomePage anukoHomePage;\n\n\t\t@Given(\"^I visit Anuko Home Page$\")\n\t\tpublic void i_visit_Anuko_Home_Page() throws Exception {\n\t\t    anukoHomePage.visitUrl();\n\t\t}\n\t}\n\t```\n7. Create [gherkin](https://cucumber.io/docs/gherkin/) feature files in src/test/resources/features\n\n8. To run the suite\n\n\t```sh\n\tmvn clean test \\\n\t-Dcucumber.execution.parallel.config.fixed.parallelism=10 \\\n\t-Dgroups=\"!wip\" \\\n\t-Dspring.profiles.active=chrome \\\n\t-Dsurefire.rerunFailingTestsCount=0\n\t```\n\n\toptions:\n\t - `cucumber.execution.parallel.config.fixed.parallelism`: specify the number of concurrent scenarios to execute\n\t - `groups`: [junit tag expressions](https://github.com/cucumber/cucumber-jvm/tree/main/cucumber-junit-platform-engine#tags) to limit scope of test execution\n\t - `spring.profiles.active`: switch between [spring profiles](https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.profiles) created in application.yml\n\t - `surefire.rerunFailingTestsCount`: reruns for any failed tests\n\n9. To view the [allure report](https://github.com/allure-framework/allure-maven)\n\n\t```sh\n\tmvn allure:serve\n\t```\n\n10. To re-run failed tests\n\n\t```sh\n\tmvn test -Dcucumber.options=@target/rerun.txt -Dspring.profiles.active=chrome -DthreadCount=4\n\t```\n\n## Configuring the TypeRegistry\n\nCucumber 3+ provides `TypeRegistryConfigurer` to configure custom parameter types and data table types. The framework already defines one to setup a default DataTable Transformer using Jackson library.\nTo extend it, please use ServiceLoader mechanism:\n\n* Create an implementation of `DataTableTypeProvider` or `ParameterTypeProvider`\n* In your test suite, add file(s) with the implementations referenced:\n    * `META-INF/services/com.github.kripaliz.automation.cucumber.DataTableTypeProvider`\n    * `META-INF/services/com.github.kripaliz.automation.cucumber.ParameterTypeProvider`\n\nHere's some more info on ServiceLoader; https://www.baeldung.com/java-spi\n\n## Setting up eclipse for developing\n\n* Download [eclipse](https://www.eclipse.org/downloads/)\n* Follow instructions [here](https://projectlombok.org/setup/eclipse) for lombok setup\n* Install eclipse plugins from the [eclipse marketplace](https://marketplace.eclipse.org/content/welcome-eclipse-marketplace) or using their [update site](https://help.eclipse.org/kepler/index.jsp?topic=%2Forg.eclipse.platform.doc.user%2Ftasks%2Ftasks-127.htm) - [YEdit](http://dadacoalition.org/yedit/), [Cucumber](https://cucumber.github.io/cucumber-eclipse-update-site-snapshot)\n* Follow instructions in the answer [here](https://stackoverflow.com/questions/1886185/eclipse-and-windows-newlines) to use Unix style line endings for new files\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkripaliz%2Funifiedbdd-automation-framework","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkripaliz%2Funifiedbdd-automation-framework","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkripaliz%2Funifiedbdd-automation-framework/lists"}