{"id":19972333,"url":"https://github.com/dougnoel/sentinel","last_synced_at":"2025-08-10T08:42:24.926Z","repository":{"id":37072578,"uuid":"207300928","full_name":"dougnoel/sentinel","owner":"dougnoel","description":"A Selenium/Appium framework that enables users to focus on automating web and windows tests, so that automated tests can be written in a non-technical way in the same amount of time as manual tests can be executed.","archived":false,"fork":false,"pushed_at":"2023-09-11T05:37:42.000Z","size":152980,"stargazers_count":11,"open_issues_count":118,"forks_count":13,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-05-04T01:32:07.977Z","etag":null,"topics":["bdd-framework","cucumber","gherkin","java","selenium","selenium-framework","web-automation","webdriver","windows-automation"],"latest_commit_sha":null,"homepage":"","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/dougnoel.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-09-09T12:12:55.000Z","updated_at":"2024-04-03T17:42:41.000Z","dependencies_parsed_at":"2024-11-13T03:07:46.377Z","dependency_job_id":null,"html_url":"https://github.com/dougnoel/sentinel","commit_stats":null,"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/dougnoel/sentinel","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dougnoel%2Fsentinel","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dougnoel%2Fsentinel/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dougnoel%2Fsentinel/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dougnoel%2Fsentinel/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dougnoel","download_url":"https://codeload.github.com/dougnoel/sentinel/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dougnoel%2Fsentinel/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":269698514,"owners_count":24461195,"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-08-10T02:00:08.965Z","response_time":71,"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","gherkin","java","selenium","selenium-framework","web-automation","webdriver","windows-automation"],"created_at":"2024-11-13T03:07:42.493Z","updated_at":"2025-08-10T08:42:24.752Z","avatar_url":"https://github.com/dougnoel.png","language":"Java","readme":"[![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.dougnoel/sentinel/badge.svg)](https://search.maven.org/artifact/com.dougnoel/sentinel)\n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\n[![codebeat badge](https://codebeat.co/badges/3d631b66-b308-43cd-87f1-626fde5851ca)](https://codebeat.co/projects/github-com-dougnoel-sentinel-master) [![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=dougnoel_sentinel\u0026metric=sqale_rating)](https://sonarcloud.io/dashboard?id=dougnoel_sentinel) [![Reliability Rating](https://sonarcloud.io/api/project_badges/measure?project=dougnoel_sentinel\u0026metric=reliability_rating)](https://sonarcloud.io/dashboard?id=dougnoel_sentinel) [![Security Rating](https://sonarcloud.io/api/project_badges/measure?project=dougnoel_sentinel\u0026metric=security_rating)](https://sonarcloud.io/dashboard?id=dougnoel_sentinel) [![Coverage](https://sonarcloud.io/api/project_badges/measure?project=dougnoel_sentinel\u0026metric=coverage)](https://sonarcloud.io/dashboard?id=dougnoel_sentinel)\n\n# Sentinel - Selenium Automation Framework in Java\n\nA Selenium framework that implements the [Page Object Model](http://cheezyworld.com/2010/11/09/ui-tests-not-brittle/) (POM) using [Object Oriented Programming](https://en.wikipedia.org/wiki/Object-oriented_programming) (OOP) concepts. It abstracts out most of the complexity of Selenium to allow users to focus on automating tests and not spend time dealing with the technical details of implementing an automation framework, so that automated tests can be written in a non-technical way in the same amount of time as manual tests can be executed.\n\n## Quickstart\nIf you want to write tests, you are in the wrong place. Head over to the [sentinel.example Project](https://github.com/dougnoel/sentinel.example) to get started. There is extensive documentation there along with sample code to get you up and running in minutes. You can also check out the [Sentinel Javadocs](https://dougnoel.github.io/sentinel/), especially the steps package. Sentinel is intended to be included in your test automation and used as a jar file. If you are writing tests, you should **NOT** be modifying the Sentinel code itself.\n\nPeople wondering where they can write glue code @Given, @When, and @Then steps should first be asking what has been written and attempting to reuse that instead of writing their own. If you are writing your own more than 1% of the time then you are not using the framework as intended and wasting time (or working on something really weird).\n\n# Section 1: Using Sentinel\n\nThese instructions will get you a copy of the project up and running on your local machine for development purposes. See deployment for notes on how to deploy the project to Maven Central.\n\n## 1.0 Getting Started\n\n### 1.1 Prerequisites\n\nWhat things you need to install the software and how to install them:\n * Java (11 or later)\n * Maven (2.5.4 or later)\n * Integrated Development Environment (Eclipse Suggested)\n * Google Chrome (suggested)\n\n### 1.2 Installation\nThese instructions assume you are using Eclipse.\n\n**On the command line:**\nClone the project from git.\n\n```\ngit clone https://github.com/dougnoel/sentinel.git\n```\n1. Open Eclipse\n2. File -\u003e Open Projects from File system...\n3. Next to Import Source click the Directory button and browse to the installed location.\n4. Click the Finish button.\n1. Right-Click on the project in the Project Explorer.\n2. Maven -\u003e Update Project...\n3. Wait for the status bar in the lower right-hand corner to finish before continuing.\n\n### Running the Tests\nOn the command line type: `mvn test`.\n\nIn Eclipse:\n1. Expand **src/test/java/ -\u003e tests**\n2. Right-click on **SentinelTests.java** and select **Run As... -\u003e JUnit Test**\n\n## 2.0 Frequently Asked Questions (FAQs)\n\n### How do I create page objects, feature files and new glue code steps?\nAll of this is explained at length in the [sentinel.example Project](https://github.com/dougnoel/sentinel.example) project. If you want to use this framework to write tests, that is the code you need to check out - not this. You check this code out to contribute to the project.\n\n### How do I run code coverage for my unit tests using Jacoco? ###\nThis script will run code coverage and then open up the results in your default browser. The results will not open if there are build failures.\n\n```\nsrc/test/resources/scripts/UnitTests.sh\n\n```\n\n### How do I navigate to step definition file from feature file scenario step? ###\nPress CTRL + Click (Command + Click on a Mac) on the feature file scenario, This should navigate to associated step defintion, but if this does not work, the follow below steps: \n1. In Eclipse go to Help\n2. Select Eclipse Marketplace\n3. Search for cucumber\n4. result should return Cucumber eclipse plugin and Natural plugin\n5. If none of them are installed then install only Cucumber eclipse plugin\n6. If both are installed then uninstall Natural plugin and keep Cucumber plugin installed\n7. After install the plugin, Right click on the Project --\u003e Configure  --\u003e Convert to Cucumber project\n8. Open any feature file: Right click on feature file and select cucumber editor\n9. Now CTRL + Click (Command + Click) should navigate to the step definition file. Enjoy coding :)\n\n## 3.0 Deployment\nAdd additional notes about how to deploy this on a live system in Bamboo/Jenkins/etc.\n\n### 3.1 Building a Jar File\n\nTo build a file for release, open up the pom.xml and change the version number using [Semantic Versioning](http://semver.org/) to the next release number. Alternately an X.X.X-SNAPSHOT version can be created.\n\nThen just run:\n\n```\nmvn package\n```\nThe jar file will be located in the target directory.\n\nTo install it locally:\n\n```\nmvn install:install-file -Dfile=sentinel-1.0.0-SNAPSHOT.jar -DgroupId=com.dougnoel -DartifactId=sentinel -Dversion=1.0.0-SNAPSHOT -Dpackaging=jar -DgeneratePom=true\n```\n\nIf you want to do this all in one step without generating a jar, just run:\n\n```\nmvn install\n```\n\n### 3.2 Deploy a Snapshot\nIf you want to deploy a snapshot version for use by people, use:\n\n```\nmvn deploy\n```\n\nAs long as you are setup to deploy to Maven central (see Section 5.3 below), to use the version, all someone will need to do is change their version to the SNAPSHOT version and have the following in their settings.xml:\n\n```\n  \u003crepositories\u003e\n    \u003crepository\u003e\n      \u003cid\u003eoss.sonatype.org-snapshot\u003c/id\u003e\n      \u003curl\u003ehttp://oss.sonatype.org/content/repositories/snapshots\u003c/url\u003e\n      \u003creleases\u003e\n        \u003cenabled\u003efalse\u003c/enabled\u003e\n      \u003c/releases\u003e\n      \u003csnapshots\u003e\n        \u003cenabled\u003etrue\u003c/enabled\u003e\n      \u003c/snapshots\u003e\n    \u003c/repository\u003e\n  \u003c/repositories\u003e\n  ```\n\n### 3.3 Deploy to Maven Central\n[Instructions for Deploying to Maven Central](https://dzone.com/articles/publish-your-artifacts-to-maven-central)\nHere is an article on [encrypting the PGP password in settings.xml](http://maven.apache.org/guides/mini/guide-encryption.html). This [git project](https://github.com/tdf/odftoolkit) also shows an example of how to push to Maven Central.\n\nHad to run ```export GPG_TTY=$(tty)``` per this article on [using GPG on Mac](https://gist.github.com/repodevs/a18c7bb42b2ab293155aca889d447f1b) for this all to work.\n\n(NOTE: The version needs to be X.X.X-SNAPSHOT for a release to work.)\n\nWhen release:prepare and release:peform run, they pull command line arguments from the maven-release-plugin section of the pom.xml. These are in turn set in the properties section of the pom.xml under sentinel-release-os, sentinel-release-browser, and sentinel-release-pageobjectpackages at the top of the file. If you need to change these properties, change them here. If you need to add additional arguments, add them to the arguments section and follow the standard for adding the property values to the properties section of the file.\n\n```\nmvn clean\n\nmvn release:prepare\n\nmvn release:perform\n```\n\nAfter deployment, follow the [Sonatype Instructions for releasing a deployment](https://central.sonatype.org/pages/releasing-the-deployment.html).\n\n#### 3.3.1 Install GPG Key\nTo create a GPG Key, you need a tool. The following tool for Mac has a UI [https://gpgtools.org/](https://gpgtools.org/). When creating a key, you must use the Advanced Settings and follow the instructions above.\n\n## 4.0 Additional Documentation \u0026 Resources\n\n### 4.1 Javadocs\nSentinel comes with Javadocs which describe its classes in great detail. This includes examples of how you can use the generic Cucumber steps that are already included. The [Sentinel Javadocs](https://dougnoel.github.io/sentinel/) are updated on github with every new version.\n\n#### 4.1.1 Generating Javadocs\nThe Javadocs can also be easily generated by running the following command.\n\n```\nmvn javadoc:javadoc\n```\nThe files are generated in the docs folder and can be accessed by opening up the index.html file contained within that folder. \n\nEvery method should have a Javadoc comment describing what it does, its parameters, what it returns (if not void), \nand any exceptions it throws. We follow the [Liferay-Portal Javadoc Guidelines](https://github.com/liferay/liferay-portal/blob/master/readme/ADVANCED_JAVADOC_GUIDELINES.markdown) for writing Javadoc contents.\n\n#### 4.1.2 Publishing Javadocs to Github\n1. Make sure you have updated the version in the pomfile if necessary (pom.xml)\n2. Run `mvn javadoc:javadoc`\n3. Commit the changes and merge them with main. The files will be pulled from the docs folder and published on [https://dougnoel.github.io/sentinel/](https://dougnoel.github.io/sentinel/)\n\nFor more information, refer to [Configuring a publishing source for your GitHub Pages site](https://help.github.com/en/github/working-with-github-pages/configuring-a-publishing-source-for-your-github-pages-site)\nAdditional information can be found under [About GitHub Pages and Jekyll](https://help.github.com/en/github/working-with-github-pages/about-github-pages-and-jekyll) and the [GitHub Pages site](https://pages.github.com/).\n\n### 4.2 [Changelog](CHANGELOG.md)\nThe changelog is generated using [github_changelog_generator](https://github.com/github-changelog-generator/github-changelog-generator).\n\n`github_changelog_generator -u dougnoel -p sentinel --token`\n\n### 4.3 Built With\n* [Apache Commons CSV](https://commons.apache.org/proper/commons-csv/) - CSV reading/writing library\n* [Apache PDFBox](https://pdfbox.apache.org/) - PDF reading/writing library.\n* [Apache StringUtils](https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html) - Advanced String functionality that is optimized.\n* [Appium](https://appium.io/) - Automation for Application Platforms outside of the Web, used for WinAppDriver.\n* [Cucumber](https://cucumber.io/) - BDD Testing Framework\n* [Cucumber Extent Reporter 7](https://ghchirp.online/3196/) Interface between Cucumber Results and Extent Reports.\n* [Commons Lang](https://commons.apache.org/proper/commons-lang/) - Apache Commons Lang 3 for common Java language options\n* [Extent Reports](http://extentreports.com/) - A report framework for automation testing.\n* [HttpComponents](http://hc.apache.org/) - Apache HttpComponents for API testing.\n* [Image Comparison](https://github.com/romankh3/image-comparison) - Library for comparing screenshots for screenshot testing.\n* [Jackson](https://github.com/FasterXML/jackson) - Libraries for reading YAML, JSON and other config files.\n* [Log4j2](https://logging.apache.org/log4j/2.x/) - Apache logging framework.\n* [PDFBox](https://pdfbox.apache.org/) - Apache library for reading PDF files.\n* [Maven](https://maven.apache.org/) - Apache dependency management.\n* [Maven Javadoc Plugin](https://maven.apache.org/plugins/maven-javadoc-plugin/) - Plugin to allow maven to generate Javadocs.\n* [Monte Screen Recorder](https://mvnrepository.com/artifact/com.github.stephenc.monte/monte-screen-recorder) - Library for recording video of executions.\n* [Saucelabs](https://saucelabs.com/) - Multi-Platform, multi-browser external testing service.\n* [Selenium](https://www.seleniumhq.org/) - The automation framework workhorse.\n* [Swagger Parser](https://github.com/swagger-api/swagger-parser) - Reads Swagger API files, allowing us to use them as API Objects.\n* [Traprange](https://github.com/thoqbk/traprange) - Independent library developed using PDFBox to deal with tables in PDFs.\n* [Unirest](http://unirest.io/java.html) - A simple API library used for the API testing functionality.\n* [WebDriverManager](https://github.com/bonigarcia/webdrivermanager) 4.4.1 - Automatically detects browser versions and downloads the correct drivers.\n* [WinAppDriver](https://github.com/microsoft/WinAppDriver) - Microsoft maintained library for automating Windows OS.\n\n### 4.4 Web Drivers\nAll web drivers are managed by [WebDriverManager](https://github.com/bonigarcia/webdrivermanager). Both the operating system and browser are automatically detected and the appropriate web driver is downloaded. Downloaded drivers are cached on individual boxes. The following browsers are supported:\n* Chrome ([Chromedriver](http://chromedriver.chromium.org/))\n* Edge ([Edgedriver](https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/))\n* Firefox ([Geckodriver](https://github.com/mozilla/geckodriver/releases))\n* Internet Explorer ([IE Driver](http://selenium-release.storage.googleapis.com/index.html))\n* Opera ([OperaChromiumDriver](https://github.com/operasoftware/operachromiumdriver/releases))\n* Safari ([Safaridriver](https://webkit.org/blog/6900/webdriver-support-in-safari-10/))\n\n### 4.5 Saucelabs\nSentinel is setup to use [Saucelabs](https://saucelabs.com/) for remote execution. This is the recommended way to execute test in your build pipeline, because you then do not need to setup an execution server.\n\n## 5.0 Versioning\n\nWe use [Semantic Versioning](http://semver.org/) for versioning. For the versions available, see the [tags on this repository](https://github.com/dougnoel/sentinel/tags). \n\n## 6.0 Authors\n\n* **Doug Noël** - *Architect* - Initial Work\n* **Sam Pacos** - *Developer* - IFrame Automatic Handling, Tables, Additional Contributions\n* **Paul Turchinetz** - *Developer* - Expanded Cucumber Steps, Dynamic Loading of Elements, Additional Contributions\n* **Tyler Bouchard** - *Contributor* - Windows Automation, Tables, Additional Contributions\n* **Peter Krzywicki** - *Contributor* - Minor Updates\n\n## 7.0 License\n\nThis project is licensed under the Apache Commons 2.0 License - see the [LICENSE.md](LICENSE.md) file for details\n\n## 8.0 Acknowledgments\n\n* Some design choices inspired by [Cheezy's Page Object gem](https://github.com/cheezy/page-object).","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdougnoel%2Fsentinel","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdougnoel%2Fsentinel","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdougnoel%2Fsentinel/lists"}