<?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: Jeissy Guimarães</title>
    <description>The latest articles on DEV Community by Jeissy Guimarães (@jeissyguimaraes).</description>
    <link>https://dev.to/jeissyguimaraes</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%2F1743383%2F9a9bc0c1-0880-43b9-8673-33ec8fb60c3d.jpeg</url>
      <title>DEV Community: Jeissy Guimarães</title>
      <link>https://dev.to/jeissyguimaraes</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jeissyguimaraes"/>
    <language>en</language>
    <item>
      <title>Building a Test Automation Architecture with Java, Selenium, Maven, Docker, and Jenkins CI/CD</title>
      <dc:creator>Jeissy Guimarães</dc:creator>
      <pubDate>Sun, 04 Aug 2024 23:13:52 +0000</pubDate>
      <link>https://dev.to/jeissyguimaraes/building-a-test-automation-architecture-with-java-selenium-maven-docker-and-jenkins-cicd-3clp</link>
      <guid>https://dev.to/jeissyguimaraes/building-a-test-automation-architecture-with-java-selenium-maven-docker-and-jenkins-cicd-3clp</guid>
      <description>&lt;p&gt;&lt;strong&gt;Overview&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In today's fast-paced development environment, maintaining a robust test automation architecture is crucial. Our project, selenium_java_test_automation_ach, is designed to streamline automated testing using Java, Selenium, Maven, Docker, and Jenkins CI/CD. This architecture not only adheres to the SOLID principles but also incorporates best coding practices to ensure maintainable and scalable code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Project Objectives&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;🔍 &lt;strong&gt;Automated Testing:&lt;/strong&gt; Implement a comprehensive automated testing solution using Selenium and Java;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📊 &lt;strong&gt;Comprehensive Reports:&lt;/strong&gt; Generate detailed test reports with ExtentReports;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🚀 &lt;strong&gt;CI/CD Integration:&lt;/strong&gt; Ensure seamless integration into CI/CD pipelines using Jenkins;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🌐 &lt;strong&gt;Multi-browser Support:&lt;/strong&gt; Provide support for multiple browsers (Chrome, Firefox, Edge), including headless mode&lt;br&gt;
Key Features;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🖥️&lt;strong&gt;ExtentReports for Test Sessions:&lt;/strong&gt; Initialization and closure of test sessions with ExtentReports, including WebDriver configuration;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📸 &lt;strong&gt;Visual Capture and Comparison:&lt;/strong&gt; Capture and compare screenshots of web pages against a predefined visual baseline;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🔧 &lt;strong&gt;WebDriver Configuration:&lt;/strong&gt; Flexible WebDriver setup supporting multiple browsers and headless mode;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🤖 &lt;strong&gt;Selenium Automation:&lt;/strong&gt; Leverage Selenium to automate browser interactions, page navigations, and checkpoints.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Technologies Used&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;☕&lt;strong&gt;Java:&lt;/strong&gt; The core programming language for writing test cases;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🌐 &lt;strong&gt;Selenium:&lt;/strong&gt; A powerful tool for browser automation;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🧪 &lt;strong&gt;TestNG:&lt;/strong&gt; Framework for managing and executing tests;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📊 &lt;strong&gt;ExtentReports:&lt;/strong&gt; Library for generating detailed and visual test reports;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;✨ &lt;strong&gt;Lombok:&lt;/strong&gt; Utility to reduce boilerplate code;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;⚙️ &lt;strong&gt;Jenkins:&lt;/strong&gt; Continuous integration and deployment server;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🐳 &lt;strong&gt;Docker:&lt;/strong&gt; Platform for developing, shipping, and running applications in containers;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;SOLID Principles and Best Practices&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This project is developed following SOLID principles and best coding practices to ensure a maintainable and scalable foundation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Single Responsibility Principle:&lt;/strong&gt; Each class has a single responsibility.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Open/Closed Principle:&lt;/strong&gt; Classes are open for extension but closed for modification.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Liskov Substitution Principle:&lt;/strong&gt; Subclasses should replace their base classes without breaking the application.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Interface Segregation Principle:&lt;/strong&gt; Create specific interfaces for clients, avoiding monolithic interfaces.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Dependency Inversion Principle:&lt;/strong&gt; Depend on abstractions, not on concrete implementations.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0a7fmit29o2wy0h8o2do.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0a7fmit29o2wy0h8o2do.png" alt="Image description" width="452" height="658"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;By adhering to the SOLID principles and utilizing best practices, our project ensures a robust, maintainable, and scalable test automation architecture. The combination of Java, Selenium, Maven, Docker, and Jenkins CI/CD streamlines the testing process and provides immediate feedback, making it an ideal solution for modern software development environments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For more details about the project, visit:&lt;/strong&gt;&lt;br&gt;
 &lt;a href="https://github.com/jeissyguimaraes/selenium_java_test_automation_ach" rel="noopener noreferrer"&gt;GITHUB&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Feel free to explore the project repository for more details and to contribute!&lt;/p&gt;

</description>
      <category>java</category>
      <category>testing</category>
      <category>selenium</category>
      <category>jenkins</category>
    </item>
    <item>
      <title>Building Test Automation Architecture with Java, Selenium, Maven, Docker, and Jenkins CI/CD</title>
      <dc:creator>Jeissy Guimarães</dc:creator>
      <pubDate>Sun, 04 Aug 2024 22:55:31 +0000</pubDate>
      <link>https://dev.to/jeissyguimaraes/building-a-robust-test-automation-architecture-with-java-selenium-maven-docker-and-jenkins-cicd-5ccg</link>
      <guid>https://dev.to/jeissyguimaraes/building-a-robust-test-automation-architecture-with-java-selenium-maven-docker-and-jenkins-cicd-5ccg</guid>
      <description>&lt;p&gt;&lt;strong&gt;Overview&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In today's fast-paced development environment, maintaining a robust test automation architecture is crucial. Our project, selenium_java_test_automation_ach, is designed to streamline automated testing using Java, Selenium, Maven, Docker, and Jenkins CI/CD. This architecture not only adheres to the SOLID principles but also incorporates best coding practices to ensure maintainable and scalable code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Project Objectives&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;🔍 &lt;strong&gt;Automated Testing:&lt;/strong&gt; Implement a comprehensive automated testing solution using Selenium and Java;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📊 &lt;strong&gt;Comprehensive Reports:&lt;/strong&gt; Generate detailed test reports with ExtentReports;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🚀 &lt;strong&gt;CI/CD Integration:&lt;/strong&gt; Ensure seamless integration into CI/CD pipelines using Jenkins;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🌐 &lt;strong&gt;Multi-browser Support:&lt;/strong&gt; Provide support for multiple browsers (Chrome, Firefox, Edge), including headless mode&lt;br&gt;
Key Features;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🖥️&lt;strong&gt;ExtentReports for Test Sessions:&lt;/strong&gt; Initialization and closure of test sessions with ExtentReports, including WebDriver configuration;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📸 &lt;strong&gt;Visual Capture and Comparison:&lt;/strong&gt; Capture and compare screenshots of web pages against a predefined visual baseline;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🔧 &lt;strong&gt;WebDriver Configuration:&lt;/strong&gt; Flexible WebDriver setup supporting multiple browsers and headless mode;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🤖 &lt;strong&gt;Selenium Automation:&lt;/strong&gt; Leverage Selenium to automate browser interactions, page navigations, and checkpoints.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Technologies Used&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;☕&lt;strong&gt;Java:&lt;/strong&gt; The core programming language for writing test cases;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🌐 &lt;strong&gt;Selenium:&lt;/strong&gt; A powerful tool for browser automation;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🧪 &lt;strong&gt;TestNG:&lt;/strong&gt; Framework for managing and executing tests;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📊 &lt;strong&gt;ExtentReports:&lt;/strong&gt; Library for generating detailed and visual test reports;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;✨ &lt;strong&gt;Lombok:&lt;/strong&gt; Utility to reduce boilerplate code;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;⚙️ &lt;strong&gt;Jenkins:&lt;/strong&gt; Continuous integration and deployment server;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🐳 &lt;strong&gt;Docker:&lt;/strong&gt; Platform for developing, shipping, and running applications in containers;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;SOLID Principles and Best Practices&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This project is developed following SOLID principles and best coding practices to ensure a maintainable and scalable foundation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Single Responsibility Principle:&lt;/strong&gt; Each class has a single responsibility.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Open/Closed Principle:&lt;/strong&gt; Classes are open for extension but closed for modification.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Liskov Substitution Principle:&lt;/strong&gt; Subclasses should replace their base classes without breaking the application.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Interface Segregation Principle:&lt;/strong&gt; Create specific interfaces for clients, avoiding monolithic interfaces.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Dependency Inversion Principle:&lt;/strong&gt; Depend on abstractions, not on concrete implementations.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0a7fmit29o2wy0h8o2do.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0a7fmit29o2wy0h8o2do.png" alt="Image description" width="452" height="658"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;By adhering to the SOLID principles and utilizing best practices, our project ensures a robust, maintainable, and scalable test automation architecture. The combination of Java, Selenium, Maven, Docker, and Jenkins CI/CD streamlines the testing process and provides immediate feedback, making it an ideal solution for modern software development environments.&lt;/p&gt;

&lt;p&gt;For more details about the project, visit:&lt;br&gt;
 &lt;a href="https://github.com/jeissyguimaraes/selenium_java_test_automation_ach" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/p&gt;

</description>
      <category>java</category>
      <category>testing</category>
      <category>selenium</category>
      <category>jenkins</category>
    </item>
    <item>
      <title>Visual Test Automation with Python and Applitools: Using Ignore Regions</title>
      <dc:creator>Jeissy Guimarães</dc:creator>
      <pubDate>Tue, 16 Jul 2024 14:34:38 +0000</pubDate>
      <link>https://dev.to/jeissyguimaraes/visual-test-automation-with-python-and-applitools-using-ignore-regions-2k4p</link>
      <guid>https://dev.to/jeissyguimaraes/visual-test-automation-with-python-and-applitools-using-ignore-regions-2k4p</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Visual test automation is essential to ensure that the user interfaces (UIs) of web applications are correct and visually consistent. By using Applitools, we can perform automated visual comparisons, identifying subtle differences that might be missed in manual tests. A useful feature of Applitools is the ability to define "Ignore Regions" - areas of the page that are ignored during visual comparison, such as dynamic elements that change frequently (e.g., banners, ads, etc.).&lt;/p&gt;

&lt;p&gt;In this article, we will explore how to configure and use "Ignore Regions" in automated visual tests with Python and Applitools.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Advantages of Applitools for Layout and Visual Testing&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;🔍 &lt;strong&gt;Visual Difference Detection:&lt;/strong&gt; Applitools uses AI to detect visual differences that might not be captured by traditional code checks. This is crucial to ensure that the user interface is correct and free from visual regressions.&lt;/p&gt;

&lt;p&gt;🔧 &lt;strong&gt;Ease of Integration:&lt;/strong&gt; It can be easily integrated with various test automation tools like Selenium, Cypress, among others. This allows you to add visual checks to your existing test flows without major rewrites.&lt;/p&gt;

&lt;p&gt;🛠 &lt;strong&gt;Simplified Test Maintenance:&lt;/strong&gt; With Applitools' "Baseline" approach, it is easy to update and maintain visual tests. When a UI change is intentional, you can update the baseline with a click.&lt;/p&gt;

&lt;p&gt;🚫 &lt;strong&gt;Ignore Regions:&lt;/strong&gt; Allows you to specify areas of the page to be ignored during visual comparison. This is useful for dynamic areas that change frequently and are not relevant to the visual test.&lt;/p&gt;

&lt;p&gt;Code Implementation EyesLibrary Class The EyesLibrary class manages the integration with Applitools. Let's focus specifically on the function that defines the regions to be ignored during visual tests.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F52edpqopbptgqq18ew37.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F52edpqopbptgqq18ew37.png" alt="Image description" width="655" height="86"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Advantages of the check_window_with_ignore Function&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The check_window_with_ignore function is crucial for the robustness of visual tests, allowing specific areas of the page to be ignored. This is particularly useful in scenarios where dynamic elements, such as ads or notifications, can introduce visual variations that are not relevant to the test.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example of Use&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In the login test, we use this functionality to ignore specific elements of the page that might vary between test runs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Febt7sa59y21rco8vr039.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Febt7sa59y21rco8vr039.png" alt="Image description" width="655" height="86"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fppbilo5ak2gty1wpkqko.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fppbilo5ak2gty1wpkqko.png" alt="Image description" width="800" height="737"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;br&gt;
By using Applitools with Python, we can efficiently perform automated visual tests. The "Ignore Regions" functionality is especially useful for dynamic areas of the page, ensuring that our visual tests are precise and relevant. With this configuration, you can easily integrate these tests into your CI/CD pipeline, ensuring the continuous visual quality of your application.&lt;/p&gt;

&lt;p&gt;For more information, check out the documentation for &lt;a href="https://applitools.com/docs/api-ref/sdk-api/xcui/checksettings/" rel="noopener noreferrer"&gt;Applitools&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The complete code can be found on &lt;a href="https://github.com/jeissyguimaraes/selenium_python_aplitools" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>python</category>
      <category>testing</category>
      <category>automation</category>
      <category>aplitools</category>
    </item>
  </channel>
</rss>
