<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Suparnakhamaru1</title>
    <description>The latest articles on DEV Community by Suparnakhamaru1 (@suparnakhamaru1).</description>
    <link>https://dev.to/suparnakhamaru1</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F976942%2F9cfe84e1-ca27-4a58-b525-bdb35d4e9a6b.png</url>
      <title>DEV Community: Suparnakhamaru1</title>
      <link>https://dev.to/suparnakhamaru1</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/suparnakhamaru1"/>
    <language>en</language>
    <item>
      <title>How To Set Up Continuous Integration With Git and Jenkins?</title>
      <dc:creator>Suparnakhamaru1</dc:creator>
      <pubDate>Tue, 22 Nov 2022 13:49:38 +0000</pubDate>
      <link>https://dev.to/testmuai/how-to-set-up-continuous-integration-with-git-and-jenkins-1nb9</link>
      <guid>https://dev.to/testmuai/how-to-set-up-continuous-integration-with-git-and-jenkins-1nb9</guid>
      <description>&lt;p&gt;There are various CI/CD tools such as CircleCI, TeamCity, Bamboo, Jenkins, GitLab, Travis CI, GoCD, etc., that help companies streamline their development process and ensure high-quality applications. If we talk about the &lt;a href="https://www.lambdatest.com/learning-hub/cicd?utm_source=devto&amp;amp;utm_medium=organic&amp;amp;utm_campaign=nov22_pk&amp;amp;utm_term=pk&amp;amp;utm_content=blog" rel="noopener noreferrer"&gt;top CI/CD tools&lt;/a&gt; in the market, Jenkins is still one of the most popular, stable, and widely used open-source CI/CD tools for building and automating continuous integration, delivery, and deployment pipelines smoothly and effortlessly.&lt;/p&gt;

&lt;p&gt;In this article, we shall explore Jenkins in detail to further understand how it’s widely used for &lt;a href="https://www.lambdatest.com/selenium-automation?utm_source=devto&amp;amp;utm_medium=organic&amp;amp;utm_campaign=nov22_pk&amp;amp;utm_term=pk&amp;amp;utm_content=blog" rel="noopener noreferrer"&gt;test automation&lt;/a&gt; of application development tasks, running tests, and final deployment into production. We will then learn how to set up continuous integration with Git Jenkins.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;This &lt;a href="https://www.lambdatest.com/learning-hub/smoke-testing?utm_source=devto&amp;amp;utm_medium=organic&amp;amp;utm_campaign=nov22_pk&amp;amp;utm_term=pk&amp;amp;utm_content=learning_hub" rel="noopener noreferrer"&gt;smoke testing&lt;/a&gt; tutorial covers what smoke testing is, its importance, benefits, and how to perform it with real-time examples.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started With Jenkins Continuous Integration
&lt;/h2&gt;

&lt;p&gt;Before starting continuous integration with Jenkins and Git, let us walk through some of the most common terminologies involved in building efficient &lt;a href="https://www.lambdatest.com/blog/cicd-pipeline-challenges/?utm_source=devto&amp;amp;utm_medium=organic&amp;amp;utm_campaign=nov22_pk&amp;amp;utm_term=pk&amp;amp;utm_content=blog" rel="noopener noreferrer"&gt;CI/CD pipelines&lt;/a&gt; across various SDLC projects:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Continuous Integration&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Continuous Delivery&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Continuous Deployment&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Source Control Management (SCM)&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Let us understand what happens in each of the above stages:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Continuous Integration&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Continuous Integration&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Building Software implementation in a ‘Development’ environment.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Performing Continuous Dev Testing such as:&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Unit Testing&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Layout Testing&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Continuous Delivery&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Deploying every developed build on the ‘Staging’ environment.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Performing Continuous Automated Testing such as:&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Integration Testing&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Visual Testing / Screenshot Testing&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;System Testing (End to End Testing)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Acceptance Testing&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Continuous Deployment&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Deploying every build on ‘Production’ environment automatically, after passing all tests in Development and Staging environments&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Source Control Management (SCM)&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Contains all the developed source code of the project&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Maintains all the current and past state of the code/project&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Source Control Management is also referred to as Version Control Software (VCS) and Revision Control System (RCS). While there are several source control management tools available in the industry, Git is the most popular and widely used one as of date, while there are others like SVN, TFS, Mercurial, CVS as well. This is another reason why continuous integration with Jenkins and Git is one of DevOps professionals’ most preferred integrations.&lt;/p&gt;

&lt;p&gt;Before getting started with continuous integration with Jenkins and Git, let us dive a little deep into Jenkins and its setup.&lt;/p&gt;

&lt;h2&gt;
  
  
  Jenkins Overview
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2Aa2U6yLKYgjyux0AxcjDNuw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2Aa2U6yLKYgjyux0AxcjDNuw.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Jenkins was built by Kohsuke Kawaguchi in 2004 and is one of the &lt;a href="https://www.lambdatest.com/blog/best-ci-cd-tools/?utm_source=devto&amp;amp;utm_medium=organic&amp;amp;utm_campaign=nov22_pk&amp;amp;utm_term=pk&amp;amp;utm_content=blog" rel="noopener noreferrer"&gt;most popular CI/CD tools&lt;/a&gt; for continuous integration and continuous delivery. With more than 16,000 stars and 6,500 forks on GitHub, Jenkins is being used by thousands of software companies. Its popularity comes from the fact that it is really good at what it does — building and releasing software pieces. You can refer to our comprehensive &lt;a href="https://www.lambdatest.com/learning-hub/jenkins?utm_source=devto&amp;amp;utm_medium=organic&amp;amp;utm_campaign=nov22_pk&amp;amp;utm_term=pk&amp;amp;utm_content=blog" rel="noopener noreferrer"&gt;Jenkins tutorial&lt;/a&gt; for more information.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Core Concepts of Jenkins:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Project / Job&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A Project or a Job is a collection of configurable instructions used for building developed source code, testing, collecting artifacts, sending notifications in emails, deploying in required environments, and much more.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Pipelines&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A &lt;a href="https://www.lambdatest.com/blog/jenkins-pipeline-tutorial/?utm_source=devto&amp;amp;utm_medium=organic&amp;amp;utm_campaign=nov22_pk&amp;amp;utm_term=pk&amp;amp;utm_content=blog" rel="noopener noreferrer"&gt;Jenkins pipeline&lt;/a&gt; is set of instructions and build steps configured in Jenkins to run all the processes in multiple environments in various steps.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Build Queue and Build Executor Status&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Build Executor Status&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Build Queue&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2ACBno8Bo5n--ZUxidSt0CeA.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2ACBno8Bo5n--ZUxidSt0CeA.jpeg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Plugins&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;More than 1500 community-contributed plugins in Jenkins support building software varieties, automate tests, and deploy projects for production releases.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Master — Agent&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Executes in remote parallel machines for shorter build and test running time using additional resources in the cloud.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The master node is usually the machine where Jenkins is configured to be running.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Agent nodes are generally the other machines that receive instructions from the Master node to help the executions run and finish faster in parallel.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to Set Up Jenkins?
&lt;/h2&gt;

&lt;p&gt;Before learning how to set up continuous integration Git Jenkins, you need to set up a Jenkins server in your system. If you already have the setup, you can skip this section and get right to continuous integration with Jenkins and Git. For now, let us walk through the steps by downloading, installing, and configuring Jenkins from scratch.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to Download Jenkins?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1:&lt;/strong&gt; Download Jenkins&lt;/p&gt;

&lt;p&gt;Go to the official Jenkins website and download Jenkins.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2006%2F1%2A53dDk20xGQXAv1ytRXldwA.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2006%2F1%2A53dDk20xGQXAv1ytRXldwA.jpeg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For example, if one has a Windows machine, a jenkins.msi file might start getting downloaded.&lt;/p&gt;

&lt;p&gt;While in the case of macOS, one may initiate installing Jenkins via the Homebrew package manager by following the commands provided in instructions on the same page as mentioned above.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; In this blog, I have taken an example of installing Jenkins on macOS.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2:&lt;/strong&gt; Installing Jenkins on macOS.&lt;/p&gt;

&lt;p&gt;Now, let us look at the process of installation of Jenkins locally on a macOS. Let us open the Terminal app in mac and run the below command and wait for the command to install all required tools on the mac machine successfully:&lt;/p&gt;

&lt;p&gt;brew install jenkins-lts&lt;/p&gt;

&lt;p&gt;Please note that the command shall work only when Homebrew is already pre-installed in the macOS machine. If not installed, kindly install &lt;strong&gt;Homebrew&lt;/strong&gt; before running the above command in mac.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3:&lt;/strong&gt; Start Jenkins&lt;br&gt;
Post successful installation of Jenkins, run the following command to start Jenkins:&lt;/p&gt;

&lt;p&gt;brew services start jenkins-lts&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4:&lt;/strong&gt; Configuring Jenkins as an Admin&lt;/p&gt;

&lt;p&gt;Once Jenkins is successfully started, let us validate if the local Jenkins server is starting in the machine by navigating to the following URL in your browser:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://localhost:8080
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AWbozOkKcmHeU2Vqgp3nrfA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AWbozOkKcmHeU2Vqgp3nrfA.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Suppose the “&lt;strong&gt;Unlock Jenkins&lt;/strong&gt;” web page is displayed after navigating to the above-mentioned URL without an error message. In that case, the Jenkins server is confirmed to be up and running on the local machine.&lt;/p&gt;

&lt;p&gt;Copy the above path for Admin Password highlighted in pink in the figure&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5:&lt;/strong&gt; Execute the command.&lt;/p&gt;

&lt;p&gt;Open Terminal app, and paste the above copied path as provided below:&lt;/p&gt;

&lt;p&gt;sudo cat &lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
sudo cat /Users/skhamaru/.jenkins/secrets/initialAdminPassword&lt;/p&gt;

&lt;p&gt;Post successful execution of the above command, the initial admin password can be found displayed as shown in the figure below:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AwjhQNSn-feTejPUNqKf8Kw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AwjhQNSn-feTejPUNqKf8Kw.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 6:&lt;/strong&gt; Unlock Jenkins&lt;/p&gt;

&lt;p&gt;Copy the newly found initial admin password from the terminal and paste it in the “&lt;strong&gt;Administrator password&lt;/strong&gt;” field in the previously displayed Jenkins web page, as shown below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2Aj7hIUm6p2j2NUz71TCWYNA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2Aj7hIUm6p2j2NUz71TCWYNA.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then, click on the ‘&lt;strong&gt;Continue&lt;/strong&gt;‘ button.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 7:&lt;/strong&gt; Customize Jenkins&lt;/p&gt;

&lt;p&gt;Click on “&lt;strong&gt;Install suggested plugins&lt;/strong&gt;” to install the most common Jenkins plugins.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2API3VHYVB2qvfzcChYfHHnA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2API3VHYVB2qvfzcChYfHHnA.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 8:&lt;/strong&gt; Create First Admin User&lt;/p&gt;

&lt;p&gt;Once all the plugins are installed successfully, the first admin credentials will be created for the newly set up Jenkins server.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2Aud4W7Sjh2dY1DJ3s_skr_Q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2Aud4W7Sjh2dY1DJ3s_skr_Q.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Enter valid credentials for the new admin for future configuration changes in Jenkins&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 9:&lt;/strong&gt; Instance Configuration.&lt;/p&gt;

&lt;p&gt;Make sure that the below URL is as per configuration, post which “&lt;strong&gt;Save and Continue&lt;/strong&gt;.”&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2A-h_R0Q9THe0rW0PYo8815w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2A-h_R0Q9THe0rW0PYo8815w.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 10:&lt;/strong&gt; Complete the Setup&lt;/p&gt;

&lt;p&gt;When the page below is displayed, click on the “&lt;strong&gt;Start using Jenkins&lt;/strong&gt;” button and explore the newly set up Jenkins server’s user experience.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2A8OAjLtsOcS_76RG99gNLtg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2A8OAjLtsOcS_76RG99gNLtg.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The newly logged-in admin page shall look as displayed below:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AjACGO3BgbofYCUO-PEa2CQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AjACGO3BgbofYCUO-PEa2CQ.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;In this &lt;a href="https://www.lambdatest.com/learning-hub/system-testing?utm_source=devto&amp;amp;utm_medium=organic&amp;amp;utm_campaign=nov22_pk&amp;amp;utm_term=pk&amp;amp;utm_content=learning_hub" rel="noopener noreferrer"&gt;system testing&lt;/a&gt; tutorial, learn why System testing is important and all the intricacies of the System testing process.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Setting up Continuous Integration with Git Jenkins
&lt;/h2&gt;

&lt;p&gt;While there are different ways for continuous integration with Jenkins and Git, let us explore the easiest way of integrating using GitHub’s “Personal access tokens” by following the below steps.&lt;/p&gt;

&lt;h2&gt;
  
  
  Configuring GitHub for Jenkins Continuous Integration
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Step 1:&lt;/strong&gt; Go to your Github profile and navigate to &lt;strong&gt;Settings&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2ApYP12pyvEk9x9d5GwiNmCg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2ApYP12pyvEk9x9d5GwiNmCg.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2:&lt;/strong&gt; In the settings screen, click on the “&lt;strong&gt;Developer settings&lt;/strong&gt;” menu and click on “&lt;strong&gt;Personal access tokens&lt;/strong&gt;.”&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3:&lt;/strong&gt; In the “&lt;strong&gt;Personal access tokens&lt;/strong&gt;” tab, click on the “&lt;strong&gt;Generate new token&lt;/strong&gt;” button and provide necessary details as desired (an example is provided in the below figure), and click on the “&lt;strong&gt;Generate token&lt;/strong&gt;” button.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AUCsb-8zsxfnzDTWhSyt-Rg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AUCsb-8zsxfnzDTWhSyt-Rg.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4:&lt;/strong&gt; Post successful creation of the token, the newly generated secret text in GitHub is to be copied for future usage in Jenkins.&lt;/p&gt;

&lt;h2&gt;
  
  
  Configuring Jenkins for GitHub Integration
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Step 5:&lt;/strong&gt; Next, go to Jenkins dashboard.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Click on “&lt;strong&gt;Manage Jenkins&lt;/strong&gt;.”&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click on “&lt;strong&gt;Configure System&lt;/strong&gt;” and go to the following ‘&lt;strong&gt;GitHub&lt;/strong&gt;‘ section.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AjmkZTc1YDIOaRfn-1h4P1A.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AjmkZTc1YDIOaRfn-1h4P1A.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; If the above “&lt;strong&gt;GitHub Server&lt;/strong&gt;” section is found missing in Jenkins, make sure to manually install the missing GitHub plugin from the installed list of tools shown below.&lt;/p&gt;

&lt;p&gt;Steps to follow- Go to: Jenkins Dashboard -&amp;gt; Manage Jenkins -&amp;gt; Manage Plugins -&amp;gt; ‘Available’ tab -&amp;gt; Enter Git in search bar and filter -&amp;gt; Install required plugin&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AgAX00AfK2bn__rkmBoH6nw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AgAX00AfK2bn__rkmBoH6nw.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 6:&lt;/strong&gt; Make sure to add the copied secret key in the above credentials by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Click on the “Add” -&amp;gt; “&lt;strong&gt;Jenkins&lt;/strong&gt;” button in the Github Server section’s Credentials field.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select “&lt;strong&gt;Secret text&lt;/strong&gt;” from the “Kind” dropdown.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2A9bH_wkFqyH-9K03XVYXQtA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2A9bH_wkFqyH-9K03XVYXQtA.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 7:&lt;/strong&gt; Paste the previously copied secret text from GitHub in the &lt;strong&gt;Secret&lt;/strong&gt; field as displayed below, while providing an ID such as “jenkins-integration,” and then click on the “&lt;strong&gt;Add&lt;/strong&gt;” button.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AvU4VTGJ6PqrW_GT_-OW5KA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AvU4VTGJ6PqrW_GT_-OW5KA.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 8:&lt;/strong&gt; Once the Secret text is successfully added, let us test the connection by clicking on the “&lt;strong&gt;Test connection&lt;/strong&gt;” button and verify the confirmation message as highlighted below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AjmkZTc1YDIOaRfn-1h4P1A.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AjmkZTc1YDIOaRfn-1h4P1A.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Creating Your First Jenkins Job Integrated Into a Test Project
&lt;/h2&gt;

&lt;p&gt;Let us take a sample java project already integrated and configured with the Ant build tool to ease convenience. You can choose any sample project of yours if you like. Let us follow the below steps in Jenkins Dashboard to configure the same.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1:&lt;/strong&gt; Click on “&lt;strong&gt;New Item&lt;/strong&gt;” in the Jenkins user interface dashboard on the left side.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2A6GsMG1gLQcgVMTcmj7_tug.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2A6GsMG1gLQcgVMTcmj7_tug.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2:&lt;/strong&gt; Let us start with creating a &lt;strong&gt;Freestyle project&lt;/strong&gt; in Jenkins for ease of understanding for a beginner. However, we can choose to select any of the following:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2ARc1XFNqrAlkC8WuQQumcRQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2ARc1XFNqrAlkC8WuQQumcRQ.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Enter a project name in the requested textbox field and select the &lt;strong&gt;Freestyle project&lt;/strong&gt; as shown on the image above.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3:&lt;/strong&gt; In the &lt;strong&gt;General&lt;/strong&gt; section, check the field “&lt;strong&gt;GitHub project&lt;/strong&gt;” and enter a valid Ant project as given below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2ASlZCveozu-_pUrs7qFt3uA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2ASlZCveozu-_pUrs7qFt3uA.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4:&lt;/strong&gt; Then, go to the “&lt;strong&gt;Source Code Management&lt;/strong&gt;” section and enter the same link as above with an extra .git extension at the end of the URL, as shown in the below screen.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AH_QnhVZzmUSXVEyRyt7n1g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AH_QnhVZzmUSXVEyRyt7n1g.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5:&lt;/strong&gt; Go to the “&lt;strong&gt;Build Environment&lt;/strong&gt;” section and add the following steps shown in the image below. Make sure to add the command in the Targets field under the Ant Build step:&lt;/p&gt;

&lt;p&gt;clean compile test package war&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AeEg1YD7OdwtBnUzsXWNLSw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AeEg1YD7OdwtBnUzsXWNLSw.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 6:&lt;/strong&gt; Click on the “&lt;strong&gt;Apply&lt;/strong&gt;” button and then click on the “&lt;strong&gt;Save&lt;/strong&gt;” button.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2A1kE195OQY1NU-WHL87N-gA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2A1kE195OQY1NU-WHL87N-gA.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 7:&lt;/strong&gt; Once the new Jenkins configurations are successfully saved, the user shall be navigated back to the Project dashboard screen, where the user now clicks on the “&lt;strong&gt;Build Now&lt;/strong&gt;” menu on the left-hand side of the displayed dashboard screen.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AwOA-ycwp9lqyCIeKxTZcAg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AwOA-ycwp9lqyCIeKxTZcAg.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 8:&lt;/strong&gt; As the Build has started to run, users shall be able to note the scheduled build running in the “&lt;strong&gt;Build History&lt;/strong&gt;” section with a visibly blinking blue round icon. Clicking it will navigate the user to the respective “&lt;strong&gt;Build Status&lt;/strong&gt;” page.&lt;/p&gt;

&lt;p&gt;Users must click on the “&lt;strong&gt;Console Output&lt;/strong&gt;” menu to walk through the build logs generated in the console while building in Jenkins.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AIh1REkUlVy-WpC3TKsdZRg.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AIh1REkUlVy-WpC3TKsdZRg.gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Analyzing JUnit Test Results in Jenkins
&lt;/h2&gt;

&lt;p&gt;Now that we have learned how to set up continuous integration with Git Jenkins and how to create the first Jenkins Continuous integration job within a test project, it is time to take it one step ahead. After creating a job with a Java project, you might also want to analyze the test results. This can also be done using Jenkins.&lt;/p&gt;

&lt;p&gt;Let’s see how this can be done for &lt;a href="https://www.lambdatest.com/learning-hub/junit-tutorial?utm_source=devto&amp;amp;utm_medium=organic&amp;amp;utm_campaign=nov22_pk&amp;amp;utm_term=pk&amp;amp;utm_content=blog" rel="noopener noreferrer"&gt;JUnit&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1:&lt;/strong&gt; Make sure “&lt;strong&gt;JUnit Plugin&lt;/strong&gt;” is already installed in Jenkins.&lt;br&gt;
Go to Jenkins Dashboard -&amp;gt; Manage Jenkins -&amp;gt; Manage Plugins -&amp;gt; Click on the ‘&lt;strong&gt;Installed&lt;/strong&gt;’ tab to view all the already installed plugins.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AXzWlw2lrv1ePCCbveBmaUQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AXzWlw2lrv1ePCCbveBmaUQ.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2:&lt;/strong&gt; Go to Project -&amp;gt; Click on ‘&lt;strong&gt;Configure&lt;/strong&gt;’ -&amp;gt; Click on ‘&lt;strong&gt;Build&lt;/strong&gt;’ tab.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AQu8xIyfIbdmrHzG8q9HYkg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AQu8xIyfIbdmrHzG8q9HYkg.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3&lt;/strong&gt;: Click on the “&lt;strong&gt;Add post-build action&lt;/strong&gt;” button at the bottom of the page.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AbPUyNjOTdlTGx2uESf3Vvg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AbPUyNjOTdlTGx2uESf3Vvg.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4:&lt;/strong&gt; From the above list of items displayed in the dropdown, select the “&lt;strong&gt;Publish JUnit test result report&lt;/strong&gt;” option.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2ACPExJ3gCATX17zod81aKNg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2ACPExJ3gCATX17zod81aKNg.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5:&lt;/strong&gt; Add the generated XML test report XML path from the workspace in the &lt;strong&gt;Test report XMLs&lt;/strong&gt; field as shown below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2A2QMHP7cZfnKZaTxv44AmWQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2A2QMHP7cZfnKZaTxv44AmWQ.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 6:&lt;/strong&gt; Click on the ‘&lt;strong&gt;Save&lt;/strong&gt;’ and ‘&lt;strong&gt;Apply&lt;/strong&gt;’ buttons.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2A1r76nIYja8hCgEgf8JQN8Q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2A1r76nIYja8hCgEgf8JQN8Q.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 7:&lt;/strong&gt; Click on the “&lt;strong&gt;Build Now&lt;/strong&gt;” button and allow the scheduled build to complete.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2ABpoc-ofoTjUY-6vnBh-NWA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2ABpoc-ofoTjUY-6vnBh-NWA.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 8:&lt;/strong&gt; Observe that a “&lt;strong&gt;Test Result Trend&lt;/strong&gt;” graph is generated on the project dashboard’s right side.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AKuk2HEIR-CJK6O_HprDRbA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AKuk2HEIR-CJK6O_HprDRbA.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 9:&lt;/strong&gt; On closer observation, we can observe that &lt;strong&gt;the x-axis **of the newly generated graph consists of Build Ids, and **the y-axis&lt;/strong&gt; is composed of several test cases run in each build.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AuwdnajbdrXfJ9Vo2dSufZg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AuwdnajbdrXfJ9Vo2dSufZg.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 10:&lt;/strong&gt; Along with the generation of test result trend graphs, we can also observe that the “&lt;strong&gt;Latest Test Result&lt;/strong&gt;” report is also generated in the dashboard to help users closely analyze the run tests status in each build.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2244%2F1%2AtBU9je309AHxALIORI6ltQ.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2244%2F1%2AtBU9je309AHxALIORI6ltQ.gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Integrating LambdaTest Automation Plugin
&lt;/h2&gt;

&lt;p&gt;Continuous integration with Jenkins and Git is a great way to streamline your test automation scripts. Furthermore, you can also implement a Jenkins Continuous integration to make your scripts easier to test. LambdaTest provides a &lt;a href="https://www.lambdatest.com/support/docs/jenkins-with-lambdatest/?utm_source=devto&amp;amp;utm_medium=organic&amp;amp;utm_campaign=nov22_pk&amp;amp;utm_term=pk&amp;amp;utm_content=blog" rel="noopener noreferrer"&gt;Jenkins plugin&lt;/a&gt; to easily automate your Selenium test scripts by connecting your Jenkins CI instance to &lt;a href="https://www.lambdatest.com/selenium-automation?utm_source=devto&amp;amp;utm_medium=organic&amp;amp;utm_campaign=nov22_pk&amp;amp;utm_term=pk&amp;amp;utm_content=blog" rel="noopener noreferrer"&gt;Selenium&lt;/a&gt;. If one follows the instructions as provided in the official website of LambdaTest, we can also observe that &lt;a href="https://www.lambdatest.com/integrations?utm_source=devto&amp;amp;utm_medium=organic&amp;amp;utm_campaign=nov22_pk&amp;amp;utm_term=pk&amp;amp;utm_content=blog" rel="noopener noreferrer"&gt;LambdaTest integration&lt;/a&gt; works smoothly to the above test run as well on any desired test environment.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AWCwlI3mBHzcxUDGbh_hCpA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AWCwlI3mBHzcxUDGbh_hCpA.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I simply followed the steps provided on the official website to check how the integration works in Jenkins, and to my surprise, it worked like magic without any extra effort.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AP7yPLbX_iBBQMwntkCnKVA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AP7yPLbX_iBBQMwntkCnKVA.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And the tests passed successfully in all the configured test environments!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;A complete &lt;a href="https://www.lambdatest.com/learning-hub/manual-testing?utm_source=devto&amp;amp;utm_medium=organic&amp;amp;utm_campaign=nov22_pk&amp;amp;utm_term=pk&amp;amp;utm_content=learning_hub" rel="noopener noreferrer"&gt;manual testing&lt;/a&gt; tutorial covering all aspects of Manual testing, including strategies and best practices.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;There is still an ocean left in Jenkins to explore, learn, integrate varieties of plugins, configure builds in several combinations of languages and source code repositories and make the process better with the integration of pipelines in different stages and steps across projects.&lt;/p&gt;

&lt;p&gt;Jenkins continuous integration is undoubtedly a one-step gateway for running quicker and automating robust ways to integrate the entire SDLC pipeline stages of build, test, and deploy effortlessly and efficiently by yourself at almost no extra cost. Now take your test scripts one step ahead with continuous integration with Jenkins and Git.&lt;/p&gt;

&lt;p&gt;Thanks for reading this article! Leave a comment below if you have any questions. You can always post any questions or queries on &lt;a href="https://community.lambdatest.com/?utm_source=devto&amp;amp;utm_medium=organic&amp;amp;utm_campaign=nov22_pk&amp;amp;utm_term=pk&amp;amp;utm_content=blog" rel="noopener noreferrer"&gt;LambdaTest Community&lt;/a&gt; for immediate assistance.&lt;/p&gt;

</description>
      <category>testing</category>
      <category>tutorial</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>24 Testing Scenarios you should not automate with Selenium</title>
      <dc:creator>Suparnakhamaru1</dc:creator>
      <pubDate>Tue, 22 Nov 2022 11:41:35 +0000</pubDate>
      <link>https://dev.to/testmuai/24-testing-scenarios-you-should-not-automate-with-selenium-29o2</link>
      <guid>https://dev.to/testmuai/24-testing-scenarios-you-should-not-automate-with-selenium-29o2</guid>
      <description>&lt;p&gt;While there is a huge demand and need to run Selenium &lt;a href="https://www.lambdatest.com/automation-testing?utm_source=devto&amp;amp;utm_medium=organic&amp;amp;utm_campaign=nov22_pk&amp;amp;utm_term=pk&amp;amp;utm_content=blog" rel="noopener noreferrer"&gt;Test Automation&lt;/a&gt;, the experts always suggest not to automate every possible test. Exhaustive Testing is not possible, and Automating everything is not sustainable.&lt;/p&gt;

&lt;p&gt;Let us consider an example of Selenium WebDriver in this article and analyse what Selenium test scenarios are not greatly supported with it when used as a stand-alone tool. We will also see what all Selenium test scenarios are not best for automation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Automated &lt;a href="https://www.lambdatest.com/blog/automated-functional-testing-what-it-is-how-it-helps/?utm_source=devto&amp;amp;utm_medium=organic&amp;amp;utm_campaign=nov22_pk&amp;amp;utm_term=pk&amp;amp;utm_content=blog" rel="noopener noreferrer"&gt;functional testing&lt;/a&gt; tests helps to ensure that your web app works as it was intended to. Learn more about functional tests, and how automating them can give you a faster release cycle!&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Selenium WebDriver
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.lambdatest.com/blog/selenium-webdriver-tutorial-with-examples/?utm_source=devto&amp;amp;utm_medium=organic&amp;amp;utm_campaign=nov22_pk&amp;amp;utm_term=pk&amp;amp;utm_content=blog" rel="noopener noreferrer"&gt;Selenium WebDriver&lt;/a&gt; is a web automation tool, primarily works best across different browsers, browser versions, and desktop platforms (e.g. Windows, macOS, etc.). . However, if we want to automate specific test scenarios that were initially not intended to be supported with Selenium, we would be doing something wrong.&lt;/p&gt;

&lt;p&gt;The agenda of this article is to create awareness of what Selenium test scenarios are NOT to be automated using Selenium WebDriver as a stand-alone tool.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Windows apps Testing
&lt;/h2&gt;

&lt;p&gt;As Selenium WebDriver is specifically used for automated testing of web applications, we cannot use it for windows based applications.&lt;/p&gt;

&lt;p&gt;For example, if we want to automate tests for a Windows application, such as a native ‘Calculator’, it is not possible via &lt;a href="https://www.lambdatest.com/selenium?utm_source=devto&amp;amp;utm_medium=organic&amp;amp;utm_campaign=nov22_pk&amp;amp;utm_term=pk&amp;amp;utm_content=blog" rel="noopener noreferrer"&gt;Selenium&lt;/a&gt;. We cannot even launch the Calculator app in the windows machine using Selenium or Appium commands.&lt;/p&gt;

&lt;p&gt;Hence, Microsoft has been implementing and working on automating tests on Windows-based applications, which were otherwise not possible in Selenium and Appium for the last few years.&lt;/p&gt;

&lt;p&gt;Today, Microsoft’s WinAppDriver works to a great extent when combined with the Selenium and Appium test framework on some of the native built-in apps of Windows 10 applications.&lt;/p&gt;

&lt;p&gt;WinAppDriver sounds promising on Windows Apps Testing, yet there is a minor limitation here. It requires a C# codebase environment such as Visual Studio to run the first-level automation test scenarios, running on Windows apps before configuring it on a CI/CD tool like &lt;a href="https://www.lambdatest.com/blog/what-is-jenkins/?utm_source=devto&amp;amp;utm_medium=organic&amp;amp;utm_campaign=nov22_pk&amp;amp;utm_term=pk&amp;amp;utm_content=blog" rel="noopener noreferrer"&gt;Jenkins&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Popular tools such as Sikuli and AutoIT are widely used to test applications of some Windows native components. that are often found integrated to an existing &lt;a href="https://www.lambdatest.com/selenium-testing-tool?utm_source=devto&amp;amp;utm_medium=organic&amp;amp;utm_campaign=nov22_pk&amp;amp;utm_term=pk&amp;amp;utm_content=blog" rel="noopener noreferrer"&gt;Selenium testing&lt;/a&gt; framework. This practice, in general, is not very helpful hence not much recommended for extensive usage.&lt;/p&gt;

&lt;p&gt;We also have HP’s UFT, which is licensed and used in some windows-based application testing purposes. One needs to know Visual Basic (VB) scripting, as the tool does not have a diverse language support feature like Selenium.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Mac apps Testing
&lt;/h2&gt;

&lt;p&gt;Similar to windows applications, Mac apps cannot be considered as Selenium test scenarios. However, Appium’s Mac driver can be integrated into an existing Selenium Test Framework to support a certain extent of basic automation on Mac applications.&lt;/p&gt;

&lt;p&gt;As Appium Mac Driver is a layer written on top of XCUITest Framework, it would also be a better idea to go with Apple’s XCUITest Framework..&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Native apps Testing for Mobiles/Tablets
&lt;/h2&gt;

&lt;p&gt;Selenium automation testing is not suited for testing native mobile applications. Appium, when combined with Selenium, works fine on mobile applications.&lt;/p&gt;

&lt;p&gt;Appium is a layer on top of UIAutomator, Espresso, and XCUITest frameworks. Hence, would be a better approach to go for the latter tools to achieve better efficiency and testability of maximum test scenarios.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Smart TV apps Testing
&lt;/h2&gt;

&lt;p&gt;Selenium does not support testing of apps developed for Smart Televisions (TVs) It would most probably continue to be unsupported in the future, as Selenium test scenarios are meant for automated cross browser testing.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. WatchOS apps Testing
&lt;/h2&gt;

&lt;p&gt;As of date, automating tests developed for smartwatches (e.g. iOS, Tizen, etc.) is not possible with Selenium automation framework. There are hardly any options to realize this testing.&lt;/p&gt;

&lt;p&gt;Undoubtedly, the same cannot be automated using Selenium anytime soon and shall remain unsupportive for some time to come.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Device / Hardware / Embed Testing
&lt;/h2&gt;

&lt;p&gt;Selenium cannot be used to automate testing on Customised/Embedded Hardware..&lt;/p&gt;

&lt;p&gt;Also, we always need to remember that if manual testing takes less time and effort, then automating those flows would be a bad idea, as automation test scenarios are usually considered for saving time, effort, and increasing reliability.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Captcha Verification
&lt;/h2&gt;

&lt;p&gt;‘Captcha’ stands for “Completely Automated Public Turing test to tell Computers and Humans Apart”. Captcha is one of the challenge-response tests widely used in many websites to verify if the accessing end-user is a bot or an actual human being.&lt;/p&gt;

&lt;p&gt;The standard practice while running automated test scenarios for Captcha, is to&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Disable Captcha in test environments OR&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Adding a hook to allow the tests to bypass the Captcha OR&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Making Captcha field as an optional field ONLY in test environment, so that if the Captcha step is skipped, test remains unimpacted&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;However, Selenium test automation cannot be used to perform Captcha verification. These tests can only be realized by using one of the above practices that helps in bypassing (or disabling) Captcha.&lt;/p&gt;

&lt;p&gt;Captcha has always been tricky for testers to automate &amp;amp; is possible under certain scenarios here a video for you to understand it better.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/CCcGPLaaU10"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Through this &lt;a href="https://www.lambdatest.com/learning-hub/usability-testing?utm_source=devto&amp;amp;utm_medium=organic&amp;amp;utm_campaign=nov22_pk&amp;amp;utm_term=pk&amp;amp;utm_content=learning_hub" rel="noopener noreferrer"&gt;usability testing&lt;/a&gt; tutorial, you will learn how usability testing is a great way to discover unexpected bugs, find what is unnecessary or unused before going any further, and have unbiased opinions from an outsider.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Barcode / QR Code Verification
&lt;/h2&gt;

&lt;p&gt;We cannot read barcodes or QR codes using Selenium Web Driver. Barcodes and QR codes can be automated, but in reality, do not serve the real-time purpose to automation.&lt;/p&gt;

&lt;p&gt;We have to integrate third-party APIs to the existing Selenium test scenarios for realizing automation of barcode/QR code verification. . However, it’s best if the test is performed in a manual manner as it yields higher accuracy.&lt;/p&gt;

&lt;h2&gt;
  
  
  9. Visual testing
&lt;/h2&gt;

&lt;p&gt;Visual Testing (also referred to as Screenshot testing) is aimed to check the GUI and ensure that it is displayed as intended. You can &lt;a href="https://www.lambdatest.com/blog/how-to-capture-screenshots-in-selenium-guide-with-examples/?utm_source=devto&amp;amp;utm_medium=organic&amp;amp;utm_campaign=nov22_pk&amp;amp;utm_term=pk&amp;amp;utm_content=blog" rel="noopener noreferrer"&gt;capture full page screenshots with Selenium&lt;/a&gt; as well as capture screenshots of WebElements on the page.&lt;/p&gt;

&lt;p&gt;However, visual Testing that primarily includes “Bitmap comparison” is significantly difficult to perform with Selenium Web Driver.&lt;/p&gt;

&lt;p&gt;In a nutshell, capturing screenshots is not a hassle in Selenium Automation Testing but performing a ‘visual comparison’ of the images can be a tedious process.&lt;/p&gt;

&lt;h2&gt;
  
  
  10. 2FA — Two Factor Authentication
&lt;/h2&gt;

&lt;p&gt;While it is possible to automate Two Factor Authentication mechanisms such as OTP validation, push notifications, etc. they are quite tedious and complicated to integrate with Selenium WebDriver. Only a limited part of the test process can be automated using the tool to run automated tests.&lt;/p&gt;

&lt;p&gt;You can validate the OTP indirectly by tweaking and looking at the page content displayed to the end-users on the AUT, post submission of the OTP.&lt;/p&gt;

&lt;p&gt;However, most organisations in the industry choose not to automate OTP submission &amp;amp; verification flow and prefer following one of the below test steps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Disabling 2FA for specific test credentials that are used for running automated tests.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Disabling 2FA in Test Environments completely when automation tests are run.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Disabling tests based on test machine IPs (It may not be a good approach in larger organisations where test machines are randomly chosen from a huge list of machines).&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  11. Performance testing
&lt;/h2&gt;

&lt;p&gt;Performance testing using Selenium Webdriver is not recommended. It is not like you cannot create Selenium test scenarios to run performance tests but Selenium is not optimized for the purpose of performance testing. Hence the entire exercise might not yield favorable results.&lt;/p&gt;

&lt;p&gt;Well, WebDriver tests are subjected to many points of external and internal fragility which are beyond your control (e.g. browser startup speed, speed of HTTP servers, the response of third-party servers that host JavaScript or CSS, and the instrumentation penalty of the WebDriver implementation itself).&lt;/p&gt;

&lt;p&gt;Instead, you can leverage tools that help you with front-end performance testing that provide accurate results. Tools like Google Lighthouse, &lt;a href="https://www.lambdatest.com/lt-browser?utm_source=devto&amp;amp;utm_medium=organic&amp;amp;utm_campaign=nov22_pk&amp;amp;utm_term=pk&amp;amp;utm_content=blog" rel="noopener noreferrer"&gt;LT Browser&lt;/a&gt; can help you run performance tests faster and more efficiently.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fztzqn94c26yi6eiomolm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fztzqn94c26yi6eiomolm.png" width="768" height="462"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  12. Security Testing
&lt;/h2&gt;

&lt;p&gt;Web application security (or website security) is considered a top-most priority by enterprises since it protects the web app and other online services against different security threats. Hence, most enterprises have a dedicated team of Cyber Security experts who use their own set of tools and technologies to perform security testing.&lt;/p&gt;

&lt;p&gt;Again, Selenium is not even counted in one of the tools through which security testing can be performed.Most in-demand tools used by cyber experts are JSky, Owasp Zap, Burp suite, etc.&lt;/p&gt;

&lt;h2&gt;
  
  
  13. API Testing
&lt;/h2&gt;

&lt;p&gt;API testing is usually performed with tools like Postman, RestAssured, etc. . Selenium WebDriver is usually not used when testing at the API-level. .&lt;/p&gt;

&lt;p&gt;It would be best to treat API testing as a separate testing type and run them separately in a different package/suite for achieving better visibility and efficiency.&lt;/p&gt;

&lt;h2&gt;
  
  
  14. Link spidering / Application Crawling
&lt;/h2&gt;

&lt;p&gt;Conducting App Crawling helps find the broken links easily at no extra cost and time. This helps to find out if the app is behaving weirdly.&lt;/p&gt;

&lt;p&gt;Many a time, link spidering is done in much easier steps and it hardly requires much time or effort to write the test scripts for the execution of the same.&lt;/p&gt;

&lt;p&gt;While there are several easier ways of conducting link spidering tests in apps, it is suggested not to use Selenium WebDriver to crawl into all the links in the apps. The primary reason is that tasks like &lt;a href="https://www.lambdatest.com/blog/broken-links-testing-using-selenium/?utm_source=devto&amp;amp;utm_medium=organic&amp;amp;utm_campaign=nov22_pk&amp;amp;utm_term=pk&amp;amp;utm_content=blog" rel="noopener noreferrer"&gt;finding broken links with Selenium WebDriver&lt;/a&gt; are suited when there are less number of links on the page (or website).&lt;/p&gt;

&lt;p&gt;Hence, you should choose tools for link spidering based on your requirements.&lt;/p&gt;

&lt;h2&gt;
  
  
  15. Email Integrations and Social Network Logins
&lt;/h2&gt;

&lt;p&gt;Another case where you should not automate Selenium test scenarios through UI is email and social media logins. Ideally doing this isn’t considered one of the &lt;a href="https://www.lambdatest.com/blog/27-best-practices-selenium-test-automation/?utm_source=devto&amp;amp;utm_medium=organic&amp;amp;utm_campaign=nov22_pk&amp;amp;utm_term=pk&amp;amp;utm_content=blog" rel="noopener noreferrer"&gt;best practices for automation&lt;/a&gt;. It is recommended to check the usage guidelines when performing automation else it might lead to serious consequences (including account shutdown).&lt;/p&gt;

&lt;p&gt;By integrating the above apps on the UI test layer might lead to test flakiness along with increased test maintenance.&lt;/p&gt;

&lt;p&gt;Hence, it is encouraged to use the API layers. By using the login and emailing features, the chances of breaking the API are comparatively lower. The end result is lower test flakiness and faster test execution.&lt;/p&gt;

&lt;h2&gt;
  
  
  16. Audio / Video streaming
&lt;/h2&gt;

&lt;p&gt;Consuming video content on YouTube and popular OTT platforms have become a norm. However, top-notch user experience can only be dished out if the product is thoroughly tested by the product development and testing teams.&lt;/p&gt;

&lt;p&gt;Testing or automating audio/video streaming on a large scale is still considered one of the biggest challenges. There are tweaks of trying to test it remotely by passing the URLs in sites such as StreamTest but the test result may not be very reliable or assuring to count on.&lt;/p&gt;

&lt;p&gt;While we are reaching a point to solve this problem via AI with better validation and verification of video quality to the end-users, it is not possible to automate with Selenium test scenarios as of date.&lt;/p&gt;

&lt;h2&gt;
  
  
  17. Screen Sharing platforms
&lt;/h2&gt;

&lt;p&gt;As remote working became the new normal since 2020, several online meeting platforms such as Zoom, Google Meet, etc. witnessed a surge in demand.&lt;/p&gt;

&lt;p&gt;With such tools in use on a large scale, testing and automating user test scenarios becomes much more critical. However, on closer inspection of the web pages of such platforms, we notice that tools like Selenium might not bring much-needed efficiency to the testing approach.&lt;/p&gt;

&lt;p&gt;Front end of most meeting apps do not meet the basic automatable criteria and might require tools more sophisticated than Selenium.&lt;/p&gt;

&lt;p&gt;As a result, many of these platforms collect feedback from their end-users to optimize the product features as per the feedback.&lt;/p&gt;

&lt;h2&gt;
  
  
  18. Image Verification
&lt;/h2&gt;

&lt;p&gt;Selenium Webdriver alone cannot be used for comparing expected and actual images. Third-party tools like AShot when integrated with existing Selenium Test Framework can help in achieving that task. However, the integration provides the flexibility to compare images to a minimal extent (i.e. comparison accuracy might not be that great)&lt;/p&gt;

&lt;p&gt;Although AShot cannot be used wholeheartedly across all the tests, it could be a boon in testing a few critical scenarios.&lt;/p&gt;

&lt;p&gt;Several open-source snapshot testing tools such as Uber’s snapshot test framework for iOS and Facebook’s Screenshot test for Android are popularly used across mobile-first projects.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/2qBnZRev_0g"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  19. Layout Testing
&lt;/h2&gt;

&lt;p&gt;Selenium can capture effective screenshots and save them in desired locations, as per our convenience across tests. AI-based comparison of the screenshots against expected screenshots is still not a built-in feature of Selenium.&lt;/p&gt;

&lt;p&gt;One particular tool which is quite popular among Layout testing tools is Galen Framework. It is widely used in &lt;a href="https://www.lambdatest.com/blog/responsive-design-testing-checklist/?utm_source=devto&amp;amp;utm_medium=organic&amp;amp;utm_campaign=nov22_pk&amp;amp;utm_term=pk&amp;amp;utm_content=blog" rel="noopener noreferrer"&gt;responsive web design testing&lt;/a&gt; of websites and apps.&lt;/p&gt;

&lt;p&gt;Tools like &lt;a href="https://www.lambdatest.com/lt-browser?utm_source=devto&amp;amp;utm_medium=organic&amp;amp;utm_campaign=nov22_pk&amp;amp;utm_term=pk&amp;amp;utm_content=blog" rel="noopener noreferrer"&gt;LT Browser&lt;/a&gt; make responsive testing faster and easier by providing 45+ screen resolutions for different mobiles, desktops, and tablets. Using LT Browser you can streamline UI/UX development, test content placement, layout alignments, and assess visually heavy websites on different screens side-by-side. Further, you can generate performance reports of your websites and &lt;a href="https://www.lambdatest.com/blog/test-mobile-websites-on-different-network-conditions/?utm_source=devto&amp;amp;utm_medium=organic&amp;amp;utm_campaign=nov22_pk&amp;amp;utm_term=pk&amp;amp;utm_content=blog" rel="noopener noreferrer"&gt;simulate network conditions&lt;/a&gt; to see how your website looks and behaves.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AU3uwDxE5gxCd2eVEypG9sQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AU3uwDxE5gxCd2eVEypG9sQ.png" width="768" height="462"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  20. File Upload and Verification
&lt;/h2&gt;

&lt;p&gt;We can go ahead and run &lt;a href="https://www.lambdatest.com/selenium-automation?utm_source=devto&amp;amp;utm_medium=organic&amp;amp;utm_campaign=nov22_pk&amp;amp;utm_term=pk&amp;amp;utm_content=blog" rel="noopener noreferrer"&gt;Selenium&lt;/a&gt; test scenarios in the web application where Selenium Webdriver can be used. For example, you can automate to mimic the action of a user clicking on the upload button (which can upload content such as an image, file or a video from the local system).&lt;/p&gt;

&lt;p&gt;However, post successful uploading action, we cannot validate using Selenium to verify if the file is successfully uploaded and displayed in the UI. We also need to rely on third-party tools like AutoIT to upload the contents from the local system for the Windows machine.&lt;/p&gt;

&lt;p&gt;And post upload, we may have to integrate it with another image verification tool to test that the image is successfully uploaded. This might sound impractical but is doable only if a business wants to automate the flow at any cost. Interestingly, human Intervention cannot be avoided if tests are flaky and unreliable.&lt;/p&gt;

&lt;p&gt;Do you know how to upload and download a file in Selenium? Watch this video to learn how to upload and download files in Selenium WebDriver using different techniques.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/vmwc_TK07SU"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  21. File Download and Verification
&lt;/h2&gt;

&lt;p&gt;While Selenium test scenarios can be used in performing the action to download a file/content from the web to the local system, it cannot validate the ongoing progress of the downloading content in the Downloads efficiently. The only way to verify if the file is downloaded is by comparing the number of items in the downloaded folder (before and after the download process).&lt;/p&gt;

&lt;p&gt;The usage of this feature is still limited and needs further improvements to help and conduct effective Selenium Test Automation.&lt;/p&gt;

&lt;p&gt;One simpler way is to use the HtmlUnit driver to download any attachments if one can’t avoid skipping it. Also, verifying if the downloaded content matches with the expected contents of the design specifications also requires human intervention to a certain extent.&lt;/p&gt;

&lt;h2&gt;
  
  
  22. Exploratory Testing
&lt;/h2&gt;

&lt;p&gt;The speciality of Exploratory Testing is completely based on human experience, instincts, and observation while exploring the app as an end-user.&lt;/p&gt;

&lt;p&gt;Ideally, &lt;a href="https://www.lambdatest.com/blog/9-must-have-skills-to-master-exploratory-testing/?utm_source=devto&amp;amp;utm_medium=organic&amp;amp;utm_campaign=nov22_pk&amp;amp;utm_term=pk&amp;amp;utm_content=blog" rel="noopener noreferrer"&gt;Exploratory Testing&lt;/a&gt; should not be automated using any Selenium test scenarios or any other automation tool. While exploratory testing is a recommended testing step in any release cycle, we should avoid trying to automate steps from Exploratory testing. It is best to perform exploratory testing using a manual approach under any given situation.&lt;/p&gt;

&lt;h2&gt;
  
  
  23. Usability Testing and Accessibility Testing
&lt;/h2&gt;

&lt;p&gt;Identifying tools and resources is critical in testing the app’s right UX and functional features from the end-users perspective. However, performing Usability Testing at scale can turn out to be a costly and time-consuming exercise.&lt;/p&gt;

&lt;p&gt;It does not matter how bug-free a built app is, and how efficient and fast the app performs if at the end of app release, the end-users find the app difficult to use or find is unusable due to poor UI/UX. Factors like efficiency, reliability, and impressive UI/UX go a long way in building a winning app experience.&lt;/p&gt;

&lt;p&gt;Accessibility Testing is a specialised form of testing that makes sure that the Application Under Test (AUT) is fit for use by the differently abled audience. Hence, accessibility testing is treated as one of the forms of usability testing.&lt;/p&gt;

&lt;p&gt;This testing type is also not the right tool to be used with Selenium WebDriver to automate Selenium test scenarios. Instead, you should opt for tools like Wave, Taw etc. This is a special form of testing, hence it is recommended to go for tools that test the applications particularly from an accessibility point of view.&lt;/p&gt;

&lt;h2&gt;
  
  
  24. Libraries and Frameworks Testing
&lt;/h2&gt;

&lt;p&gt;Most libraries and frameworks are functional in nature and require strict functional testing to be performed on them to achieve efficient and reliable test coverage.&lt;/p&gt;

&lt;p&gt;As Selenium Webdriver is a UI testing tool for Websites (or web apps), it would not be a good idea to use it for testing the built-in UI-less libraries and frameworks. Hence, you should look for better tools to test libraries and frameworks.&lt;/p&gt;

&lt;p&gt;Most teams may not rely on any third-party tools for simplicity. Most teams would like to automate tests and the developed source code itself using the development language and framework itself with minimal usage of testing frameworks such as Junit, Nunit, TestNG etc.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Black box testing? Don’t worry; we will be covering what is &lt;a href="https://www.lambdatest.com/learning-hub/black-box-testing?utm_source=devto&amp;amp;utm_medium=organic&amp;amp;utm_campaign=nov22_pk&amp;amp;utm_term=pk&amp;amp;utm_content=learning_hub" rel="noopener noreferrer"&gt;Blackbox testing&lt;/a&gt;, merits, demerits, types &amp;amp; techniques.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping it up!
&lt;/h2&gt;

&lt;p&gt;Well these are the 25 scenarios where performing test automation won’t be helpful to you. However there are chances that in some cases it might work, but you can refer to this blog and understand the reasons why it’s advisable to not automate these test scenarios. Perform your free end to end &lt;a href="https://www.lambdatest.com/automation-testing-platform?utm_source=medium&amp;amp;utm_medium=organic&amp;amp;utm_campaign=nov22_pk&amp;amp;utm_term=pk&amp;amp;utm_content=blog" rel="noopener noreferrer"&gt;automation testing&lt;/a&gt; at a blazing speed!!!&lt;/p&gt;

&lt;p&gt;Also, we need to constantly remind ourselves that automation is to help us save time, money and efforts. But one needs to have an understanding of Selenium’s core usage is browser compatibility testing.&lt;/p&gt;

&lt;p&gt;Suppose any automated script time or execution time is exceeding the time taken to run manually. In that case, the same may not be the best scenario to automate in the real world, unless the automated work reduces the time in the long run effectively or helps business reach the market fast with quicker &amp;amp; reliable releases. You just cannot use Selenium everywhere!&lt;/p&gt;

&lt;p&gt;Just how exploratory testing is impossible, automating everything is also a bad move in many cases. Prioritising what tests to automate first and how quickly to integrate the created automated tests to CI-CD pipelines to add value in the development lifecycle is way more important than automating each and every use case in the project. I hope this article helps you understand why you shouldn’t automate everything using Selenium. Feel free to reach out if you have any questions or feedback.&lt;/p&gt;

&lt;p&gt;Happy Testing!&lt;/p&gt;

</description>
      <category>testing</category>
      <category>tutorial</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>Complete Guide To Selenium Testing with GitHub Actions</title>
      <dc:creator>Suparnakhamaru1</dc:creator>
      <pubDate>Tue, 22 Nov 2022 09:25:05 +0000</pubDate>
      <link>https://dev.to/testmuai/complete-guide-to-selenium-testing-with-github-actions-1gn</link>
      <guid>https://dev.to/testmuai/complete-guide-to-selenium-testing-with-github-actions-1gn</guid>
      <description>&lt;p&gt;CI/CD pipelines are here to stay and contribute tremendously to continuous integration and delivery across all global projects. This article will be a guide to configure, set up builds and tests with “GitHub Actions”, primarily using &lt;a href="https://www.lambdatest.com/blog/selenium-webdriver-tutorial-with-examples/?utm_source=devto&amp;amp;utm_medium=organic&amp;amp;utm_campaign=nov22_pk&amp;amp;utm_term=pk&amp;amp;utm_content=blog" rel="noopener noreferrer"&gt;Selenium WebDriver&lt;/a&gt;. This article shall also cover some of the most generic GitHub Actions examples, and user flows.&lt;/p&gt;

&lt;p&gt;You can accelerate your test cycles and trim down your overall test execution by running Selenium tests in parallel from &lt;a href="https://www.lambdatest.com/run-selenium-tests-in-github-actions?utm_source=devto&amp;amp;utm_medium=organic&amp;amp;utm_campaign=nov22_pk&amp;amp;utm_term=pk&amp;amp;utm_content=blog" rel="noopener noreferrer"&gt;GitHub Actions on LambdaTest cloud&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Let’s get right into it, starting with an intro to Selenium GitHub Actions!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;In this &lt;a href="https://www.lambdatest.com/appium?utm_source=devto&amp;amp;utm_medium=organic&amp;amp;utm_campaign=nov22_pk&amp;amp;utm_term=pk&amp;amp;utm_content=webpage" rel="noopener noreferrer"&gt;Appium Automation&lt;/a&gt; tutorial, learn about Appium and its benefits for mobile automation testing. Take a look at how Appium works and see how to perform Appium testing of your mobile applications.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction to GitHub Actions
&lt;/h2&gt;

&lt;p&gt;GitHub Actions is one of the most recent CI workflow mechanisms that is looking not only impactful and promising but also quick and easy. The configurations and set-up are found to be within the Git repository pages. It’s now easier than ever to automate your software workflows, thanks to GitHub Actions, including CI/CD. As we no longer need to go to a third-party site to peek on our build runs, it’s going to save a lot of our otherwise spent time. To get started with &lt;a href="https://www.lambdatest.com/selenium-automation?utm_source=devto&amp;amp;utm_medium=organic&amp;amp;utm_campaign=nov22_pk&amp;amp;utm_term=pk&amp;amp;utm_content=blog" rel="noopener noreferrer"&gt;Selenium test automation&lt;/a&gt;, we must first understand the following GitHub Actions example.&lt;/p&gt;

&lt;h2&gt;
  
  
  GitHub Actions Component
&lt;/h2&gt;

&lt;p&gt;If we visit any GitHub repository project, we will notice a series of menu tabs, as shown in the below sample figure.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AEh6uqiPkdS-QPm77wl-VUw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AEh6uqiPkdS-QPm77wl-VUw.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The red highlighted box in the above figure is the section of our interest, where lies different varieties of GitHub workflows and GitHub Actions components.&lt;/p&gt;

&lt;p&gt;Attached below is a GitHub Actions tab screen figure when sample workflows are set up and running.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AqXZA922D5e3F399PcFJvYw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AqXZA922D5e3F399PcFJvYw.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Like the usual CI mechanism, if the build passes, then we see a Green Tick Mark (✅). If the build fails, then we see a Red Cross Mark (❌) beside the particular run, which is usually auto-initiated as soon as the user commits any change in the GitHub repository.&lt;/p&gt;

&lt;p&gt;GitHub Actions tab primarily provides us with a mechanism to build multiple workflows as per the instructions or commands provided in YAML files, placed in .github/workflows folder of the GitHub repository, as can be observed in the figure below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AVEaM4luufovE4s612Nmf6w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AVEaM4luufovE4s612Nmf6w.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The GitHub Actions tab screen also provides the flexibility to filter build runs as per our need with few basic filtering options. We can either search or use the filtering options directly.&lt;/p&gt;

&lt;p&gt;Provided below is an image of a sample scenario where the user views the filtered view of the run builds triggered on every git push that passed successfully. We can observe that build run time is also displayed on the right side of each ran build in the displayed workflow view.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2A1Zptc-UfAv1hRuYalxQ4iA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2A1Zptc-UfAv1hRuYalxQ4iA.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Creating GitHub Actions Workflow
&lt;/h2&gt;

&lt;p&gt;When a user visits the GitHub Actions tab for the first time, when no configurations are done yet, we will notice a view attached in the screen below.&lt;/p&gt;

&lt;p&gt;We may also notice that GitHub is auto-suggesting users to set up the possible workflow to be selected at the top of the page.&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If the project is a Swift project, automatically, the user is suggested to set up a “Swift” workflow at the top of the suggestions list, as we would notice below shortly.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AOkoD96ykRG5tAhAy1GUBOg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AOkoD96ykRG5tAhAy1GUBOg.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If the project is a Maven-based Java project, automatically, a user is suggested to set up the “Java with Maven” workflow at the top of the suggestions list.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AIkDVQfaKyzfNqNeLu85D3A.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AIkDVQfaKyzfNqNeLu85D3A.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Suppose a user selects any of the above-listed options based on the project’s need. In that case, the user is already automatically provided with auto-generated scripts in a YAML file, which can be further configured as per our need and then committed into the existing GitHub repository.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AlVoAUHxGbU_U8qBbiEEZ5g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AlVoAUHxGbU_U8qBbiEEZ5g.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once the YAML file is committed &amp;amp; pushed to GitHub repo with required commands/instructions, we would start noticing that the workflow is triggered automatically. The build starts running remotely on the same GitHub Actions tab. We can see the status of the build run as well on the same screen.&lt;/p&gt;

&lt;p&gt;Now, let us create a new workflow and see how it works below:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1:&lt;/strong&gt; Let us consider a Sample Test repository of an XCUITest Swift project.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AQsVf45VIgPvv6mP_wwbYzw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AQsVf45VIgPvv6mP_wwbYzw.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2:&lt;/strong&gt; Click on the “&lt;strong&gt;Actions&lt;/strong&gt;” tab of the XCUITest GitHub repository page.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AQ3qtItb0LGvM3hHIgyeq6Q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AQ3qtItb0LGvM3hHIgyeq6Q.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3:&lt;/strong&gt; When no workflows are set up yet, we would most probably notice that the GitHub Actions page already auto-suggests us to set up a recommended workflow at the top of the page, as can be found from the screenshot below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2A_aN4poCW13aD69WQsQ9hoQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2A_aN4poCW13aD69WQsQ9hoQ.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4:&lt;/strong&gt; Click on the “&lt;strong&gt;Set up this workflow&lt;/strong&gt;” button in the required workflow, which we want to set up. In this case, it would be the Swift workflow, as our chosen sample XCUITest project is a Swift based project.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AOXluxnN0EkzHuydrx7bAsA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AOXluxnN0EkzHuydrx7bAsA.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5:&lt;/strong&gt; Immediately, we would notice that a list of predefined commands is automatically generated, as shown below.&lt;/p&gt;

&lt;p&gt;While a slight modification would be required to build any set-up, the basic commands are auto-generated by GitHub’s initial sample set up, which we can modify based on our project’s need further.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AFPHqCZv59mckkZpJLfrlOQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AFPHqCZv59mckkZpJLfrlOQ.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 6:&lt;/strong&gt; On the right side of the page, we would notice the “&lt;strong&gt;Start commit&lt;/strong&gt;” button.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2ABeGvMakxDFKckMEE4ylWLQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2ABeGvMakxDFKckMEE4ylWLQ.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 7:&lt;/strong&gt; Clicking on the “Start commit” button allows the user not only to add comments for commit, but also lets the user to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Directly commit to master / main, which is selected by default, as can be observed from the figure below.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create a new branch for the user to create a new pull request.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AqcdP1DkBc6N_hu-MavvCIg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AqcdP1DkBc6N_hu-MavvCIg.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 8:&lt;/strong&gt; Once the commit is successfully done, we would notice that our new workflow is successfully created in the “&lt;strong&gt;Actions&lt;/strong&gt;” tab, where initially the workflow’s build job goes into a Queue.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2ADJ9qsCmShX4ohFXfoSNbOA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2ADJ9qsCmShX4ohFXfoSNbOA.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 9:&lt;/strong&gt; Post Queue, the workflow’s build job starts building and running the instructions/commands in the YAML file committed by us and changes the build status from “&lt;strong&gt;Queued&lt;/strong&gt;” to “&lt;strong&gt;In progress&lt;/strong&gt;“.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AVE9jJ1Xhy4hbWa7lgAhLfQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AVE9jJ1Xhy4hbWa7lgAhLfQ.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 10:&lt;/strong&gt; Post completion of all the build runs, we would notice the status changed to pass/fail based on the outcome of the build run.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If the build passes, then we see a Green Tick Mark (✅) beside the built run.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AEzhrlqB3XF8DV6ESFun3Ew.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AEzhrlqB3XF8DV6ESFun3Ew.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If the build fails, then we see a Red Cross Mark (❌) beside the built run.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2APqSO3G_5JFRU0TwQQo6yNw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2APqSO3G_5JFRU0TwQQo6yNw.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;a href="https://www.lambdatest.com/test-website-on-different-browsers?utm_source=devto&amp;amp;utm_medium=organic&amp;amp;utm_campaign=nov22_pk&amp;amp;utm_term=pk&amp;amp;utm_content=webpage" rel="noopener noreferrer"&gt;Test website on different browsers&lt;/a&gt;  on a cloud platform. Get instant access of Browsers like Chrome, Safari, Firefox, Opera, Yandex, Brave, 3000+ desktop &amp;amp; mobile environments. Try for free!&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Workflow File Structure
&lt;/h2&gt;

&lt;p&gt;One GitHub Repository may have multiple workflows configured, each building different actions required for building, testing, and deploying. The workflow file structure looks very similar to the Jenkins-file and CircleCI config (YAML) file formats. So, the formats we need to keep in our mind while dealing with YAML files are that we cannot enter incorrect formats, and we need to follow the proper indentation, colons and dashes all across the file, which primarily consists of key-value pairs, lists and maps.&lt;/p&gt;

&lt;p&gt;Below is an example of a sample skeleton auto-generated when the project’s workflow is selected as “Java with Maven” based.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2A8cf_kciWFIp3OTmgoq_LCw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2A8cf_kciWFIp3OTmgoq_LCw.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When we look closely at the syntaxes of the commands used in the above Yaml file, the following shall be observed-&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Name of workflow&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;On Attribute&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Jobs&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Job name&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Job runner information&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Job Steps&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let us explore all these one by one.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to name your Workflow?
&lt;/h2&gt;

&lt;p&gt;If we want to have multiple workflows to build a CI pipeline to run tests with &lt;a href="https://www.lambdatest.com/run-selenium-tests-in-github-actions?utm_source=devto&amp;amp;utm_medium=organic&amp;amp;utm_campaign=nov22_pk&amp;amp;utm_term=pk&amp;amp;utm_content=blog" rel="noopener noreferrer"&gt;Selenium GitHub Actions&lt;/a&gt;, it is recommended to name your workflows accordingly. It is also to be noted that it is not a mandatory field, and if skipped, GitHub shall create a default name for us from the defined path &amp;amp; name of the file.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AiQixIvGjleDVHiBHHZYWQQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AiQixIvGjleDVHiBHHZYWQQ.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the above-configured YAML file, line 4, key — ‘name’ denotes the name of the Workflow, the value of which shall be displayed in the ‘Actions’ tab, post configuration as shown below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2A6HPZFnB4h-oo7zV69gsEIg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2A6HPZFnB4h-oo7zV69gsEIg.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  When to trigger the Workflow?
&lt;/h2&gt;

&lt;p&gt;‘On’ attribute is mandatory and is seen as an important step to be added in every workflow as this step allows the user to define when to run the workflow in a GitHub Actions example.&lt;/p&gt;

&lt;p&gt;There are different approaches to trigger the workflow, such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;push&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;pull_request&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;release&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;…and many more.&lt;/p&gt;

&lt;p&gt;We can also use the above events in different ways with Selenium GitHub Actions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where do the Build Jobs run?
&lt;/h2&gt;

&lt;p&gt;Based on the user-chosen build machine configuration, primarily from the below list of predefined GitHub supported VMs, all GitHub jobs run in the Actions tab.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AlwtZ4GVqT3UTyayAzYm8QQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AlwtZ4GVqT3UTyayAzYm8QQ.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In our example, we have chosen “&lt;strong&gt;macos-latest&lt;/strong&gt;” to run our build from the above list of GitHub supported VMs. We can alternatively use any of the other VM with required specific OS versions as well.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AS7CtoP5ky8cg4AFD0QaSCw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AS7CtoP5ky8cg4AFD0QaSCw.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How to configure steps for the Build Runs?
&lt;/h2&gt;

&lt;p&gt;Let us consider a sample example of a Maven &amp;amp; Java based Test project.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2A7C2uEc5L1IR7Ir5BxYtlfA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2A7C2uEc5L1IR7Ir5BxYtlfA.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Jobs and Job Name&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In the above workflow sample, our jobname is “&lt;strong&gt;build&lt;/strong&gt;” in line 13, right under ‘&lt;strong&gt;jobs&lt;/strong&gt;’. We also name it “&lt;strong&gt;maven_build_job&lt;/strong&gt;” if that lets the user know better about the job.&lt;/p&gt;

&lt;p&gt;We should note that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Every workflow must have at least one job.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;All workflow jobs run in parallel by default.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AUdXpaONomkkBrA-iuLI3PA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AUdXpaONomkkBrA-iuLI3PA.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Each job may have multiple job steps.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If any job needs to be run in sequential order like in a CI pipeline, where the test job needs to run after completion of the build job, we can add “needs” dependency in the test job.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AuN8uNyx0mYdmgsffuIbjwg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AuN8uNyx0mYdmgsffuIbjwg.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As a result of which, the same pipeline status can be viewed when a PR is raised, as shown below:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AZZKP7HXVANtpO3INgAm1vg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AZZKP7HXVANtpO3INgAm1vg.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Job Steps&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It consists of a List of defined commands that perform certain actions.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Each Step may have the following parameters:&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;name -&amp;gt; optional&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;uses -&amp;gt; defines “what action to use” and “location of action”.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;runs -&amp;gt; one or series of commands to run in the Job Step in OS’ default shell&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;An example of a Job step can be observed below:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AE5BeoH2_mJ6nIVbKFyLPQg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AE5BeoH2_mJ6nIVbKFyLPQg.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How do Pull Requests reflect on the Build Runs?
&lt;/h2&gt;

&lt;p&gt;All the latest build runs of GitHub commits in PR are automatically linked to the below-marked section. Clicking on the “Details” link also navigates the user to respective builds.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AJDmqYSdY16_fs53m527csQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AJDmqYSdY16_fs53m527csQ.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A sample view of a build is provided below when a user clicks on the Details link in the Build run section of Pull Request.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AZPNjrrHJbjInfX9XniuaNg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AZPNjrrHJbjInfX9XniuaNg.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We can also click on each of the above accordions to view the detailed logs of the build runs step by step.&lt;/p&gt;

&lt;p&gt;One such accordion is expanded below for our understanding. We can click and expand multiple accordions if required, based on our convenience.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2A4VP4lFfbpiQL1BTRIsKAzg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2A4VP4lFfbpiQL1BTRIsKAzg.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How to manage your Workflow runs?
&lt;/h2&gt;

&lt;p&gt;While we can also build CI pipelines using Selenium GitHub Actions, there is much more we can do from what we have discussed in this article, considering all GitHub Actions examples.&lt;/p&gt;

&lt;p&gt;Some of them are listed down:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Deleting a workflow&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AYREVB5Rn37m4RazEmtIqBg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AYREVB5Rn37m4RazEmtIqBg.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Disable a workflow&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Clicking on the below marked “&lt;strong&gt;Disable workflow&lt;/strong&gt;” button in the workflow build screen disables the selected workflow from the Actions tab.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AUU_L69QdZga8uWrB0SA0cw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AUU_L69QdZga8uWrB0SA0cw.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Cancelling a running workflow&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If a workflow is currently running, we can cancel the build run by clicking on the “&lt;strong&gt;Cancel workflow&lt;/strong&gt;” button highlighted below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AgWVznW38nC-B6skhZwTWCw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AgWVznW38nC-B6skhZwTWCw.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Post cancellation of the running workflow, we would notice the below screen.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2A3WNG5_mieBg65yf_PbdoWg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2A3WNG5_mieBg65yf_PbdoWg.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Re-running a workflow&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Manual click of the “&lt;strong&gt;Re-run jobs&lt;/strong&gt;” button as marked in the workflow screen re-runs the selected build again.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AkdxOwnOfSYHwrJPJh5r1LQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AkdxOwnOfSYHwrJPJh5r1LQ.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Creating Status badges&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If we view any build run in Actions tab, we would notice three-dots on the right side of the screen as shown in the image below, which is selected in blue below “Re-run jobs” dropdown.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2Asp7PKiS_YdT9q4E5lVR-bw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2Asp7PKiS_YdT9q4E5lVR-bw.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On clicking above “…” button, we click on “&lt;strong&gt;Create status badge&lt;/strong&gt;”, copy the content and paste it in our desired location such as in the readme file to denote the latest build run status as shown below in the red highlighted section.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2A-LSUwT65cjsNTP6IaV4J4w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2A-LSUwT65cjsNTP6IaV4J4w.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How does the Build Run in ‘Actions’ workflow when triggered?
&lt;/h2&gt;

&lt;p&gt;Upon completing the successful build run of the commit change, we can also observe and analyze the step-by-step build run as we see in any other CI-CD tool, as shown below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AP9C6LA2qshw7fZX3BRJ5Fg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AP9C6LA2qshw7fZX3BRJ5Fg.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can accelerate your test cycles and trim down your overall test execution by running Selenium tests in parallel from &lt;a href="https://www.lambdatest.com/run-selenium-tests-in-github-actions?utm_source=devto&amp;amp;utm_medium=organic&amp;amp;utm_campaign=nov22_pk&amp;amp;utm_term=pk&amp;amp;utm_content=blog" rel="noopener noreferrer"&gt;GitHub Actions on LambdaTest cloud&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Executing Selenium Testing Scripts with GitHub Actions Workflow
&lt;/h2&gt;

&lt;p&gt;We hope all the GitHub Actions examples above have helped you understand the workflow better. Now, let us configure a workflow by applying all the above GitHub concepts we learned so far with Selenium test automation..&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Sample Selenium Test Script&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Write a sample test class in your sample Maven Java project, integrated with Junit under the folder src/test/java.&lt;/p&gt;

&lt;p&gt;package SeleniumProject.Maven;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import java.util.concurrent.TimeUnit;
    import org.junit.Test;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.chrome.ChromeDriver;
    import org.openqa.selenium.chrome.ChromeOptions;
    import io.github.bonigarcia.wdm.WebDriverManager;

    public class AppTest 
    { 
     public WebDriver driver; 
     public String baseUrl = "https://www.lambdatest.com/";  

     @Test             
     public void test1() {      

      WebDriverManager.chromedriver().setup();
      ChromeOptions options = new ChromeOptions();
      options.addArguments("--no-sandbox");
      options.addArguments("--disable-dev-shm-usage");
      options.addArguments("--headless");
      driver = new ChromeDriver(options);

      driver.manage().timeouts().implicitlyWait(20,TimeUnit.SECONDS);  
      driver.manage().window().maximize();  
      driver.get(baseUrl);
      driver.close();
     }     
    }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 2: Adding dependencies&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Make sure to add the mentioned below required dependencies in pom.xml file&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; &amp;lt;dependencies&amp;gt;
        &amp;lt;dependency&amp;gt;
          &amp;lt;groupId&amp;gt;junit&amp;lt;/groupId&amp;gt;
          &amp;lt;artifactId&amp;gt;junit&amp;lt;/artifactId&amp;gt;
          &amp;lt;version&amp;gt;4.11&amp;lt;/version&amp;gt;
          &amp;lt;scope&amp;gt;test&amp;lt;/scope&amp;gt;
        &amp;lt;/dependency&amp;gt;
        &amp;lt;dependency&amp;gt;  
     &amp;lt;groupId&amp;gt;org.seleniumhq.selenium&amp;lt;/groupId&amp;gt;  
     &amp;lt;artifactId&amp;gt;selenium-java&amp;lt;/artifactId&amp;gt;  
     &amp;lt;version&amp;gt;3.141.59&amp;lt;/version&amp;gt;  
        &amp;lt;/dependency&amp;gt;  
        &amp;lt;dependency&amp;gt;
     &amp;lt;groupId&amp;gt;io.github.bonigarcia&amp;lt;/groupId&amp;gt;
     &amp;lt;artifactId&amp;gt;webdrivermanager&amp;lt;/artifactId&amp;gt;
     &amp;lt;version&amp;gt;4.3.1&amp;lt;/version&amp;gt;
        &amp;lt;/dependency&amp;gt;
      &amp;lt;/dependencies&amp;gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 3: Workflow Configuration&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;While adding a new workflow, make sure to add the below YAML file lines as provided below.&lt;br&gt;
If we note closely, there is no significant difference between test_1 and test_2, as only the maven test command is run differently.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  name: Build and Test

    on: [push]

    jobs:
      build:
        runs-on: ubuntu-latest
        steps:
        - uses: actions/checkout@v2
        - name: Set up JDK 1.8
          uses: actions/setup-java@v1
          with:
            java-version: 1.8
        - name: Build with Maven
          run: mvn -B package --file pom.xml
      test_1:
        runs-on: ubuntu-latest
        steps:
        - uses: actions/checkout@v2
        - name: Set up JDK 1.8
          uses: actions/setup-java@v1
          with:
            java-version: 1.8
        - name: Test with Maven
          run: mvn clean test
      test_2:
        runs-on: ubuntu-latest
        steps:
        - uses: actions/checkout@v2
        - name: Set up JDK 1.8
          uses: actions/setup-java@v1
          with:
            java-version: 1.8
        - name: Test with Maven
          run: mvn -B package --file pom.xml test

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 4: Test Executions in GitHub Actions Workflow&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Post running of all workflows in the GitHub Actions tab, we should notice the outcome/status of all Build runs in the below format.&lt;/p&gt;

&lt;p&gt;As we can notice below, the builds have run successfully, but each of the test jobs also has run successfully in a few seconds.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2Anu-2rBm3mVXBu5TS7pY7VQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2Anu-2rBm3mVXBu5TS7pY7VQ.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5:&lt;/strong&gt; If there is an error of Google Chrome not installed in the configured VM, we may have to add the below configuration in the above workflow Yaml file. Although, this may be an optional step.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  jobs:
      build:

        runs-on: ubuntu-latest

        steps:
        - uses: actions/checkout@v2
        - name: Set up JDK 1.8
          uses: actions/setup-java@v1
          with:
            java-version: 1.8
            server-id: github 
            settings-path: ${{ github.workspace }} 
        - name:  Install Google Chrome 
          run:   |
                  chmod +x ./scripts/InstallChrome.sh
                              ./scripts/InstallChrome.sh 
        - name: Build with Maven
          run: mvn -B package --file pom.xml test

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the above lines of code, we may also notice that on the Step Install Google Chrome: multiple commands are passed for running. This syntax is to be used whenever we want to pass multiple commands in a single build step run.&lt;/p&gt;

&lt;h2&gt;
  
  
  Executing Selenium Test Automation with LambdaTest and GitHub Actions
&lt;/h2&gt;

&lt;p&gt;In order to perform &lt;a href="https://www.lambdatest.com/run-selenium-tests-in-github-actions?utm_source=devto&amp;amp;utm_medium=organic&amp;amp;utm_campaign=nov22_pk&amp;amp;utm_term=pk&amp;amp;utm_content=blog" rel="noopener noreferrer"&gt;Selenium GitHub Actions using LambdaTest&lt;/a&gt;, we need to set it up by following the instructions provided on the &lt;a href="https://www.lambdatest.com/support/docs/testing-locally-hosted-pages/?utm_source=devto&amp;amp;utm_medium=organic&amp;amp;utm_campaign=nov22_pk&amp;amp;utm_term=pk&amp;amp;utm_content=blog" rel="noopener noreferrer"&gt;official website&lt;/a&gt;. Once you have done that, we can start your first &lt;a href="https://www.lambdatest.com/support/docs/testing-locally-hosted-pages/?utm_source=devto&amp;amp;utm_medium=organic&amp;amp;utm_campaign=nov22_pk&amp;amp;utm_term=pk&amp;amp;utm_content=blog" rel="noopener noreferrer"&gt;LambdaTest tunnel&lt;/a&gt; using our LambdaTest credentials in the Terminal/Command Prompt app of your system.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AUpJ3j0RWCZg5lEJOEyXtRg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AUpJ3j0RWCZg5lEJOEyXtRg.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once the tunnel is started, let us try to test it after integrating the Tunnel to Github Actions by passing the following commands in the GitHub Actions’ YAML file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
    name: Java CI with Maven Test run

    on: [push]

    jobs:  
      test-in-LT-tunnel:
        runs-on: ubuntu-latest
        steps:
        - name: Start Tunnel
          uses: LambdaTest/LambdaTest-tunnel-action@v1
          id: tunnel-id
          with:
             user: suparna3107@gmail.com
             accessKey: add your own access key here..
             tunnelName: "testTunnel-id"
        - uses: actions/checkout@v2
        - name: Set up JDK 1.8
          uses: actions/setup-java@v1
          with:
            java-version: 1.8
        - name: Build with Maven
          run: mvn clean test
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The above commands should start following all the passed instructions, and we should see a screen such as shown below in the Github Actions tab for the newly committed code.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2APNF51iWVtJKAtfRNRDfdVQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2APNF51iWVtJKAtfRNRDfdVQ.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To ensure that there are multiple tunnel commands in multiple files, we need to provide unique tunnel ID names to each command run so that our tests or builds do not fail due to the same tunnel name copied everywhere.&lt;/p&gt;

&lt;p&gt;When the build job is run successfully, The build job turns green, and we can see that all the build job steps have passed successfully, as shown below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AKwCsUS6-rez7H9yEo3yuBA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AKwCsUS6-rez7H9yEo3yuBA.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;New &lt;a href="https://www.lambdatest.com/blog/selenium-ide-what-is-it-why-is-it-must-for-every-qa/?utm_source=devto&amp;amp;utm_medium=organic&amp;amp;utm_campaign=nov22_pk&amp;amp;utm_term=pk&amp;amp;utm_content=blog" rel="noopener noreferrer"&gt;Selenium IDE&lt;/a&gt; supports cross browser testing and parallel tests for automation along with record and replay function. Here’s why you shouldn’t miss out on it!&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  That’s All, Folks!
&lt;/h2&gt;

&lt;p&gt;Congratulations! We have just created a series of CI workflows for executing Selenium tests with Java and Maven. Github Actions has made CI look much more straightforward than ever before, right?&lt;br&gt;
Similarly, the above approaches can be used for building and running all other tests as well just by changing the run command in job steps where required. This is a crucial step to perform Selenium test automation with GitHub Actions. Run your &lt;a href="https://www.lambdatest.com/run-selenium-tests-in-github-actions?utm_source=devto&amp;amp;utm_medium=organic&amp;amp;utm_campaign=nov22_pk&amp;amp;utm_term=pk&amp;amp;utm_content=blog" rel="noopener noreferrer"&gt;Selenium tests in GitHub Actions&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Feel free to explore the sample project here to explore and have further hands-on experience with Selenium GitHub Actions.&lt;/p&gt;

&lt;p&gt;Happy testing!&lt;/p&gt;

</description>
      <category>testing</category>
      <category>tutorial</category>
      <category>github</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
