<?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: Hardik Chotaliya</title>
    <description>The latest articles on DEV Community by Hardik Chotaliya (@hardikchotaliya).</description>
    <link>https://dev.to/hardikchotaliya</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%2F1187229%2F685e9e59-53a5-45f4-9a78-8f5004a31f3c.png</url>
      <title>DEV Community: Hardik Chotaliya</title>
      <link>https://dev.to/hardikchotaliya</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/hardikchotaliya"/>
    <language>en</language>
    <item>
      <title>How to Install Kiwi TCMS using Docker: Complete Guide for QA Professionals</title>
      <dc:creator>Hardik Chotaliya</dc:creator>
      <pubDate>Fri, 29 Aug 2025 10:37:34 +0000</pubDate>
      <link>https://dev.to/hardikchotaliya/how-to-install-kiwi-tcms-using-docker-complete-guide-for-qa-professionals-67e</link>
      <guid>https://dev.to/hardikchotaliya/how-to-install-kiwi-tcms-using-docker-complete-guide-for-qa-professionals-67e</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Introduction to Kiwi TCMS&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;In todays fast-paced software development world, &lt;strong&gt;quality assurance (QA) teams&lt;/strong&gt; need efficient tools to manage test cases and ensure reliable releases. Among the many test case management systems available, &lt;strong&gt;Kiwi TCMS&lt;/strong&gt; stands out as an open-source, web-based platform designed for modern QA workflows.&lt;/p&gt;

&lt;p&gt;Deploying Kiwi TCMS using Docker makes installation, configuration, and maintenance seamless, even for large teams. In this guide, well walk step by step through the &lt;strong&gt;Kiwi TCMS Docker Installation&lt;/strong&gt; process while sharing tips to help QA professionals get started quickly.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;What is Kiwi TCMS?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Kiwi TCMS is an &lt;strong&gt;open-source test case management system&lt;/strong&gt; that helps QA teams organize test plans, manage test runs, track results, and integrate with CI/CD pipelines. It offers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;A web-based user interface for managing test cases&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;REST APIs for automation&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Integrations with popular tools like Jenkins, GitHub, and Bugzilla&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Real-time reporting and dashboards&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Why QA Professionals Use Kiwi TCMS&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;QA engineers choose Kiwi TCMS because it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Centralizes test management&lt;/strong&gt; in one accessible platform&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Improves collaboration&lt;/strong&gt; between testers, developers, and product owners&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Supports agile workflows&lt;/strong&gt; and automation testing pipelines&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Reduces overhead&lt;/strong&gt; by being lightweight and easy to deploy&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Benefits of Using Docker for Kiwi TCMS&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Using &lt;strong&gt;Docker&lt;/strong&gt; simplifies Kiwi TCMS deployment in multiple ways:&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%2Fgmj150tr6vga5bpeki1i.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%2Fgmj150tr6vga5bpeki1i.png" alt="Kiwi TCMS + Docker Overview Diagram showing Kiwi TCMS connected to Docker containers (web + database)" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Portability:&lt;/strong&gt; Run Kiwi TCMS consistently across environments.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Quick Setup:&lt;/strong&gt; No need to configure dependencies manually.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Isolation:&lt;/strong&gt; Avoid conflicts with other applications.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Scalability:&lt;/strong&gt; Spin up additional instances if required.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Prerequisites Before Installation&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Before diving into the installation steps, make sure your system is prepared.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;System Requirements&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;To run Kiwi TCMS in Docker smoothly, youll need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;A machine running Linux/macOS/Windows with WSL2&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;At least &lt;strong&gt;2 GB of RAM&lt;/strong&gt; and &lt;strong&gt;2 CPU cores&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Latest &lt;strong&gt;Docker Engine&lt;/strong&gt; and &lt;strong&gt;Docker Compose&lt;/strong&gt; installed&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Verifying Docker and Docker Compose Installation&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Check if Docker is installed and running:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker --versiondocker-compose --version
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If both return valid versions, youre good to go!&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Step-by-Step Kiwi TCMS Docker Installation&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Step 1: Create a Project Directory&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mkdir ~/kiwi-tcmscd ~/kiwi-tcms
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This ensures a dedicated workspace for configuration and data storage.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Step 2: Download the Docker Compose Configuration&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Kiwi TCMS provides a ready-to-use &lt;code&gt;docker-compose.yml&lt;/code&gt; file.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Option A: Direct Download&lt;/strong&gt;
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;curl -O https://raw.githubusercontent.com/kiwitcms/Kiwi/master/docker-compose.yml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  &lt;strong&gt;Option B: Create Manually&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;If you prefer, create a file named &lt;code&gt;docker-compose.yml&lt;/code&gt; and copy the default configuration from the official &lt;a href="https://github.com/kiwitcms/Kiwi" rel="noopener noreferrer"&gt;Kiwi TCMS GitHub repository&lt;/a&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Step 3: Start Kiwi TCMS Containers&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Navigate to the project directory and run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker compose up -d
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Pull the required Docker images&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Start Kiwi TCMS and MariaDB containers&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Set up persistent volumes for database storage&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Step 4: Verify Services are Running&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker compose psdocker compose logs -f
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These commands help confirm that the containers are running without errors.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Step 5: Perform Initial Configuration&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Before using Kiwi TCMS, you must initialize the system:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker exec -it kiwi_web /Kiwi/manage.py initial_setup
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Youll be asked to provide:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Username&lt;/strong&gt; (e.g., &lt;code&gt;namelastname&lt;/code&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Email&lt;/strong&gt; (&lt;code&gt;name.lastname@company.com&lt;/code&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Password&lt;/strong&gt; (minimum 10 characters)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Domain name&lt;/strong&gt; (e.g., &lt;code&gt;tms&lt;/code&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Step 6: Access Kiwi TCMS Dashboard&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Once the setup is complete, open your browser:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;HTTPS (recommended):&lt;/strong&gt; &lt;code&gt;https://localhost&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;HTTP:&lt;/strong&gt; &lt;code&gt;http://localhost&lt;/code&gt; (auto-redirects to HTTPS)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Special Considerations for macOS Users&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Handling SSL Certificate Warnings&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Since Kiwi TCMS uses a self-signed SSL certificate, Safari/Chrome will display a warning. To resolve:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Select &lt;strong&gt;Advanced Proceed anyway&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Install the certificate from &lt;code&gt;https://localhost/static/ca.crt&lt;/code&gt; into your macOS keychain&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Firewall and Network Troubleshooting&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;If you face connectivity issues, verify:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;macOS Firewall settings under &lt;strong&gt;System Preferences Security &amp;amp; Privacy Firewall&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Docker network configuration&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Best Practices for Kiwi TCMS Deployment&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Secure your instance&lt;/strong&gt; by updating default settings and using strong passwords&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Manage user accounts&lt;/strong&gt; with role-based access&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Automate backups&lt;/strong&gt; using Docker volumes and scheduled tasks&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Common Errors and Troubleshooting Tips&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Containers wont start:&lt;/strong&gt; Run &lt;code&gt;docker compose logs&lt;/code&gt; to diagnose issues&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Database errors:&lt;/strong&gt; Ensure MariaDB is running and accessible&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;SSL issues:&lt;/strong&gt; Reinstall the certificate or use a trusted CA&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Frequently Asked Questions (FAQs)&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Q1. What is Kiwi TCMS best used for?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A: Its best for managing test cases, test runs, and QA team workflows.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q2. Can Kiwi TCMS integrate with CI/CD tools?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A: Yes, it integrates with Jenkins, GitHub Actions, and Bugzilla.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q3. Is Docker mandatory for Kiwi TCMS?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A: No, but Docker is the simplest and most reliable method of installation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q4. How do I back up my Kiwi TCMS data?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A: Use Docker volumes and regular &lt;code&gt;docker export&lt;/code&gt; commands.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q5. Does Kiwi TCMS support multiple users?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A: Yes, it supports role-based access for QA teams of any size.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q6. How do I update Kiwi TCMS in Docker?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A: Pull the latest image and restart containers with &lt;code&gt;docker compose up -d&lt;/code&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Conclusion: Why Kiwi TCMS Docker Installation is Ideal for QA Teams&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Deploying Kiwi TCMS using Docker is a fast, secure, and scalable approach that suits &lt;strong&gt;QA professionals&lt;/strong&gt; of all experience levels. From installation to SSL handling, this guide equips you with everything needed to get started.&lt;/p&gt;

&lt;p&gt;By combining the &lt;strong&gt;power of Docker&lt;/strong&gt; with the &lt;strong&gt;flexibility of Kiwi TCMS&lt;/strong&gt; , your QA team can efficiently manage test cases, streamline workflows, and improve software quality.&lt;/p&gt;




&lt;p&gt;]]&amp;gt;&lt;/p&gt;

</description>
      <category>kiwitcmsdockerinstal</category>
      <category>kiwitcms</category>
      <category>dockerforqateams</category>
      <category>dockerinstallation</category>
    </item>
    <item>
      <title>🎨 The Art of Writing Awesome Commit Messages for QA Engineers (SDETs/QA)</title>
      <dc:creator>Hardik Chotaliya</dc:creator>
      <pubDate>Tue, 10 Dec 2024 07:40:54 +0000</pubDate>
      <link>https://dev.to/hardikchotaliya/the-art-of-writing-awesome-commit-messages-for-qa-engineers-sdetsqa-3i1o</link>
      <guid>https://dev.to/hardikchotaliya/the-art-of-writing-awesome-commit-messages-for-qa-engineers-sdetsqa-3i1o</guid>
      <description>&lt;p&gt;Hey there, QA superstar! 🧪👨💻&lt;/p&gt;

&lt;p&gt;Whether you're automating tests, debugging flaky scripts, or enhancing your framework, writing &lt;strong&gt;great commit messages&lt;/strong&gt; can make or break your workflow. It's not just about getting the tests to passit's about leaving a &lt;strong&gt;clean, understandable trail&lt;/strong&gt; for yourself and your team. Let's dive into why commit messages matter for us in QA and how to nail them every single time! 🚀&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Should QA Folks Care About Commit Messages? 🤔
&lt;/h2&gt;

&lt;p&gt;You might think, Isn't this just for developers? Nope! &lt;strong&gt;Automation Test Engineers&lt;/strong&gt; have just as much to gain from writing clear, concise commit messages:&lt;/p&gt;

&lt;p&gt;🕵 &lt;strong&gt;Debugging flaky tests&lt;/strong&gt; becomes a breeze when you can trace changes easily.&lt;br&gt;&lt;br&gt;
📖 &lt;strong&gt;Understanding historical updates&lt;/strong&gt; - why was that locator changed? Why was this test skipped?&lt;br&gt;&lt;br&gt;
🤝 &lt;strong&gt;Collaborating with Devs and other QAs&lt;/strong&gt; is smoother when your changes are self-explanatory.&lt;br&gt;&lt;br&gt;
🔍 &lt;strong&gt;Root cause analysis&lt;/strong&gt; - pinpointing where things went wrong in your test suite is faster when your history is clear.&lt;/p&gt;

&lt;p&gt;A good commit message saves &lt;strong&gt;time&lt;/strong&gt; , reduces confusion, and makes you look like a pro! 🌟&lt;/p&gt;


&lt;h2&gt;
  
  
  Good Commit Messages vs. Bad Ones 🎭
&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fohum72axpvocuyiq61vf.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%2Fohum72axpvocuyiq61vf.png" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  🚩 &lt;strong&gt;Bad Examples:&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;fix tests&lt;/code&gt; Which tests? What was broken? 😖&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;updated locators&lt;/code&gt; Why were they updated? 🔍&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;asdf&lt;/code&gt; Were calling the git police. 🚨&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;Good Examples:&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;🐛 Fix flaky login test by stabilizing wait conditions&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;🔧 Update locators for homepage redesign to match new structure&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;Add test cases in regression suite for checkout flow validation&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  The Anatomy of a Great Commit Message 🧪
&lt;/h2&gt;

&lt;p&gt;A commit message should be &lt;strong&gt;clear, concise, and informative&lt;/strong&gt;. Heres how to structure yours:&lt;/p&gt;
&lt;h3&gt;
  
  
  1 &lt;strong&gt;Start with a Type &amp;amp; Action Verb&lt;/strong&gt; 📝
&lt;/h3&gt;

&lt;p&gt;Use the present tense (e.g., Add, Fix, Update):&lt;br&gt;&lt;br&gt;
 &lt;code&gt;Add&lt;/code&gt; new test cases for API validation.&lt;br&gt;&lt;br&gt;
 &lt;code&gt;Fix&lt;/code&gt; flaky browser compatibility issues.&lt;br&gt;&lt;br&gt;
 &lt;code&gt;Update&lt;/code&gt; selectors for the redesigned checkout page.&lt;/p&gt;
&lt;h3&gt;
  
  
  2 &lt;strong&gt;Keep It Short (Under 50 Characters)&lt;/strong&gt; 🕒
&lt;/h3&gt;

&lt;p&gt;Your subject line should summarize the change in a snap:&lt;br&gt;&lt;br&gt;
 &lt;code&gt;Refactor tests for entire regression suite and add fixes to broken test cases along with updating browser drivers&lt;/code&gt;&lt;br&gt;&lt;br&gt;
 &lt;code&gt;🔧 Refactor regression suite for browser driver update&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  3 &lt;strong&gt;Add Context for Complex Changes&lt;/strong&gt; 🖊
&lt;/h3&gt;

&lt;p&gt;For more complicated commits, include a brief explanation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;🐛 Fix flaky login test for mobile devices Stabilized flaky test by adding explicit waits for DOM elements on slow networks.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4 &lt;strong&gt;Sprinkle Some Fun with Emojis!&lt;/strong&gt; 🎉
&lt;/h3&gt;

&lt;p&gt;Emojis can make your commits visually appealing and instantly recognizable:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;🐛 Bug Fixes&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🔧 Refactoring&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;New Feature or Enhancement&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Test Addition&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🛑 Test Skipped&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example:&lt;br&gt;&lt;br&gt;
&lt;code&gt;🛑 Skip payment tests temporarily due to backend API downtime&lt;/code&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Real-Life Examples for QA Engineers 💡
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;Add cross-browser tests for user registration flow&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;🐛 Fix flaky checkout test by increasing wait for payment API&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;🔧 Refactor locators for homepage due to UI overhaul&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;Enhance test framework to support parallel execution&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;🛑 Remove deprecated test cases for outdated features&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  When &lt;strong&gt;NOT&lt;/strong&gt; to Use Emojis
&lt;/h2&gt;

&lt;p&gt;While emojis are awesome, don't overdo it. Use them sparingly to keep your history professional yet fun. If your git log looks like hieroglyphics, its time to scale back! 🤓&lt;/p&gt;


&lt;h2&gt;
  
  
  Pro Tips for QA Commit Mastery 🏆
&lt;/h2&gt;

&lt;p&gt;1 &lt;strong&gt;Commit Often, Commit Small&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Break your changes into logical, testable units. Small commits are easier to understand and revert if needed.&lt;/p&gt;

&lt;p&gt;2 &lt;strong&gt;One Commit, One Purpose&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Dont mix framework updates with test case additions. Keep commits focused.&lt;/p&gt;

&lt;p&gt;3 &lt;strong&gt;Link Issues or Tickets&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
If your org uses JIRA or similar tools, reference the ticket:&lt;br&gt;&lt;br&gt;
&lt;code&gt;🔧 Update login tests (JIRA-123)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;4 &lt;strong&gt;Dont Skip Commit Messages&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Take a moment to write a meaningful commit message. Your future self will thank you! 🙌&lt;/p&gt;


&lt;h2&gt;
  
  
  Your Handy Commit Template 📝
&lt;/h2&gt;

&lt;p&gt;Heres a cheat sheet to guide you:&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;Type &amp;amp; Summary&amp;gt; # Optional Body: # - Why is this change necessary? # - What exactly was changed? # - Link to any issues or tickets if applicable.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Example:
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;🐛 Fix flaky API test due to inconsistent response times Updated retry logic for API tests to handle sporadic timeout issues and added detailed logging for debugging.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Wrap-Up 🎁
&lt;/h2&gt;

&lt;p&gt;Commit messages are more than a chore- they're a chance to showcase your &lt;strong&gt;professionalism and attention to detail&lt;/strong&gt;. Follow these tips, and you'll not only help your team but also build a strong personal brand as a meticulous, thoughtful Automation Test Engineer.&lt;/p&gt;

&lt;p&gt;So, next time you're about to commit, pause, breathe 🧘, and craft a message that youll be proud of! 🌟&lt;/p&gt;

&lt;p&gt;Whats your favorite commit tip? Drop it in the comments! 👇&lt;/p&gt;

&lt;p&gt;]]&amp;gt;&lt;/p&gt;

</description>
      <category>commitmessagesforqae</category>
      <category>gitcommitmessages</category>
      <category>commitmessagebestpra</category>
      <category>sdetgitworkflow</category>
    </item>
    <item>
      <title>✨ Revolutionizing QA: Responsively App for Rapid Responsive Testing</title>
      <dc:creator>Hardik Chotaliya</dc:creator>
      <pubDate>Fri, 06 Dec 2024 10:33:21 +0000</pubDate>
      <link>https://dev.to/hardikchotaliya/revolutionizing-qa-responsively-app-for-rapid-responsive-testing-5h8</link>
      <guid>https://dev.to/hardikchotaliya/revolutionizing-qa-responsively-app-for-rapid-responsive-testing-5h8</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Introduction&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;In the fast-paced digital world, responsive web design is no longer optional! its a necessity. As QA professionals, ensuring a seamless user experience across multiple devices can be challenging.&lt;/p&gt;

&lt;p&gt;Enter &lt;strong&gt;Responsively App&lt;/strong&gt; , an open-source, powerful tool that transforms how you perform responsive testing. With its ability to preview websites across multiple viewports simultaneously, debug layout issues, and simulate real-world interactions, Responsively App is a game-changer for the QA community.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Why QA Teams Love Responsively App&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;QA teams often face tight deadlines and complex testing scenarios. Responsively App simplifies this process by enabling:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Simultaneous Multi-Device Testing&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
View your application across multiple devices in real-time to identify inconsistencies at a glance.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Live Reload for Instant Feedback&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
See the impact of code changes instantly, eliminating the need for constant browser refreshes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Customizable Device Profiles&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Tailor test environments for region-specific devices or customer preferences to ensure accurate results.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Responsive Inspector for Debugging&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Pinpoint alignment issues, text truncation, or content overflow quickly, ensuring a polished end-user experience.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Step-by-Step Guide to Using Responsively App for QA&lt;/strong&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Download and Install the Responsively App&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Visit &lt;a href="https://responsively.app/" rel="noopener noreferrer"&gt;Responsively App's website&lt;/a&gt; and download the latest version. Install it like any other application.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Test Across Multiple Viewports&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Open the app, paste your website URL, and see it rendered across various screen sizesfrom mobile to tablet to desktop.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Debug with Responsive Inspector&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Use the inspector tool to analyze how elements behave at different resolutions. Fix overlapping content or layout breaks efficiently.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Validate Interactivity with Real-World Simulation&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Test touch gestures, scrolling, and click functionality directly within the app.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Customize Device Profiles&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Adjust resolutions, and orientations, and even add custom devices to meet your testing needs.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Use Cases: How Responsively App Simplifies QA Tasks&lt;/strong&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Cross-Browser Compatibility Testing&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Ensure your application delivers consistent user experiences across different browsers and devices.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Mobile-First Design Validation&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Test designs on high-priority mobile devices to catch issues early in the development cycle.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Efficient Regression Testing&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Save time by quickly verifying UI consistency after code changes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Client-Specific Custom Testing&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Add and test specific devices your clients audience frequently uses.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Benefits for the QA Community&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Time-Saving:&lt;/strong&gt; Speeds up testing cycles with simultaneous multi-viewport previews.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Cost-Effective:&lt;/strong&gt; Free, open-source solution requiring no additional hardware.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Enhanced Accuracy:&lt;/strong&gt; Provides precise insights into layout and interactivity issues.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Collaboration-Friendly:&lt;/strong&gt; Easy to integrate into agile workflows for better team collaboration.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Conclusion&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Responsively App is more than just a responsive testing tool; it's a productivity booster for QA professionals. By enabling multi-device testing, live reloading, and interactive debugging, it equips you with everything you need to deliver exceptional, bug-free user experiences.&lt;/p&gt;

&lt;p&gt;So, why wait? Start using the Responsively App today and elevate your QA game to the next level.&lt;/p&gt;




&lt;p&gt;]]&amp;gt;&lt;/p&gt;

</description>
      <category>responsivelyapp</category>
      <category>responsivetestingtoo</category>
      <category>qatestingtools</category>
      <category>multidevicetesting</category>
    </item>
    <item>
      <title>🏆 Crafting the Perfect Tech Resume: A Guide for IT Professionals</title>
      <dc:creator>Hardik Chotaliya</dc:creator>
      <pubDate>Mon, 25 Nov 2024 15:54:11 +0000</pubDate>
      <link>https://dev.to/hardikchotaliya/crafting-the-perfect-tech-resume-a-guide-for-it-professionals-24f8</link>
      <guid>https://dev.to/hardikchotaliya/crafting-the-perfect-tech-resume-a-guide-for-it-professionals-24f8</guid>
      <description>&lt;p&gt;🏆 Why a Good Resume Matters&lt;/p&gt;

&lt;p&gt;A strong resume is your ticket to landing that dream tech job. Its the first impression you make on recruiters, so crafting it carefully is crucial. Lets dive into tips to make your resume stand out!&lt;/p&gt;




&lt;h2&gt;
  
  
  🖋 Key Components of a Tech Resume
&lt;/h2&gt;

&lt;h3&gt;
  
  
  📄 Optimal Resume Length
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Less than 7 years of experience:&lt;/strong&gt; Keep it to one page. Concise and relevant is the way to go.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;More than 7 years of experience:&lt;/strong&gt; Two pages are acceptable, but be clear and to the point.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Resume Content Checklist
&lt;/h3&gt;

&lt;p&gt;Include these essentials:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Header:&lt;/strong&gt; Name, professional email, phone number, LinkedIn/GitHub links.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Work Experience:&lt;/strong&gt; Highlight achievements over responsibilities.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Education:&lt;/strong&gt; Relevant degrees or certifications.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Skills:&lt;/strong&gt; Focus on technical and role-specific proficiencies.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Awards/Certifications:&lt;/strong&gt; Showcase your expertise and commitment to learning.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🔄 Choosing the Right Words
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Use action words like achieved, modernized, and resolved.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Quantify results (increased efficiency by 30%).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid personal pronouns (I, my) and vague terms like hard worker.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎨 Design Dos and Donts
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Do:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Use readable fonts like Arial or Calibri.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Stick to one or two fonts for consistency.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use a consistent colour paletteanalogous or complementary.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Dont:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Overuse colours or graphics.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use distracting designs that hinder readability.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  📝 How Recruiters Read Your Resume
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Quick Scan Tips 👀
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Recruiters spend &lt;strong&gt;7-8 seconds&lt;/strong&gt; scanning your resume initially. Place key information at the top.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use clear headings and bullet points to guide their eyes.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Resume Formats
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Reverse Chronological:&lt;/strong&gt; Highlights recent roles; best for consistent work history.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Functional:&lt;/strong&gt; Focuses on skills; ideal for career changers or gaps.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Combination:&lt;/strong&gt; Blends experience and skills; great for seasoned professionals.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Insider Tip:
&lt;/h3&gt;

&lt;p&gt;💡&lt;/p&gt;

&lt;p&gt;Always include the &lt;strong&gt;month and year&lt;/strong&gt; for job entries to avoid raising red flags.&lt;/p&gt;




&lt;h2&gt;
  
  
  What should be the length of my resume?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;One Page Rule&lt;/strong&gt; : If you have less than seven years of experience, your resume should be one page. This is because recruiters spend only a few seconds reviewing each resume, so concise and relevant information is crucial.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;More Experience&lt;/strong&gt; : If you have more than seven years of experience, you can extend your resume to two pages. However, it's still important to be clear and concise.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Relevance&lt;/strong&gt; : Focus on including relevant information that highlights your achievements. Avoid long descriptions and stick to the most impactful points.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Personalization&lt;/strong&gt; : Your resume should tell your professional story. This means you can play with different formats and sections to best represent yourself.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Recruiter's Perspective&lt;/strong&gt; : Remember that recruiters will quickly scan your resume, so make sure the most important information is easy to find.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🖌 Structuring Your Tech Resume
&lt;/h2&gt;

&lt;h3&gt;
  
  
  📢 Header Section
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Name:&lt;/strong&gt; Use your full name.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Contact Info:&lt;/strong&gt; Professional email and phone number.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Location:&lt;/strong&gt; Include your city/state or country if applying internationally.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; Showcase LinkedIn, GitHub, or a personal portfolio.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎓 Education Section
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Recent Graduates:&lt;/strong&gt; List at the top.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Experienced Professionals:&lt;/strong&gt; Place below work experience.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;College name, degree, and graduation year (optional).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Bootcamps or online courses.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Relevant coursework (if applicable).&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  💪 Work Experience Section
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Structure:&lt;/strong&gt; Reverse chronological order.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Details:&lt;/strong&gt; Company name, job title, location, and employment dates.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Content:&lt;/strong&gt; Use 2-3 bullet points to highlight key achievements:&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  📊 Skills Section
&lt;/h3&gt;

&lt;p&gt;Organize skills into categories:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Tools:&lt;/strong&gt; WebdriverIO, BrowserStack, AWS.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Languages:&lt;/strong&gt; TypeScript, JavaScript.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Technologies:&lt;/strong&gt; CI/CD, API testing, performance testing.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Proficiency Levels:&lt;/strong&gt; Indicate expertise (e.g., Advanced, Intermediate).&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  📚 Extra Sections to Enhance Your Resume
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🏅 Awards and Certifications
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Awards:&lt;/strong&gt; Highlight significant achievements with dates.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Certifications:&lt;/strong&gt; Include technical and relevant certifications (e.g., AWS, Agile).&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🖇 Summary Section
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Summarize your expertise in 2-3 sentences. Example: Experienced Lead Quality Engineer specializing in automation and agile methodologies. Proven track record of enhancing software quality and team efficiency.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🔺 Avoid Adding a Photo
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Stick to global best practices by omitting photos to avoid unconscious bias.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  📁 File Format
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Save as PDF to preserve formatting.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Name the file clearly: YourName_TechResume.pdf.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🛠 Tools for Crafting a Professional Resume
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Microsoft Word/Google Docs:&lt;/strong&gt; Use built-in templates.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Canva:&lt;/strong&gt; For visually appealing designs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;ATS Checkers:&lt;/strong&gt; Optimize your resume for Applicant Tracking Systems (e.g., CV Compiler).&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🎨 Pro Design Rules for a Standout Resume
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Typography 🌄
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Use clear fonts (e.g., Arial, Calibri).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Maintain consistent font sizes for headings and body text.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Color Palette 🟡🔵
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Analogous (harmonious) or complementary (balanced) colours.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use darker colours for text and brighter ones for accents.&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffjf0ky9lb768zsx7vvld.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%2Ffjf0ky9lb768zsx7vvld.png" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🏆 Final Tips for Success
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Tailor your resume for each job application.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Focus on achievements, not just responsibilities.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ensure your resume is error-freeproofread carefully.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By following these guidelines, youll craft a tech resume that grabs recruiters attention and lands you interviews for your dream role. 🏠🚀&lt;/p&gt;




&lt;h2&gt;
  
  
  ATS Resume Checker
&lt;/h2&gt;

&lt;p&gt;After creating your resume, you can use a tool like &lt;a href="https://cvcompiler.com/" rel="noopener noreferrer"&gt;CV Compiler&lt;/a&gt; to analyze and improve it. This tool will help you identify areas for enhancement, such as incorporating high-impact words and optimizing the format.&lt;/p&gt;

&lt;p&gt;Additionally, you can leverage simple design tips like spacing, font choice, and colour palette to make your resume stand out. This will help you catch the recruiter's eye and increase your chances of landing a job interview in the software development industry.&lt;/p&gt;




&lt;p&gt;]]&amp;gt;&lt;/p&gt;

</description>
      <category>resumewritingtips</category>
      <category>resumeformat</category>
      <category>softwareengineerresu</category>
      <category>howtowriteatechresum</category>
    </item>
    <item>
      <title>📝 Mastering Test Data Generation: Tools, Tips, and Real-Life Experiences from a QA Pro 🧒</title>
      <dc:creator>Hardik Chotaliya</dc:creator>
      <pubDate>Mon, 18 Nov 2024 17:57:44 +0000</pubDate>
      <link>https://dev.to/hardikchotaliya/mastering-test-data-generation-tools-tips-and-real-life-experiences-from-a-qa-pro-c6l</link>
      <guid>https://dev.to/hardikchotaliya/mastering-test-data-generation-tools-tips-and-real-life-experiences-from-a-qa-pro-c6l</guid>
      <description>&lt;p&gt;Introduction&lt;/p&gt;

&lt;p&gt;In software testing, test data is essential for creating realistic and effective scenarios. With over a decade of experience in quality assurance and automation testing, I've come to understand that having reliable test data goes beyond just fulfilling basic requirements; it involves developing datasets that accurately reflect real-world conditions. In this blog, I will share insights from my professional journey, including tools, plugins, and strategies that have saved countless hours and ensured comprehensive test coverage.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Test Data Matters in QA
&lt;/h2&gt;

&lt;p&gt;In testing, realistic datasets elevate your scenarios from basic to bulletproof. Whether you're validating edge cases like names with special characters or testing specific demographics, well-crafted test data ensures you uncover potential issues before they reach production.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Challenge of Crafting Realistic Test Data
&lt;/h2&gt;

&lt;p&gt;Creating datasets manually can be daunting and time-consuming. Imagine needing thousands of users with unique parameters or edge cases like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Users younger than 18 or older than 65.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Long, short, or special-character-rich names.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Inputs containing SQL injection examples or invalid HTML.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Relying on realistic, scalable test data tools has been a game-changer in my career.&lt;/p&gt;




&lt;h2&gt;
  
  
  My Go-To Tools for Test Data Generation
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Generatedata&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;A versatile tool Ive used frequently to create bulk datasets with customizable parameters. Need specific age ranges or unique field constraints? &lt;a href="http://Generatedata.com" rel="noopener noreferrer"&gt;Generatedata.com&lt;/a&gt; has you covered.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://generatedata.com/" rel="noopener noreferrer"&gt;https://generatedata.com/&lt;/a&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw5wcdrjvl089y0f8s9wy.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%2Fw5wcdrjvl089y0f8s9wy.png" alt="Generatedata - Mastering Test Data Generation" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Mockaroo&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Mockaroo excels at providing structured data in various formats, including CSV and JSON. Its perfect when importing test data directly into your system under test.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.mockaroo.com/" rel="noopener noreferrer"&gt;https://www.mockaroo.com/&lt;/a&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F17ndzxyigq2xg0gh8h1i.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%2F17ndzxyigq2xg0gh8h1i.png" alt="Mockaroo - Mastering Test Data Generation" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Browser Plugins That Revolutionize Test Data Creation
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Fake Data&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;A handy plugin for exploratory testing. With a single click, generate data like names, emails, and addresses with special characters, ensuring your form fields are tested thoroughly.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://fakedata.pro/" rel="noopener noreferrer"&gt;https://fakedata.pro/&lt;/a&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6m9tqecih0b95bwsb8n2.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%2F6m9tqecih0b95bwsb8n2.png" alt="Fake Data - Mastering Test Data Generation" width="800" height="484"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Bug Magnet&lt;/strong&gt; &lt;em&gt;(My Favorite)&lt;/em&gt;
&lt;/h3&gt;

&lt;p&gt;This Chrome plugin is an absolute powerhouse. It offers a variety of predefined datasets, SQL injection samples, broken HTML inputs, and multilingual characters. Bug Magnet has been my go-to tool for years, helping me uncover vulnerabilities that traditional testing often misses.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://bugmagnet.org/" rel="noopener noreferrer"&gt;https://bugmagnet.org/&lt;/a&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F57rztcltj29ags75nesg.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%2F57rztcltj29ags75nesg.png" alt="Bug Magnet - Mastering Test Data Generation" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  When Tools Fall Short: Collaborating with Development Teams
&lt;/h2&gt;

&lt;p&gt;Sometimes, tools wont cut it. In such cases, collaborating with the development team is crucial. In a past project, our system lacked a data import feature. By working closely with the dev team, we built a bolt-on application to upload bulk data. This approach not only solved the problem but also strengthened interdepartmental collaboration.&lt;/p&gt;




&lt;h2&gt;
  
  
  Best Practices for Managing Test Data
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Segment your data:&lt;/strong&gt; Use distinct datasets for different test environments.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Mask sensitive information:&lt;/strong&gt; Ensure compliance with data privacy regulations.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Automate data generation:&lt;/strong&gt; Incorporate tools like Mockaroo into CI pipelines for automated, scalable data creation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Version control your datasets:&lt;/strong&gt; Use Git or similar tools to track changes in critical test datasets.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Conclusion: Empowering QA with the Right Tools
&lt;/h2&gt;

&lt;p&gt;As a QA engineer, having the right test data at your fingertips is non-negotiable. Tools like &lt;a href="https://generatedata.com/" rel="noopener noreferrer"&gt;Generatedata.com&lt;/a&gt;, &lt;a href="https://www.mockaroo.com/" rel="noopener noreferrer"&gt;Mockaroo&lt;/a&gt;, &lt;a href="https://fakedata.pro/" rel="noopener noreferrer"&gt;Fake Data&lt;/a&gt;, and &lt;a href="https://bugmagnet.org/" rel="noopener noreferrer"&gt;Bug Magnet&lt;/a&gt; simplify data generation, enabling you to focus on testing. Where tools falter, collaboration with the dev team bridges the gap. With the strategies and tools shared here, you can build robust, scalable test frameworks that ensure application reliability.&lt;/p&gt;

&lt;p&gt;Have you used these tools or plugins before? Share your favourite tips and tools for test data generation in the comments below! And don't forget to subscribe for more insider QA insights.&lt;/p&gt;




&lt;p&gt;]]&amp;gt;&lt;/p&gt;

</description>
      <category>testdatageneration</category>
      <category>realisticdatasets</category>
      <category>bugmagnetplugin</category>
      <category>mockaroovsgenerateda</category>
    </item>
    <item>
      <title>🔍 What is Behavior-Driven Development (BDD) 🛠️</title>
      <dc:creator>Hardik Chotaliya</dc:creator>
      <pubDate>Wed, 30 Oct 2024 16:03:42 +0000</pubDate>
      <link>https://dev.to/hardikchotaliya/what-is-behavior-driven-development-bdd-14l9</link>
      <guid>https://dev.to/hardikchotaliya/what-is-behavior-driven-development-bdd-14l9</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In this blog, we will explore the following key points:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Understanding BDD&lt;/strong&gt; : Learn the basics of behaviour-driven development (BDD) and how it enhances collaboration with non-technical teams.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Integration with Agile&lt;/strong&gt; : Discover how BDD fits into an agile workflow and helps in building the right thing by focusing on user and system behaviour.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Practical Application&lt;/strong&gt; : Get hands-on experience with BDD frameworks like Cucumber and Gherkin, including writing requirements specifications, defining scenarios, and setting up tests.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Best Practices&lt;/strong&gt; : Explore best practices for implementing BDD, emphasizing domain-driven and object-oriented design, and keeping the philosophy of behavior over function at the forefront.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  TDD History
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;The Dark Age of Developer Testing&lt;/strong&gt; :
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Background&lt;/strong&gt; : In the early days of software development, developers were often separated from the testing process. A book from 1976, "Software Reliability," even suggested that developers should never test their own code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Impact&lt;/strong&gt; : This created tension between developers and QA teams, as developers were blamed for code failures.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Emergence of Test-Driven Development (TDD)&lt;/strong&gt;:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Origins&lt;/strong&gt; : TDD emerged from Extreme Programming (XP), a methodology created by Kent Beck in the 1990s.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Process&lt;/strong&gt; : TDD involves writing a test before writing the code to pass that test. The steps are:&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Benefits&lt;/strong&gt; : This approach helps developers build software iteratively and confidently, knowing that each piece of code is tested.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Challenges with TDD&lt;/strong&gt; :
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Questions&lt;/strong&gt; : Developers often struggled with what to test and how much to test. Miscommunication about requirements was common, leading to confusion.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  What is Behavior-driven Development?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Creator&lt;/strong&gt; : Dan North introduced BDD in a 2006 blog post titled "Introducing BDD."&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Concept&lt;/strong&gt; : BDD builds on TDD by focusing on the behaviour of the software from the user's perspective. Instead of just writing tests, BDD encourages writing tests that describe the behavior of the system.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Terminology&lt;/strong&gt; : North suggested using the term "Behavior" instead of "Test" to make it clearer what the software should do. This shift helps both technical and non-technical stakeholders understand the requirements better.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Simplified Explanation:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;| &lt;strong&gt;TDD&lt;/strong&gt; | &lt;strong&gt;BDD&lt;/strong&gt; |&lt;br&gt;
| Think of TDD as a way to ensure your code works by writing tests first. It's like setting a goal (the test) and then doing the work (writing the code) to achieve that goal. | BDD takes this a step further by focusing on what the user wants the software to do. It's like having a conversation with the user to understand their needs and then writing tests to make sure those needs are met. |&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Why This Matters for You:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Collaboration&lt;/strong&gt; : BDD enhances collaboration between different teams, which is crucial in your role in software quality assurance.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Clarity in Requirements&lt;/strong&gt; : By focusing on user behaviour, BDD helps clarify requirements, reducing the chances of building features that don't provide value.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Early Defect Identification&lt;/strong&gt; : BDD can help identify defects earlier in the testing lifecycle, which aligns with your interest in automation and regression testing.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;
  
  
  Gherkin specifications
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Structure of Gherkin Files:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Plain Text&lt;/strong&gt; : Gherkin files are saved as plain text with a &lt;code&gt;.feature&lt;/code&gt; file extension.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Line-Oriented&lt;/strong&gt; : The language uses indentation to define structure, similar to Python or YAML.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Keywords in Gherkin:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Feature&lt;/strong&gt; : This keyword provides a name and summary of a larger feature of the software.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Scenario&lt;/strong&gt; : Indicates a single concrete example to test, with specific expectations for system behavior.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Given&lt;/strong&gt; : Sets up the initial conditions before the scenario unfolds.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;When&lt;/strong&gt; : Describes the action taken on the system by an actor (person or event).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Then&lt;/strong&gt; : Reflects the expected outcome or result of the scenario.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  BDD examples
&lt;/h3&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%2Fphi4guwmykcacwbc9q73.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%2Fphi4guwmykcacwbc9q73.png" width="800" height="464"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Example:&lt;/em&gt;&lt;/strong&gt; Here's a simple example of a Gherkin scenario for a login feature:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Feature: User LoginScenario: Successful loginGiven the user is on the login pageWhen the user enters valid credentialsThen the user should be redirected to the dashboard
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  BDD frameworks
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Purpose of BDD Frameworks&lt;/strong&gt; : BDD frameworks facilitate communication between business stakeholders, developers, and testers by providing a common language for acceptance criteria.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Popular BDD Frameworks&lt;/strong&gt; :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Serenity&lt;/strong&gt; : Automates acceptance tests and provides detailed reports.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Think of BDD like planning a trip. Instead of just focusing on the car (the code), you start by thinking about the destination (what the software should do) and the route (user stories and acceptance criteria). This way, you ensure you're heading in the right direction and meeting the needs of everyone on the trip.&lt;/p&gt;




&lt;p&gt;]]&amp;gt;&lt;/p&gt;

</description>
      <category>behaviordrivendevelo</category>
      <category>bddframeworks</category>
      <category>tddtestdrivendevelop</category>
      <category>testdrivendevelopmen</category>
    </item>
    <item>
      <title>Enhance Console Logging with a Custom Global Log Wrapper in WebDriverIO</title>
      <dc:creator>Hardik Chotaliya</dc:creator>
      <pubDate>Thu, 10 Oct 2024 07:41:21 +0000</pubDate>
      <link>https://dev.to/hardikchotaliya/enhance-console-logging-with-a-custom-global-log-wrapper-in-webdriverio-3ph4</link>
      <guid>https://dev.to/hardikchotaliya/enhance-console-logging-with-a-custom-global-log-wrapper-in-webdriverio-3ph4</guid>
      <description>&lt;p&gt;Step-by-Step Guide to Creating a Custom Log Wrapper in WebDriverIO&lt;/p&gt;

&lt;p&gt;In this guide, well enhance &lt;strong&gt;console logging in WebDriverIO&lt;/strong&gt; by creating a &lt;strong&gt;global log wrapper&lt;/strong&gt; with custom features like color-coding and promise handling. Logging is an essential part of debugging and understanding what your code is doing under the hood. While &lt;code&gt;console.log()&lt;/code&gt; works well, enhancing it with custom formatting and color coding can make your logs more readable and informative. In this blog, well walk through how to create a global wrapper around &lt;code&gt;console.log()&lt;/code&gt; in your WebDriverIO configuration, adding flexibility and clarity to your log messages.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Use a Global Log Wrapper in WebDriverIO?
&lt;/h2&gt;

&lt;p&gt;One of the key challenges in Automation Frameworks is distinguishing your custom log messages from framework or Node.js logs. A simple console output can easily get buried, making it harder to track essential messages. We need a way to make our logs stand out while adding some useful features like skipping empty logs, handling unresolved promises, and color-coding for different log levels.&lt;/p&gt;




&lt;h3&gt;
  
  
  Step 1: Creating a Simple &lt;code&gt;log()&lt;/code&gt; Wrapper
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;console.log()&lt;/code&gt; method is great for outputting information to the console, but we can enhance and shorten it with a custom &lt;code&gt;log()&lt;/code&gt; wrapper. Add this snippet at the end of your &lt;code&gt;wdio.conf.ts&lt;/code&gt; file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/** * log wrapper * @param text to be output to the console window */global.log = (text) =&amp;gt; { console.log(`---&amp;gt; ${text}`);}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This new &lt;code&gt;global.log()&lt;/code&gt; works like &lt;code&gt;console.log()&lt;/code&gt;, but with a little extra formatting to help your logs stand out. Lets see it in action:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Before:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;console.log('Entering text');
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[0-0] Entering text
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;After:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;await global.log('Entering text');
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[0-0] ---&amp;gt; Entering text
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;By adding this wrapper, your custom messages are clearly separated from the ones generated by the framework or Node.js.&lt;/p&gt;




&lt;h3&gt;
  
  
  Step 2: How to Handle Promises and Enhancing the &lt;code&gt;log()&lt;/code&gt; Function
&lt;/h3&gt;

&lt;p&gt;Lets take this a step further. What if we want to skip empty strings and null values in our logs? Or detect when a Promise is passed to the log? Heres an improved version:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;global.log = (text) =&amp;gt; { if (text) { // Truthy value check if (text === Promise) { console.log('---&amp;gt; WARN: Log was passed a Promise object'); console.trace(); } else { console.log(`---&amp;gt; ${text}`); } }}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This version gives you more control. It:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Ignores empty and null values.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Warns when a Promise object is passed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Prints a console trace showing where the unresolved Promise originated.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Step 3: How to Add Color-Coded Logs
&lt;/h3&gt;

&lt;p&gt;To make your logs even more distinguishable, we can add color coding using ANSI escape codes. Heres how:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;global.log = (text, level = 'info') =&amp;gt; { if (text === undefined || text === null) { console.log('\x1b[33m%s\x1b[0m', '---&amp;gt; No log content (undefined or null)'); // Yellow for empty values return; } let colorCode; switch (level.toLowerCase()) { case 'info': colorCode = '\x1b[32m'; // Green for info break; case 'warn': colorCode = '\x1b[33m'; // Yellow for warnings break; case 'error': colorCode = '\x1b[31m'; // Red for errors break; default: colorCode = '\x1b[37m'; // White for others } if (text instanceof Promise) { console.log('\x1b[33m%s\x1b[0m', '---&amp;gt; WARN: Log was passed a Promise object'); // Yellow warning console.trace(); } else if (typeof text === 'object') { console.log(`${colorCode}%s\x1b[0m`, `---&amp;gt; ${level.toUpperCase()}: ${JSON.stringify(text, null, 2)}`); } else { console.log(`${colorCode}%s\x1b[0m`, `---&amp;gt; ${level.toUpperCase()}: ${text}`); }};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Function Definition
&lt;/h3&gt;

&lt;p&gt;Here's an updated version of &lt;code&gt;global.log&lt;/code&gt; function with color codes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Info&lt;/strong&gt; logs will be &lt;strong&gt;green&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Warn&lt;/strong&gt; logs will be &lt;strong&gt;yellow&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Error&lt;/strong&gt; logs will be &lt;strong&gt;red&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The &lt;code&gt;global.log&lt;/code&gt; function is defined globally, meaning it can be accessed from anywhere in the application.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It takes two parameters:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;text&lt;/code&gt;: The message or object to be logged&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;level&lt;/code&gt;: The severity level of the log (default is 'info')&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Handling Different Types of Input:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;If the input is undefined or null, it logs a yellow message saying "No log content".&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If the input is a Promise, it warns that a Promise was passed and shows a stack trace.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If the input is an object, it's converted to a formatted JSON string.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For other types (like strings), it's logged as-is.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Color Code Explanation:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;\x1b[32m&lt;/strong&gt;: Green color for &lt;strong&gt;info&lt;/strong&gt; logs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;\x1b[33m&lt;/strong&gt;: Yellow color for &lt;strong&gt;warn&lt;/strong&gt; logs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;\x1b[31m&lt;/strong&gt;: Red color for &lt;strong&gt;error&lt;/strong&gt; logs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;\x1b[37m&lt;/strong&gt;: Default white for other log levels.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;\x1b[0m&lt;/strong&gt;: Resets the color back to normal after printing the log.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Output Format:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Each log message starts with "---&amp;gt;" followed by the uppercase log level and then the message.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For objects, it uses &lt;code&gt;JSON.stringify&lt;/code&gt; with indentation for better readability.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;💡&lt;/p&gt;

&lt;p&gt;Check out our guide on &lt;a href="https://dev.to/hardikchotaliya/webdriverio-configuration-guide-setting-up-your-test-automation-framework-5696-temp-slug-7158386"&gt;setting up WebDriverIO v9&lt;/a&gt; for more details.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/hardikchotaliya/webdriverio-configuration-guide-setting-up-your-test-automation-framework-5696-temp-slug-7158386"&gt;https://hardikchotaliya.hashnode.dev/webdriverio-configuration-guide-setting-up-your-test-automation-framework&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Example Usage
&lt;/h3&gt;

&lt;p&gt;Now, you can use this function throughout your framework:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;global.log('This is an info log'); // Green textglobal.log('This is a warning', 'warn'); // Yellow textglobal.log('This is an error!', 'error'); // Red textglobal.log({ key: 'value' }, 'info'); // Green formatted object
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[0-0] ---&amp;gt; INFO: This is an info log[0-0] ---&amp;gt; WARN: This is a warning[0-0] ---&amp;gt; ERROR: This is an error![0-0] ---&amp;gt; INFO: { "key": "value"}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;By creating a custom &lt;code&gt;global.log()&lt;/code&gt; function, weve improved how logs are handled in our framework. From adding color-coding to ignoring empty logs, this wrapper makes debugging much easier, while ensuring the frameworks logs are separated from ours.&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%2Fn4x4t6sleqg8s2zqa67e.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%2Fn4x4t6sleqg8s2zqa67e.png" alt="Custom log wrapper WebDriverIO with color-coded output Handling promises in global log wrapper WebDriverIO" width="800" height="596"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Have you tried creating your own log wrapper in WebDriverIO? Share your experience in the comments below, and don't forget to subscribe for more WebDriverIO tips and tricks!&lt;/p&gt;

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




&lt;p&gt;&lt;strong&gt;&lt;em&gt;Important Links:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;GitHub repositories related to logging ( &lt;a href="https://github.com/hardikchotaliya/WebdriverIO-TS-Cucumber-e2e" rel="noopener noreferrer"&gt;https://github.com/hardikchotaliya/WebdriverIO-TS-Cucumber-e2e&lt;/a&gt; )&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Official WebDriverIO documentation ( &lt;a href="https://webdriver.io/docs/gettingstarted" rel="noopener noreferrer"&gt;https://webdriver.io/docs/gettingstarted&lt;/a&gt; )&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




</description>
      <category>enhanceconsoleloggin</category>
      <category>globallogwrapper</category>
      <category>webdriveriologging</category>
      <category>customlogfunction</category>
    </item>
    <item>
      <title>WebdriverIO Configuration Guide: Setting Up Your Test Automation Framework</title>
      <dc:creator>Hardik Chotaliya</dc:creator>
      <pubDate>Fri, 04 Oct 2024 09:15:03 +0000</pubDate>
      <link>https://dev.to/hardikchotaliya/webdriverio-configuration-guide-setting-up-your-test-automation-framework-4ho4</link>
      <guid>https://dev.to/hardikchotaliya/webdriverio-configuration-guide-setting-up-your-test-automation-framework-4ho4</guid>
      <description>&lt;p&gt;In this blog, we will dive into setting up and configuring WebdriverIO V9, which forms the foundation of your Automation framework.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;WebdriverIO Setup:&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;WebdriverIO can be installed and configured in two main ways:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Custom configuration via the terminal&lt;/strong&gt; : You answer a series of questions to tailor the setup to your needs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Cloning a boilerplate project&lt;/strong&gt; : You can fork a pre-existing project from a repository (like GitHub).&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Option 1&lt;/strong&gt; : The terminal-based setup asks questions like:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Type of testing&lt;/strong&gt; : E2E testing (for web/mobile applications) or unit/component testing.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Automation backend&lt;/strong&gt; : Options include local machine, or cloud services like BrowserStack, Sauce Labs, etc. We are focusing on local setup.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Environment to automate&lt;/strong&gt; : Typically, web applications (browser-based).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Browser selection&lt;/strong&gt; : Start with Chrome (you can add others like Firefox, Safari, or Edge later).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Framework&lt;/strong&gt; : Default options are &lt;strong&gt;Mocha&lt;/strong&gt; or &lt;strong&gt;Jasmine&lt;/strong&gt;. WebdriverIO also supports &lt;strong&gt;Cucumber&lt;/strong&gt; for BDD. (We are Using &lt;strong&gt;Cucumber&lt;/strong&gt; )&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Compiler&lt;/strong&gt; : Use &lt;strong&gt;TypeScript&lt;/strong&gt; (recommended for type safety).&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Option 2&lt;/strong&gt; : Cloning a Boilerplate Project
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Cloning a boilerplate from GitHub (e.g., Jasmine TypeScript Boilerplate) allows you to skip some manual setup and get started faster with a pre-built structure.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Essential Configuration Steps:&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Page Object Model (POM)&lt;/strong&gt;: A best practice is to set up the Page Object Model, which organizes locators and actions for each page, making the test code more modular and maintainable.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Reporters&lt;/strong&gt; : You can use multiple reporters for your test results. For this example, &lt;strong&gt;Spec&lt;/strong&gt; and &lt;strong&gt;Allure&lt;/strong&gt; reporters are configured to generate readable output and detailed reports.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Base URL&lt;/strong&gt; : Configure a base URL to avoid redundant code for navigation in your tests.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Yarn for package management&lt;/strong&gt; : The book recommends using Yarn over npm due to its faster package installation. If you are cloning a project, its important to run &lt;code&gt;yarn install&lt;/code&gt; to bring in all dependencies.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Test Files and Directory Structure:&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Test files follow this structure: &lt;code&gt;./test/specs/**/*.ts&lt;/code&gt; (organized in folders for better scalability).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Page objects should be stored in &lt;code&gt;./test/pageobjects/**/*.ts&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Running the Tests:&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;After configuration, you can run your tests using:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;yarn wdio&lt;/code&gt; for executing all tests.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;npx wdio run test/wdio.conf.ts&lt;/code&gt; for more direct execution.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The command &lt;code&gt;wdio run&lt;/code&gt; will launch the test suite and display results in the terminal using the chosen reporters.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Managing Dependencies and Commits:&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Use &lt;code&gt;yarn outdated&lt;/code&gt; to check for outdated dependencies.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use &lt;code&gt;yarn upgrade-interactive&lt;/code&gt; to update individual packages.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add a &lt;code&gt;.gitignore&lt;/code&gt; file to avoid committing unnecessary files (e.g., &lt;code&gt;node_modules&lt;/code&gt;, test results) to your repository.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Version control tip&lt;/strong&gt; : Create branches for new features to work on without affecting the main branch. When finished, create a pull request (PR) to merge the changes back into the main branch.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Deeper Concept: Page Object Model (POM)&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The Page Object Model separates test logic from the details of the web UI. Each page of the web app is represented by a class. This class contains:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Locators&lt;/strong&gt; : Find elements on the page.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Actions&lt;/strong&gt; : Perform tasks like clicking buttons or entering text.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example, a &lt;code&gt;LoginPage&lt;/code&gt; object might look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class LoginPage { get usernameInput() { return $('#username'); } get passwordInput() { return $('#password'); } get loginButton() { return $('#login-button'); } async login(username: string, password: string) { await this.usernameInput.setValue(username); await this.passwordInput.setValue(password); await this.loginButton.click(); }}export default new LoginPage();
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Why is POM important?&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Modularity&lt;/strong&gt; : When the UI changes, you only need to update the page object instead of multiple tests.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Reusability&lt;/strong&gt; : Actions can be reused across different test cases, reducing code duplication.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Yarn vs. npm&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Yarn&lt;/strong&gt; installs packages in parallel, speeding up the process compared to npms sequential installations.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It generates a &lt;code&gt;yarn.lock&lt;/code&gt; file to ensure consistent dependencies across environments, much like &lt;code&gt;package-lock.json&lt;/code&gt; in npm, but with better performance management.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Example: First WebdriverIO Test&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;A simple test setup created by the configuration wizard could look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { browser, $ } from '@wdio/globals';describe('Sample Test', () =&amp;gt; { it('should load a website and check the title', async () =&amp;gt; { await browser.url('https://duckduckgo.com/'); await $('#search_form_input_homepage').setValue('WebdriverIO'); await $('#search_button_homepage').click(); const title = await browser.getTitle(); expect(title).toContain('WebdriverIO'); });});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  &lt;strong&gt;Next Steps:&lt;/strong&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Install WebdriverIO&lt;/strong&gt; : Follow the configuration steps in the book to set up the project, using Yarn to manage dependencies.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Run basic tests&lt;/strong&gt; : Start with simple E2E tests like the one shown above to familiarize yourself with WebdriverIO.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Explore configurations&lt;/strong&gt; : Modify reporters, services, or browser setups as per your project needs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Use POM&lt;/strong&gt; : Structure your tests with Page Object Models to ensure scalability and maintainability.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;]]&amp;gt;&lt;/p&gt;

</description>
      <category>webdriveriosetup</category>
      <category>configurewebdriverio</category>
      <category>webdriverio</category>
      <category>testautomation</category>
    </item>
    <item>
      <title>🗃️ The Ultimate Toolset for Becoming a Top 1% SDET 🧰</title>
      <dc:creator>Hardik Chotaliya</dc:creator>
      <pubDate>Thu, 03 Oct 2024 07:05:24 +0000</pubDate>
      <link>https://dev.to/hardikchotaliya/the-ultimate-toolset-for-becoming-a-top-1-sdet-2d6h</link>
      <guid>https://dev.to/hardikchotaliya/the-ultimate-toolset-for-becoming-a-top-1-sdet-2d6h</guid>
      <description>&lt;p&gt;Are you new to Software Development Engineering in Test (SDET) and eager to write your first test code? Starting with a well-planned setup is key to building a stable, scalable, and maintainable testing framework. Ive done that myself, only to realize later there were some tools I missed that could have helped to make my journey easier from the start. That is why we will see the system specifications, tools, and configurations that will help us to write better code from day one.&lt;/p&gt;

&lt;p&gt;In this post, I'll share the essential tools and configurations needed to begin developing a robust Test Automation Framework. These are designed to help you write more tests, debug more efficiently, and produce a testing framework that will be stable, scalable, and require far less code maintenance.&lt;/p&gt;

&lt;p&gt;The main topics covered:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Machine Setup (Windows or MAC)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Installing Visual Studio Code IDE&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Getting a GitHub account for code Version Control&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Writing better code with Prettier, ESLint, and GitLens VS Code Extension&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Installing Browser Extensions&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Why to Start with Tools?
&lt;/h2&gt;

&lt;p&gt;As a beginner, you might be tempted to jump straight into writing your first test script. However, starting with the right tools and setup will save your time and headaches down the road. This blog will discuss the essential tools that every SDET should have in their Skill set.&lt;/p&gt;

&lt;h2&gt;
  
  
  Machine Setup
&lt;/h2&gt;

&lt;p&gt;Before you can do anything in the world of test automation on a machine, you must install some packages. You need &lt;strong&gt;admin rights&lt;/strong&gt; and should install essential packages like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;NodeJS (Latest Stable Version)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Yarn (Preferred over npm due to its speed in parallel installations)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Java JDK&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Visual Studio Code (VSCode)&lt;/strong&gt; or other IDEs like IntelliJ&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Git&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;💡&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; Matching the resources (CPU, RAM) and access levels (local admin rights) of your dev team is crucial for success.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note for Windows Users:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Set up the PATH environment for your node&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reboot the machine for all the changes to take effect&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;Before we get to running our first test, we need to check out system requirements and get our tools. were going to cover how to install and configure tools that will make our job easier, as follows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Hardware specifications&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Node.js&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;A GitHub account&lt;/strong&gt; and &lt;strong&gt;GitHub Desktop&lt;/strong&gt; for code change management&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Microsoft Visual Studio Code&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Prettier&lt;/strong&gt; , &lt;strong&gt;GitLens&lt;/strong&gt; , and &lt;strong&gt;ESLint extensions&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;strong&gt;SelectorsHub&lt;/strong&gt; and &lt;strong&gt;EditThisCookie&lt;/strong&gt; Chrome extensions&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Hardware specifications
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;What are the technical spec requirements for my WebdriverIO test automation system?&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Note - &lt;em&gt;Do not&lt;/em&gt; use the minimum requirements listed anywhere on the internet. Whatever it is, it is too small.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;em&gt;Do&lt;/em&gt; match the CPU speed, the amount of RAM, the drive space, and the number of monitors on desks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CPU:&lt;/strong&gt; Aim for a modern multi-core processor. The faster, the better.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;RAM:&lt;/strong&gt; Minimum 8 GB; 16 GB is recommended.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Storage:&lt;/strong&gt; At least 50 GB of free space, preferably on an SSD for faster performance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Monitors:&lt;/strong&gt; Multiple monitors will significantly improve productivity, especially when debugging.&lt;/p&gt;




&lt;h3&gt;
  
  
  Installing Node.js and npm
&lt;/h3&gt;

&lt;p&gt;Node.js is a tool used to run web applications outside of a web browser. This project was created using Node version v16.13.0 for several reasons. Earlier versions only supported synchronous mode, which was deprecated in WebDriverIO 9.0 and removed in version 8.0. Although the latest version of Node is v22, it is recommended to use v20 as it is the most compatible with other modules and packages.&lt;/p&gt;

&lt;p&gt;Lets begin by installing Node and npm. The following screenshot shows how you can do this:&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%2Fbkb7g46c9ih1intnk2do.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%2Fbkb7g46c9ih1intnk2do.png" width="800" height="502"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Figure 1.1 Downloading Node.js from &lt;a href="https://nodejs.org/en/download/" rel="noopener noreferrer"&gt;https://nodejs.org/en/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The version of Node.js to install will be &lt;strong&gt;long-term support&lt;/strong&gt; ( &lt;strong&gt;LTS&lt;/strong&gt; ), which is version &lt;strong&gt;20.16.0&lt;/strong&gt; as of this writing.&lt;/p&gt;

&lt;p&gt;For both Mac and Windows, we will install a version of Node that is at least version 18.0. From the command shell, type these two commands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;gt; nvm install 20Downloading node.js version 20.16.0 (64-bit)...&amp;gt; nvm use 20Now using node v20.16.0 (64-bit)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;While this completes the Node installation, we need to take note of alternative package managers that offer additional options.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Alternate node package managers Yarn versus npm&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;While npm is the default node package manager provided, we recommend using Yarn to both install packages and run programs. One major advantage of Yarn is that it installs packages in parallel. This reduces the build time significantly when initializing or refreshing the &lt;strong&gt;package.json&lt;/strong&gt; file.&lt;/p&gt;

&lt;p&gt;Again, from the command shell type the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;gt; npm install --global yarn
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After installing Yarn, you can verify the installation by running the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;gt; yarn --version1.22.21
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Configuring the coding environment with GitHub
&lt;/h3&gt;

&lt;p&gt;In the upcoming blogs, we will dive deeper into Git and GitHub for code versioning. But it is good to plan, so we will create a Git folder structure for our projects.&lt;/p&gt;

&lt;p&gt;Our &lt;strong&gt;wdiov9&lt;/strong&gt; project workspace will live in a Git &lt;strong&gt;repository&lt;/strong&gt; ( &lt;strong&gt;repo&lt;/strong&gt; ) folder that holds your projects, Lets begin by creating a &lt;strong&gt;\repos&lt;/strong&gt; folder at the root of our drive, or on the desktop on Mac, to hold our projects:&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%2Fae34nl2qjco1ht61z2lh.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%2Fae34nl2qjco1ht61z2lh.png" width="800" height="728"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Figure 1.2 Sample repository and project directory structure&lt;/p&gt;

&lt;p&gt;Our project will be stored inside a local repository named &lt;strong&gt;"wdiov9"&lt;/strong&gt; folder. This is where we will create a place where our files will be stored. This folder will store our files. Later, we will use code repositories like GitHub, GitLab, and Bitbucket for version control.&lt;/p&gt;




&lt;h3&gt;
  
  
  Create a GitHub account
&lt;/h3&gt;

&lt;p&gt;Go to &lt;a href="https://github.com/" rel="noopener noreferrer"&gt;https://github.com/&lt;/a&gt; and click &lt;strong&gt;Sign up&lt;/strong&gt;. Enter an email, a password, and a username, and verify your account.&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%2Flpqcjth31tjf8u44rggy.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%2Flpqcjth31tjf8u44rggy.png" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Figure 1.3 Github Signup page from &lt;a href="https://github.com/signup" rel="noopener noreferrer"&gt;https://github.com/signup&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Or if you already have a Github account then Sign-In,&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%2Fjjio5lff8nvwkbql4dew.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%2Fjjio5lff8nvwkbql4dew.png" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Figure 1.4 Github SignIn Page &lt;a href="https://github.com/login" rel="noopener noreferrer"&gt;https://github.com/login&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We now have a free public GitHub account for practising commits and version control. Please go to your GitHub page and create a "wdiov9" repository with a README file.&lt;/p&gt;

&lt;p&gt;Steps to Create a Repository on Github:-&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Login on Github&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Go to Repository&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click on New Button&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Now fill in the Repository Name for Example "wdiov9" in our case.&lt;br&gt;&lt;br&gt;
Figure 1.5 Github Repository creation&lt;/p&gt;&lt;/li&gt;
&lt;li&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%2Fqjpctoovj62cm28jsivb.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%2Fqjpctoovj62cm28jsivb.png" alt="Figure 1.5 Github Repository creation" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click on Create repository&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Here we have successfully created the git 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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1vyavt49jycltxqd4j60.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%2F1vyavt49jycltxqd4j60.png" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Figure 1.6 Github Created Repository&lt;/p&gt;




&lt;h2&gt;
  
  
  Installing Visual Studio Code
&lt;/h2&gt;

&lt;p&gt;Download Visual Studio Code from &lt;a href="https://code.visualstudio.com/download" rel="noopener noreferrer"&gt;https://code.visualstudio.com/download&lt;/a&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4ynl2k9xdgpad2yq7hu0.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%2F4ynl2k9xdgpad2yq7hu0.png" width="800" height="473"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Figure 1.7 Visual Studio Code download&lt;/p&gt;

&lt;p&gt;Now that Visual Studio has been installed, we can check that Node and npm have been installed from the embedded Terminal shell window.&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%2Fekjlyhk09ceiltlo3yfl.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%2Fekjlyhk09ceiltlo3yfl.png" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Figure 1.8 Visual Studio code installed and Open&lt;/p&gt;

&lt;p&gt;💡&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Technical insight:&lt;/strong&gt; ESLint and Prettier help enforce best practices, and GitLens gives you a quick historical view of code, which makes debugging efficient when multiple contributors are involved.&lt;/p&gt;

&lt;h3&gt;
  
  
  Installing Visual Studio Code add-ons Prettier
&lt;/h3&gt;

&lt;p&gt;From the &lt;strong&gt;Extensions&lt;/strong&gt; icon, add the &lt;strong&gt;Prettier Code formatter&lt;/strong&gt; extension:&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%2Ffkungzqlqpjyv569304j.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%2Ffkungzqlqpjyv569304j.png" width="800" height="520"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Figure 1.9 Prettier Extension&lt;/p&gt;

&lt;p&gt;Prettier will automatically format code without the need to manually type tabs. In this example, the unformatted code on the left can be formatted by right-clicking and selecting Format Document.&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%2Fbfr35h5ja5gye0xm6bau.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%2Fbfr35h5ja5gye0xm6bau.png" width="800" height="252"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Figure 1.10 Prettier Extension application&lt;/p&gt;

&lt;h3&gt;
  
  
  Installing Visual Studio Code add-ons GitLens
&lt;/h3&gt;

&lt;p&gt;Among other features, the GitLens extension displays the latest code changes in our GitHub repository. To add the &lt;strong&gt;GitLens extension&lt;/strong&gt; , go to &lt;strong&gt;Extensions&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6fpp4l7m5gkuc1hc4wj5.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%2F6fpp4l7m5gkuc1hc4wj5.png" width="800" height="520"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Figure 1.11 GitLens Extension&lt;/p&gt;

&lt;p&gt;Clicking on any line of any tracked document in the project activates &lt;strong&gt;GitLens&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fikqkrb9eps8rychue0rv.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%2Fikqkrb9eps8rychue0rv.png" width="800" height="588"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Figure 1.12 GitLens Extension application&lt;/p&gt;

&lt;h3&gt;
  
  
  Installing Visual Studio Code add-ons ESLint
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;ES&lt;/strong&gt; stands for &lt;strong&gt;ECMAScript&lt;/strong&gt; , which is the code standard for JavaScript that is intended to ensure the interoperability of web pages across different browsers.&lt;/p&gt;

&lt;p&gt;From &lt;strong&gt;Extensions&lt;/strong&gt; , add the &lt;strong&gt;ESLint&lt;/strong&gt; extension:&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%2F84j8mskjm0er9hedza44.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%2F84j8mskjm0er9hedza44.png" width="800" height="520"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Figure 1.13 ESLint Extension&lt;/p&gt;

&lt;p&gt;ESLint identifies and reports code patterns in TypeScript projects to promote consistency and prevent bugs. View it in action in 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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu74ndnagqzgiy00gqzb2.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%2Fu74ndnagqzgiy00gqzb2.png" alt="ESLint was configured to run ... However, that TSConfig does not / none of those TSConfigs include this file" width="800" height="336"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Figure 1.14 ESLint Extension application&lt;/p&gt;

&lt;p&gt;Now that we have configured Visual Studio Code, lets add some tools to our browser for selecting elements and managing cookies.&lt;/p&gt;




&lt;h1&gt;
  
  
  Installing Chrome extensions
&lt;/h1&gt;

&lt;p&gt;Our next two tools are the easiest to install.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;SelectorsHub&lt;/strong&gt; - which allows us to create robust locators of elements in Chrome, Edge, and any Chromium-based browsers.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Cookie-Editor&lt;/strong&gt; - which allows us to clear the cookie cache from the browser frontend.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;💡&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pro Tip:&lt;/strong&gt; Use these extensions to simplify tasks like building and validating XPath or CSS locators and handling cookies without additional code complexity.&lt;/p&gt;




&lt;h1&gt;
  
  
  Summary
&lt;/h1&gt;

&lt;p&gt;In this blog, we have focused on the essential tools and configurations required to develop a robust Test Automation Framework with an Example of WebDriverIO with Typescript. This blog is tailored to help both beginners and experienced testers to set up a stable and scalable testing environment.&lt;/p&gt;

&lt;p&gt;In the next Blog, we will install WebdriverIO v9 and begin to explore the folder structure of the WebdriverIO TypeScript framework project.&lt;/p&gt;




&lt;p&gt;]]&amp;gt;&lt;/p&gt;

</description>
      <category>sdet</category>
      <category>testautomation</category>
      <category>testingframeworks</category>
      <category>automationframework</category>
    </item>
    <item>
      <title>🚀 What’s New in WebdriverIO v9: Key Features &amp; Updates for 2024</title>
      <dc:creator>Hardik Chotaliya</dc:creator>
      <pubDate>Thu, 15 Aug 2024 18:18:34 +0000</pubDate>
      <link>https://dev.to/hardikchotaliya/whats-new-in-webdriverio-v9-key-features-updates-for-2024-28db</link>
      <guid>https://dev.to/hardikchotaliya/whats-new-in-webdriverio-v9-key-features-updates-for-2024-28db</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;On August 16, 2024, WebdriverIO announced the release of version 9, marking an exciting advancement for this test automation framework. Building on the improvements made in versions 6, 7, and 8, the WebdriverIO team revamped the framework in TypeScript, transitioned from CommonJS to ESM, removed sync support in favour of async-only, and introduced integration for Google Lighthouse. This version 9 release represents a significant refinement of the framework. It is expected to bring major changes for end users but won't introduce compatibility issues.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Whats new in WebdriverIO version 9&lt;/strong&gt; :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Automatically enabled WebDriver Bidi for supported sessions enabling features like request mocking across Chrome, Firefox, and Edge&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support for automatic piercing of Web Components&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Implemented native fetch&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Removed support for old JSONWireProtocol and deprecated interfaces&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Renamed @wdio/devtools-service to @wdio/lighthouse-service&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Consolidating Lighthouse-related commands&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Removed devtools features in favour of Puppeteer and the getPuppeteer command&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Faster tests due to the new TypeScript runtime environment&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Lets explore the WebdriverIO v9 updates.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Key Features of WebdriverIO v9&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;WebDriver Bidi Integration&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;WebdriverIO v9 has introduced automatic support for the WebDriver Bidi protocol in supported browser sessions. This is a game-changer for developers and testers, as it allows seamless request and response mocking across major browsers like Chrome, Firefox, and Edge. Previously, handling network requests required additional libraries or workarounds, but with WebDriver Bidi, you can intercept, modify, and test network traffic directly within your tests. This simplifies tasks like testing API responses, simulating different network conditions, and verifying how your application handles various scenarios without needing external tools.&lt;/p&gt;

&lt;p&gt;👉 To read more about WebDriver BiDi - The future of cross-browser automation, please check this blog. 👇👇👇&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/hardikchotaliya/webdriver-bidi-revolutionizing-browser-automation-protocols-for-modern-testing-52e2-temp-slug-2206147"&gt;https://hardikchotaliya.hashnode.dev/webdriver-bidi-browser-automation-protocol-guide&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Automatic Piercing of Web Components&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;One of the most awaited features in WebdriverIO v9 is the automatic piercing of Web Components. Web Components, a suite of different technologies allowing developers to create reusable custom elements, have been notoriously challenging to work with in testing environments. With this update, WebdriverIO can now automatically interact with shadow DOM elements without requiring complex code. This makes testing modern web applications that heavily rely on Web Components much easier and more intuitive, ensuring that your tests can keep pace with the latest development trends.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Native&lt;/strong&gt; &lt;code&gt;fetch&lt;/code&gt; Implementation
&lt;/h3&gt;

&lt;p&gt;In line with modern JavaScript standards, WebdriverIO v9 has introduced native &lt;code&gt;fetch&lt;/code&gt; support. This allows developers to make HTTP requests within their test scripts using the familiar &lt;code&gt;fetch&lt;/code&gt; API, rather than relying on third-party libraries like &lt;code&gt;axios&lt;/code&gt; or &lt;code&gt;request&lt;/code&gt;. Native &lt;code&gt;fetch&lt;/code&gt; support simplifies test code and aligns it more closely with production code, making it easier to write, maintain, and debug. It also reduces the dependency on external libraries, leading to a more streamlined and efficient testing environment.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Deprecation of JSONWireProtocol and Deprecated Interfaces&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;WebdriverIO v9 marks the end of support for the old JSONWireProtocol and several deprecated interfaces. The framework has fully embraced the W3C WebDriver standard, ensuring better compatibility and performance across all browsers. By removing these legacy protocols, WebdriverIO is able to offer a more stable and consistent experience, reducing the chances of running into issues with browser compatibility or outdated implementations. For users, this means fewer headaches and a more reliable testing process.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Renaming of @wdio/devtools-service to @wdio/lighthouse-service&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;In an effort to better reflect its functionality, WebdriverIO has renamed the &lt;code&gt;@wdio/devtools-service&lt;/code&gt; package to &lt;code&gt;@wdio/lighthouse-service&lt;/code&gt;. This change highlights the enhanced integration with Google Lighthouse, a tool used to analyze web page performance, accessibility, SEO, and more. The renamed service now consolidates all Lighthouse-related commands, making it easier for users to run performance audits as part of their automated test suites. This update underscores WebdriverIOs commitment to providing comprehensive testing solutions that go beyond functional testing, enabling developers to monitor and optimize their applications holistically.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Removal of DevTools Features in Favor of Puppeteer&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;With WebdriverIO v9, the framework has removed certain DevTools features, opting instead for enhanced Puppeteer integration via the &lt;code&gt;getPuppeteer&lt;/code&gt; command. Puppeteer, a popular headless browser automation tool, offers a more robust and flexible API for interacting with browser DevTools. By focusing on Puppeteer, WebdriverIO ensures that users have access to the latest and most powerful browser automation capabilities, particularly for tasks like headless testing, capturing screenshots, and generating PDFs. This shift also aligns with the industry trend towards using Puppeteer for complex browser interactions, providing users with a modern and well-supported toolset.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Faster Tests with new TypeScript Runtime Environment in WebdriverIO v9&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Finally, one of the most significant under-the-hood changes in WebdriverIO v9 is the move to a new TypeScript runtime environment. This update not only modernizes the framework but also results in noticeably faster test execution. TypeScripts static typing and enhanced editor support lead to fewer runtime errors and more efficient test code, which in turn speeds up the entire testing process. For developers, this means shorter feedback loops and the ability to iterate more quickly, ultimately improving productivity and code quality.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Advantages of WebdriverIO v9 over v8&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Here's a simplified table comparing the key differences between WebdriverIO v8 and WebdriverIO v9:&lt;/p&gt;

&lt;p&gt;| &lt;strong&gt;Feature/Aspect&lt;/strong&gt; | &lt;strong&gt;WebdriverIO v8&lt;/strong&gt; | &lt;strong&gt;WebdriverIO v9&lt;/strong&gt; |&lt;br&gt;
| &lt;strong&gt;New Features&lt;/strong&gt; | DevTools protocol, ES6 module support, automatic waits, retry mechanism | Component Testing, test parallelization, enhanced TypeScript support, WebdriverIO Assistant |&lt;br&gt;
| &lt;strong&gt;Deprecations/Breaking Changes&lt;/strong&gt; | Removed synchronous commands, Node.js below v12 deprecated | Further streamlined commands, Node.js below v14 deprecated |&lt;br&gt;
| &lt;strong&gt;Ecosystem &amp;amp; Plugins&lt;/strong&gt; | Expanded plugin ecosystem, cloud service integration | New plugin architecture, improved CI/CD support |&lt;br&gt;
| &lt;strong&gt;Configuration &amp;amp; Setup&lt;/strong&gt; | Simplified &lt;code&gt;wdio.conf.js&lt;/code&gt;, support for &lt;code&gt;.env&lt;/code&gt; files | WebdriverIO Assistant, enhanced CI/CD integration |&lt;br&gt;
| &lt;strong&gt;Documentation &amp;amp; Support&lt;/strong&gt; | Improved guides and community forum | More in-depth guides, video tutorials, expanded community support |&lt;br&gt;
| Cross Browser Request Mocking | WebdriverIO introduced request mocking in &lt;a href="https://github.com/webdriverio/webdriverio/blob/v6/CHANGELOG.md#rocket-new-feature-14" rel="noopener noreferrer"&gt;&lt;code&gt;v6.3.0&lt;/code&gt;&lt;/a&gt;, limited to Chromium browsers | Due to use of WebDriver Bidi, Extending support to all browsers |&lt;br&gt;
| Automatic Shadow Root Piercing | supported "deep selectors", this functionality was limited to CSS selectors | WebdriverIO is the first framework to support this capability for shadow roots in both &lt;code&gt;open&lt;/code&gt; and &lt;code&gt;closed&lt;/code&gt; mode. |&lt;br&gt;
| Setting Viewports | With WebDriver Classic, this can be challenging because browser windows cannot scale down to very small sizes and often maintain a minimum width of &lt;code&gt;500px&lt;/code&gt;. | v9 introduces a new "setViewport" command for precise mobile emulation, Adjust viewport size, device pixel ratio, and user agent easily in one command with the new "device" emulation scope, enhancing your responsive testing |&lt;br&gt;
| Automatic Dialog Handling | With the WebdriverIO v8 version, all commands will fail if you don't handle them properly. | With WebdriverIO v9 we will start automatically suppressing dialogs, unless you explicitly register a listener to it |&lt;/p&gt;

&lt;p&gt;This table provides a concise overview of the major changes between the two versions.&lt;/p&gt;




&lt;h2&gt;
  
  
  My thoughts on the version update
&lt;/h2&gt;

&lt;p&gt;WebdriverIO v9 is a significant step forward, building on the continuous efforts of the team to create a more robust and well-rounded testing framework. Im particularly excited about the new features, especially the opportunity to explore Webdriver Bidi with WebdriverIO.&lt;/p&gt;

&lt;p&gt;What I appreciate most is that this update doesnt introduce many breaking changes, making the upgrade from version 8 to 9 seamless. This allows developers to take advantage of the new enhancements without the headache of compatibility issues. I highly recommend updating your projects to the latest version to benefit from these improvements.&lt;/p&gt;

&lt;p&gt;💡&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to upgrade to WebdriverIO v9 from WebdriverIO v8 [&lt;/strong&gt;The blog is coming till 26 Aug 2024]&lt;/p&gt;

&lt;p&gt;If youre interested in delving deeper into WebdriverIO, check out my blog post on &lt;em&gt;Starting with WebdriverIO v9 [Coming Soon]&lt;/em&gt;. Additionally, feel free to explore this &lt;a href="https://github.com/hardikchotaliya/WebdriverIO-TS-Cucumber-e2e" rel="noopener noreferrer"&gt;GitHub repository&lt;/a&gt; where Ive shared a sample example using WebdriverIO v9.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;WebdriverIO v9 represents a major step forward for the framework, bringing with it a host of new features and improvements that enhance the testing experience. From better browser protocol support to modern JavaScript features, WebdriverIO continues to evolve, making it an indispensable tool for developers and testers alike. By staying up to date with the latest changes and understanding how to leverage these new capabilities, you can ensure that your test automation is both effective and future-proof.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Important Links you can refer to:&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://webdriver.io/blog/2024/08/15/webdriverio-v9-release" rel="noopener noreferrer"&gt;WebdriverIO v9 Released | WebdriverIO&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://webdriver.io/community/events/2024-08-15-v9-release-party/" rel="noopener noreferrer"&gt;WebdriverIO v9 Release Party: Browser Automation's Future&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/webdriverio/webdriverio/issues/10362" rel="noopener noreferrer"&gt;[Tracker] WebdriverIO v9 Release&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;]]&amp;gt;&lt;/p&gt;

</description>
      <category>webdriverbidi</category>
      <category>webdriveriov9</category>
      <category>webdriverioupdates20</category>
      <category>webdriveriofeatures</category>
    </item>
    <item>
      <title>⏳ WebDriver BiDi: Revolutionizing Browser Automation Protocols for Modern Testing</title>
      <dc:creator>Hardik Chotaliya</dc:creator>
      <pubDate>Thu, 15 Aug 2024 07:15:26 +0000</pubDate>
      <link>https://dev.to/hardikchotaliya/webdriver-bidi-revolutionizing-browser-automation-protocols-for-modern-testing-2h9n</link>
      <guid>https://dev.to/hardikchotaliya/webdriver-bidi-revolutionizing-browser-automation-protocols-for-modern-testing-2h9n</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;History of Protocols in Automation&lt;/strong&gt;
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;We have two sets of automation controls here:&lt;/em&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;One is based on the WebDriver protocol&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;And the other is running the tests within the browser.&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;em&gt;These two can be categorized as&lt;/em&gt; &lt;strong&gt;&lt;em&gt;Low-level and High-level&lt;/em&gt;&lt;/strong&gt;  &lt;strong&gt;&lt;em&gt;implementations*&lt;/em&gt;&lt;/strong&gt; :*&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Based on the WebDriver protocol ( &lt;strong&gt;Low-level implementations&lt;/strong&gt; )&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Running the tests within the browser ( &lt;strong&gt;High-level implementations&lt;/strong&gt; ).&lt;/em&gt;&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsull0m2yok0j1tit0ba2.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%2Fsull0m2yok0j1tit0ba2.png" width="800" height="227"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Low-Level Implementations
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;WebDriver Classic&lt;/strong&gt;
&lt;/h3&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%2Fszy38hj37gsnhctst7ug.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%2Fszy38hj37gsnhctst7ug.png" width="800" height="228"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the WebDriver classic system, a client represents the automation framework (e.g., Selenium WebDriver, Webdriver IO, Nightwatch js) and browser drivers developed by Vendors. These drivers communicate with browser binaries via HTTP JSON protocol to execute actions like click, send keys, hover, etc. Each action is an API call to the browser binary, which then performs the action and responds to the client.&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%2Fres.cloudinary.com%2Fpracticaldev%2Fimage%2Ffetch%2Fs--niRiYX_U--%2Fc_limit%252Cf_auto%252Cfl_progressive%252Cq_auto%252Cw_880%2Fhttps%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5yvm2sqgeiw3lnouvp9v.jpg" 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%2Fres.cloudinary.com%2Fpracticaldev%2Fimage%2Ffetch%2Fs--niRiYX_U--%2Fc_limit%252Cf_auto%252Cfl_progressive%252Cq_auto%252Cw_880%2Fhttps%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5yvm2sqgeiw3lnouvp9v.jpg" alt="WebDriver Protocol" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Sends commands&lt;/strong&gt; : Tells the browser what to do (click, type, etc.) using simple commands.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Multi-browser support&lt;/strong&gt; : Works with many different browsers.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Slowdown&lt;/strong&gt; : Can be slow because it needs to constantly send new commands.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Limited&lt;/strong&gt; : Can't directly access things like network activity.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;CDP (Chrome DevTools Protocol)&lt;/strong&gt;
&lt;/h3&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%2F4rq0o01h29p0kr7rb9fr.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%2F4rq0o01h29p0kr7rb9fr.png" width="800" height="183"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Chrome DevTools Protocol (CDP) is primarily for developers and aids in debugging. It enables access to the browser DevTools. Google introduced Puppeteer, an automation tool that utilizes CDP to interact with browsers.&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%2Fres.cloudinary.com%2Fpracticaldev%2Fimage%2Ffetch%2Fs--K1_BYeI8--%2Fc_limit%252Cf_auto%252Cfl_progressive%252Cq_auto%252Cw_880%2Fhttps%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq14j92vkakumdwkel0sf.jpg" 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%2Fres.cloudinary.com%2Fpracticaldev%2Fimage%2Ffetch%2Fs--K1_BYeI8--%2Fc_limit%252Cf_auto%252Cfl_progressive%252Cq_auto%252Cw_880%2Fhttps%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq14j92vkakumdwkel0sf.jpg" alt="Chrome DevTools Protocol" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Deep control&lt;/strong&gt; : Lets you see and change almost anything in a Chrome browser, like network traffic, console messages, and device settings.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Fast and flexible&lt;/strong&gt; : Uses a direct connection to the browser, so it's quick and can respond to changes instantly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Limited to Chrome&lt;/strong&gt; : Only works with Chrome-based browsers.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Changing rules&lt;/strong&gt; : The way to use it can change as Chrome updates.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  High-Level Implementations
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Native Scripting (Web APIs &amp;amp; Node.js)
&lt;/h3&gt;

&lt;p&gt;Cypress-based implementations fall into this category. In this approach, the automation tool utilizes Web API and injects JavaScript directly into the browser to execute the tests. As a result, the automation tool operates within the constraints established by the JavaScript code sandbox.&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%2Fres.cloudinary.com%2Fpracticaldev%2Fimage%2Ffetch%2Fs--_RnGZsUY--%2Fc_limit%252Cf_auto%252Cfl_progressive%252Cq_auto%252Cw_880%2Fhttps%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frlxbb3c6tt5aceo0sk0i.jpg" 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%2Fres.cloudinary.com%2Fpracticaldev%2Fimage%2Ffetch%2Fs--_RnGZsUY--%2Fc_limit%252Cf_auto%252Cfl_progressive%252Cq_auto%252Cw_880%2Fhttps%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frlxbb3c6tt5aceo0sk0i.jpg" alt="Native Scripting Approach" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Fast and in control&lt;/strong&gt; : Runs tests quickly inside the browser.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Limited actions&lt;/strong&gt; : Can't fully mimic real user behaviour, mostly works by changing the page's code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Security restrictions&lt;/strong&gt; : Can't do everything, like opening new tabs or windows, because the browser limits what it can do.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;So, now we have discussed three approaches: one is based on JavaScript, where JavaScript is injected, but we do not want to pursue that direction as its entirely high-level and represents a different model altogether. Now, within low-level implementations, we have certain advantages and disadvantages with each of the tools. So, what if there exists a solution where the best of both worlds are brought together? For example, Real User Emulation, W3C standard compliance, Multi-browser support, Event-Driven architecture, and Bi-Directional communication. Thats where the solution comes in the form of&lt;/em&gt; &lt;strong&gt;&lt;em&gt;WebDriver BiDi.*&lt;/em&gt;&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F84kt60iir9x58o1g8d9k.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%2F84kt60iir9x58o1g8d9k.png" width="800" height="383"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;What is WebDriver BiDi?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;WebDriver BiDi (Bidirectional) is a significant evolution in the world of test automation. Unlike traditional WebDriver, which primarily allows communication from test scripts to the browser, WebDriver BiDi introduces bidirectional communication. This allows real-time data exchange between your test scripts and the browser.&lt;/p&gt;

&lt;p&gt;Imagine youre controlling a robot. Traditional WebDriver is like telling the robot what to do, but you cant hear its replies. WebDriver BiDi is differentit lets the robot talk back to you! This makes it easier to see whats happening in real-time.&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%2F7pos2wngmsmnnp36dj25.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%2F7pos2wngmsmnnp36dj25.png" alt="The vision behind WebDriver BiDi." width="800" height="226"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Work on WebDriver BiDi was started in 2020 by the W3C Browser Testing and Tools working group This work is a collaboration: Webdriver BiDi working group comprises browser vendors (chrome, firefox, safari), open-source browser automation projects (selenium, webdriverIO), and companies offering browser automation solutions (Browser Stack, Sauce labs).&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%2Fpp0mptu7n3xd4jv83bf6.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%2Fpp0mptu7n3xd4jv83bf6.png" alt="The WebDriver BiDi Working Group" width="800" height="252"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;All these stakeholders work together in harmony to bring a simple and unified solution for the testers that is easy to implement.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Why Do We Need WebDriver BiDi?&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;1. Listening to DOM Events&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What It Does&lt;/strong&gt; : WebDriver BiDi can listen to events happening in the DOM (Document Object Model) of a webpage, like clicks, inputs, or any changes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why It Matters&lt;/strong&gt; : This allows tests to react immediately when something happens on the page, making automation smarter and more efficient.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;2. Capturing &amp;amp; Sending JavaScript Errors&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What It Does&lt;/strong&gt; : If theres a JavaScript error on a webpage, WebDriver BiDi can catch it and send it back to the test script.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why It Matters&lt;/strong&gt; : This helps in identifying issues in real-time, so you can fix them quickly.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;3. Reading Console Messages&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What It Does&lt;/strong&gt; : WebDriver BiDi can read messages that are logged in the browsers console (like warnings, errors, or logs).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why It Matters&lt;/strong&gt; : This gives insights into whats happening behind the scenes in the browser, helping you understand any issues or behavior in your web app.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;4. Recording or Manipulating Network Traffic&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What It Does&lt;/strong&gt; : It can monitor and even change the network requests and responses happening between the browser and the server.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why It Matters&lt;/strong&gt; : This is useful for testing how your app behaves under different network conditions, like slow connections or specific server responses.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;5. Real-Time Communication and Control Over Browser Internals&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What It Does&lt;/strong&gt; : WebDriver BiDi allows two-way communication with the browser, meaning it can send and receive data instantly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why It Matters&lt;/strong&gt; : This real-time interaction enables more dynamic and responsive tests, making it easier to handle complex scenarios like animations or dynamic content.&lt;/p&gt;

&lt;p&gt;These features make &lt;a href="https://w3c.github.io/webdriver-bidi/" rel="noopener noreferrer"&gt;WebDriver BiDi&lt;/a&gt; a powerful tool for modern browser automation, giving you greater control and insights into how your web applications work.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;In conclusion, WebDriver BiDi is a game-changer for automation, as it leverages the benefits of Bi-Directional Communication, Event-Driven architecture, Multi-browser support, and access to low-level controls such as Console and Network. It also adheres to the W3C standard. Let's start adopting these new features as they're released and experience the benefits firsthand.&lt;/p&gt;




&lt;p&gt;WebdriverIO v9 &amp;amp; Selenium have integrated this future of protocols into their tools.&lt;/p&gt;

&lt;p&gt;To read more, please check this blog.&lt;/p&gt;

&lt;p&gt;💡&lt;/p&gt;

&lt;p&gt;Upcoming Soon...&lt;/p&gt;




&lt;p&gt;]]&amp;gt;&lt;/p&gt;

</description>
      <category>webdriverbidi</category>
      <category>browserautomationpro</category>
      <category>webdriverbidirection</category>
      <category>webdriverbidivswebdr</category>
    </item>
    <item>
      <title>🖼️ Comprehensive Guide to Image Testing &amp; Optimization for E-commerce Websites</title>
      <dc:creator>Hardik Chotaliya</dc:creator>
      <pubDate>Sun, 21 Jul 2024 12:15:56 +0000</pubDate>
      <link>https://dev.to/hardikchotaliya/comprehensive-guide-to-image-testing-optimization-for-e-commerce-websites-g1f</link>
      <guid>https://dev.to/hardikchotaliya/comprehensive-guide-to-image-testing-optimization-for-e-commerce-websites-g1f</guid>
      <description>&lt;p&gt;&lt;strong&gt;Image Testing for E-commerce&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Introduction of Image Testing for E-commerce
&lt;/h2&gt;

&lt;p&gt;Image Testing for E-commerce plays an important role in E-commerce website testing. They enhance the visual appeal and aid in product representation, helping customers make informed purchasing decisions. In this blog post, we'll delve into the types of images supported on the web, their features, applications, and best practices for testing these images to ensure optimal performance and 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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkp9mqoe5bmz1lfrdzzaa.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkp9mqoe5bmz1lfrdzzaa.jpeg" alt="Image Testing for E-commerce website" width="800" height="432"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Figure 1.1 Image Testing for E-commerce Website&lt;/p&gt;




&lt;h2&gt;
  
  
  Types of Images Supported on the Web
&lt;/h2&gt;

&lt;p&gt;The following table summarizes the common image types supported by web browsers:&lt;/p&gt;

&lt;p&gt;| Type | MIME Type | Description | File Extensions |&lt;br&gt;
| APNG | image/apng | Animated Portable Network Graphics | .apng |&lt;br&gt;
| PNG | image/png | Portable Network Graphics | .png |&lt;br&gt;
| JPEG | image/jpeg | Joint Photographic Experts Group | .jpg, .jpeg, .jfif |&lt;br&gt;
| GIF | image/gif | Graphics Interchange Format | .gif |&lt;br&gt;
| TIFF | image/tiff | Tagged Image File Format | .tiff |&lt;br&gt;
| BMP | image/bmp | Bitmap | .bmp |&lt;br&gt;
| ICO | image/x-icon | Microsoft Icon | .ico |&lt;br&gt;
| SVG | image/svg+xml | Scalable Vector Graphics | .svg |&lt;br&gt;
| WebP | image/webp | Web Picture | .webp |&lt;/p&gt;




&lt;h3&gt;
  
  
  Choosing the Right Image Type
&lt;/h3&gt;

&lt;p&gt;Each image type has its own unique features and use cases:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;APNG &amp;amp; PNG&lt;/strong&gt; :&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;JPEG&lt;/strong&gt; :&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;GIF&lt;/strong&gt; :&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;SVG&lt;/strong&gt; :&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;TIFF:&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;BMP&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;ICO&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;WebP&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Image Testing for E-commerce Website
&lt;/h2&gt;

&lt;p&gt;To ensure your e-commerce website promises a seamless personal experience, its crucial to check photos very well. Heres a checklist to manual you via the system:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;File Size and Load Time&lt;/strong&gt; :&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Image Quality&lt;/strong&gt; :&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Responsive Design&lt;/strong&gt; :&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Accessibility&lt;/strong&gt; :&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;SEO&lt;/strong&gt; :&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Cross-Browser Compatibility&lt;/strong&gt; :&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Performance Impact&lt;/strong&gt; :&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  Best Practices for E-commerce Images
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Optimize Image Sizes:&lt;/strong&gt; Use compressed formats like JPEG and WebP to reduce load times without sacrificing quality. Ensure product images are optimized for various screen sizes and resolutions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Responsive Images:&lt;/strong&gt; Implement responsive images using the &lt;code&gt;srcset&lt;/code&gt; attribute to serve different image sizes based on the users device. This improves performance and user experience on mobile devices.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Lazy Loading:&lt;/strong&gt; Utilize lazy loading techniques to defer loading images until they are in the viewport. This helps in improving initial page load times and overall site performance.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Accessibility:&lt;/strong&gt; Ensure all images have descriptive &lt;code&gt;alt&lt;/code&gt; attributes for better accessibility and SEO. This helps screen readers and improves search engine understanding of the image content.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Consistent Image Quality:&lt;/strong&gt; Maintain a consistent quality and style for product images. High-quality, clear images can significantly impact purchase decisions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Use Appropriate Formats:&lt;/strong&gt; Choose the right image format for the context. For example, use PNG for images requiring transparency, JPEG for photographs, SVG for logos and icons, and GIFs for simple animations.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Content Delivery Networks (CDNs):&lt;/strong&gt; Utilize CDNs to deliver images quickly to users regardless of their geographic location. This reduces latency and improves load times.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;By following these hints for Image Testing for E commerce, you can ensure that the images on your e-commerce website are optimized for both performance and user experience, driving better engagement and conversions.&lt;/p&gt;

&lt;p&gt;Feel free to share your thoughts and any additional tips or Hints you might have in the comments below!&lt;/p&gt;




&lt;p&gt;]]&amp;gt;&lt;/p&gt;

</description>
      <category>testing</category>
      <category>ecommerce</category>
      <category>developer</category>
      <category>bestpractices</category>
    </item>
  </channel>
</rss>
