.avif)
API, which stands for Application Programming Interface, serves as a means for communication between two distinct software components.
During the development phase of a product, the absence or incomplete state of the user interface (UI) poses a challenge in validating the front-end functionalities. However, API testing provides a solution by enabling the validation of responses expected in the front end as the product takes shape.
This approach proves invaluable in ensuring the reliability and correctness of the software, even before the UI elements are fully implemented.
API supports following HTTP requests - POST, GET, PUT, PATCH and DELETE.
Cypress is a JavaScript-based end-to-end testing framework designed for modern web applications. It is specifically built to address the challenges of testing web applications in real-world scenarios.
Cypress is commonly used for conducting functional testing, integration testing, and end-to-end testing of web applications.
Refer our article Cypress - Automation tool for modern web for Cypress setup.
In Cypress, an "IT block" refers to an individual test case or a test scenario written using the “it” function.
describe is used to group related it blocks and provides a way to organize your tests.
Syntax for describe block:
describe("Testname", ()=>{ })
Inside the describe block, there are it blocks, each representing a different test scenario.
Syntax for it block:
it("Testcase_title", () =>{ })
Each it block contains a set of Cypress test commands that define the steps to be taken during the test. Following is the example

Syntax: cy.request(method,URL,body)
In the above command, method and body are optional but the URL is mandatory.
Syntax with two arguments:

Syntax with more than two arguments:

Sending GET requests with cy.request command. We will make a GET request to the URL .
Syntax for simple GET Request:

Here, .its('status').should('equal', 200); describes the assertion in Cypress which states that when the request gets successfully passed it should give response 200 and when we receive the response 200 that means our request is successfully passed.

POST request is used to create data on the server. Here in POST Request we require three arguments: method, URL and body. method to state the POST method, URL - endpoint where to send request, body is used for the data you want to send to the server.
Syntax for POST Request:

Here, we are sending userId, title and body data to the server. And when we receive the response 201 that means our request is successfully passed.

PUT request is used to update the data on the server. Here in PUT Request we require three arguments: method, URL and body. method to state the PUT method, URL - endpoint where to send request, body is used for the data you want to update on the server.
Syntax for the PUT Request:

Here, we are updating the userId, title, body and id data on the server. And when we receive the response 200 that means our request is successfully passed.

DELETE request is used to delete the data on the server. Here in PUT Request we require two arguments: method and URL. method to state the DELETE method, URL - endpoint where to send request.
Syntax for DELETE Request:


Here, we delete the data on the server. And when we receive the response 200 that means our request is successfully passed.

Previously we have seen how we can make HTTP post requests with static data. Now lets understand how we can make HTTP Post requests with dynamic data. Cypress provides various functions and with the help of them we will create dynamic data.
Syntax for Dynamic POST Request

In above example:
Now, assertion will play a role by comparing the values by checking if the 'tourist_name' property in the response body is equal to the 'tourist_name' in the request body, same for ‘tourist_email’ and ‘tourist_location’. When we receive the response 201 that means our request is successfully passed.

There are different ways to run the test:
Steps to execute the test through terminal:
npx cypress run --spec cypress/e2e/APITesting/filename.cy.js
Steps to execute the test through Cypress dashboard:
npx cypress open (This will open the cypress application)
Cypress API Testing is leveraging the capabilities of the Cypress testing framework to assess and validate the functionality and behavior of APIs (Application Programming Interfaces). Also, it facilitates seamless integration between front-end and API tests. So make use of Cypress for API Testing and improve your testing process.
Happy Testing :)

Continuous Integration Testing (CI) is an essential practice in automated testing that focuses on frequent integration and testing of code changes. It brings numerous benefits to the development and testing process, including early bug detection, faster feedback loops, and improved code quality. Integrating Headway with popular CI tools like Jenkins allows for seamless automation of the CI process.
In this blog post, we will walk through the process of integrating Headway with Jenkins for seamless Continuous Integration and Deployment (CI/CD). We'll cover the prerequisites, configuration steps, and execution of a Jenkins job for running a test suite. By the end, you'll have a clear understanding of how to set up and execute CI/CD workflows using Jenkins and Headway.
Before getting started, ensure that you have the following prerequisites installed on your system:










Note : As Headway is open source so no need to enter the credentials of Github.








By following this guide, you have successfully integrated Headway with Jenkins for an efficient CI/CD workflow. You learned how to configure Jenkins jobs, execute test suites, and access relevant reports and logs. With this knowledge, you can enhance your development process by automating tasks and ensuring smoother software delivery through CI/CD.

Headway is a data-driven testing framework that uses Selenium to automate web-based applications. It provides a platform for creating and managing automated tests to be used by QA teams to test web applications thoroughly.
These automated tests can be run repeatedly, ensuring consistent and reliable results. By automating repetitive and time-consuming tasks, QA teams can focus on more complex testing scenarios, such as edge cases, negative testing, and usability testing.
Headway allows QA teams to create and execute tests without requiring deep technical knowledge. The user-friendly interface and intuitive workflow enable QA professionals to create and manage test suites with ease, making the testing process more efficient and productive.
Find more information on features and benefits by visiting Headway’s Landing page.
In this blog, we will cover the following topics:
Each topic will be discussed in detail, providing insights and practical guidance to help you leverage the Headway testing framework effectively.
Now, let's delve into each of these topics in separate child blogs.
This blog will guide you through the process of setting up your environment for Headway testing. It will cover the prerequisites, installation steps, and configuration of test settings. Whether you're using Java, Maven, Selenium WebDriver, TestNG, or Eclipse, this blog will provide detailed instructions to ensure a smooth setup.
Link: Headway : Setup the Environment
In this blog, we will explore the best practices for writing efficient and maintainable Headway tests. We will discuss the Page Object Model (POM) design pattern and its benefits in organizing test code.
We will also provide a step-by-step guide on the basic structure of a Headway project, including the organization of pages, tests, and test data. You will learn how to define element locators, action methods, and assertions in your test classes. With a practical example of searching for a product on Amazon.in, you will gain hands-on experience in writing Headway tests.
Link: Headway : Best practices and Create First Test
In this blog, we will explore the process of executing Headway tests using testng.xml and generating comprehensive test reports. We will cover how to configure the testng.xml file to define test suites, include or exclude test classes, methods, or groups, and set up test parameters, test data, or test environment configurations.
Link: Headway : Test Execution and Reporting
In this blog, we will guide you through the integration of Headway with the popular continuous integration tool, Jenkins. You will learn how to install Jenkins and the necessary plugins, configure a Jenkins job to build and test your Headway project and view the test results of the Headway HTML report. With this integration, you can automate your CI process and leverage the benefits of frequent integration and testing.
Link: Headway Integration with CI/CD: Step-by-Step Guide
In this blog post, we explored the essential aspects of Headway and its significance in automation testing. We covered various topics to help you get started with Headway and maximize its potential for efficient test automation. Integrating Headway with popular CI tools such as Jenkins can help automate the testing process, ensure consistent test execution, and provide quick feedback on any potential issues in the codebase.
Explore further documentation, practice writing Headway tests, and continue learning about advanced topics to enhance your test automation capabilities. Incorporating Headway into your test automation strategy will help you streamline your testing efforts and achieve more efficient and accurate results.

Proper execution and reporting of automation tests play a crucial role in ensuring the reliability and effectiveness of your automation testing efforts. We will learn how to configure the testng.xml file, execute automation tests using testng.xml and pom.xml, and generate comprehensive test reports.
Let's dive in!

Once the testng.xml file is updated, run tests using testng.xml.
You can refer to section 3.4. Updating the existing testng.xml of Headway user guide to get more information on how to update testng.xml using different parameters.
Automation test execution using testng.xml and pom.xml involves utilizing TestNG and Maven as the tools for configuring and running tests. The Headway includes a build automation file pom.xml that defines the project dependencies and build configurations. Automated tests can be executed using a build tool Maven, or through an integrated development environment (IDE) that supports running tests.



In conclusion, effective test execution and reporting are vital components of a successful testing strategy. By properly configuring the testng.xml file and utilizing the power of Maven and TestNG, you can streamline your test execution process and obtain detailed test reports. These reports provide valuable insights into the test results, including test status, duration, error messages, and stack traces. By leveraging the information provided in the reports, you can identify and address any issues or failures in your tests promptly.

Now that you have set up your environment, it is essential to follow best practices when writing automation tests. These practices ensure maintainable, efficient, and reliable test code. This blog will discuss the best practices for writing Headway tests, including the Page Object Model (POM) design pattern and will also guide you through the basic structure of a Headway project, including the organization of pages, tests, and test data. It will also provide a sample code snippet of a Headway test class to search for a product on amazon.in.
The Page Object Model (POM) is a design pattern used in test automation to represent web pages as objects and organize them in a hierarchical manner. Each page is represented as a class that contains all the elements and actions that can be performed on that page. The POM pattern separates the page logic from the test code, making the automated tests more readable, maintainable, and reusable. The Headway framework employs the Page Object Model (POM) design pattern.
Let's discuss the basic structure of the project:
Each page class typically includes:
The headway-example repository project provides an example implementation of using Headway for test automation. For example, you'll find classes like ProductDetailsPage, CartPage, and SearchResultPage representing different pages of the web application.

Below is sample code of SearchResultPage class that is used searching a product on amazon.in :
Below is sample code of SearchResultTest class that is used searching a product on amazon.in :
You can refer to Chapter 3 of Headway user guide to get more information on how we have automated a few use cases for amazon.in.
Debugging tests is an important part of test automation. Here are some tips and tricks for debugging your Headway tests:
Congratulations on creating your first Headway test! By understanding the structure of a Headway project and utilizing page classes, test classes, and test data, you can create effective tests to automate web application testing. With Headway, you can confidently verify the behavior of web applications and ensure their quality. By following the tips and tricks discussed in this blog, you can enhance your debugging process and ensure the reliability of your tests.

Before getting started with Headway testing, it is essential to set up your automation environment correctly. This involves installing the required dependencies and configuring the test settings. This blog will guide you through the power of setup and necessary steps to set up your environment for the Headway testing framework.
Clone the Headway repository to your local machine.

Install the required dependencies by running mvn clean install in the root directory
OR
Import project as an existing Maven project in Eclipse, File > Import > Maven > Existing Maven Projects > Next >
a. Browse to headway
b. Ensure pom.xml is found
c. Finish


You can refer to Chapter 2 of Headway user guide for more information on setup and installation.
Setting up your environment correctly is crucial for successful Headway testing. By following the installation steps and configuring the test settings, you can ensure that your testing environment is ready to create and execute tests using Headway. A properly set up environment lays the foundation for effective and efficient testing with Headway.
.avif)
In the fast-paced world of software development, ensuring the quality of your applications is paramount. Automated testing has emerged as a cornerstone of quality assurance, and Selenium has long been a favored tool for automating web application testing.
With the introduction of Selenium Manager in version 4.6.0, there is a commitment to streamline and improve the automation process. In this blog, we'll delve into what Selenium Manager is, its purpose, how it addresses challenges faced by its predecessor WebDriverManager, and even provide a practical demonstration.
Selenium Manager is a robust automation tool designed to facilitate the process of automated testing of web applications. It provides a centralized platform to manage WebDriver binaries, making it easier to set up and manage browser drivers for Selenium automation.
This tool takes a step beyond WebDriverManager and aims to streamline the configuration and execution of tests, ultimately leading to more efficient and effective testing practices.
Automated testing is pivotal for maintaining software quality, but setting up and managing browser drivers for Selenium-based testing was not without challenges. WebDriverManager, though helpful, left room for improvement.
Selenium Manager was introduced to address these shortcomings, aiming to provide a more centralized, streamlined, and user-friendly experience. It simplifies the process of managing WebDriver binaries and ensures that the correct driver versions are used across different environments.
Prior to Selenium Manager, managing WebDriver binaries was often a manual and error-prone process. Teams had to juggle between different browser versions and their corresponding drivers, leading to compatibility issues and wasted time.
WebDriverManager alleviated some of these concerns, but it still required manual configuration and lacked a unified platform for managing drivers across projects.
Selenium Manager improves upon WebDriverManager by offering a centralized management solution. It automates the process of downloading and setting up WebDriver binaries for various browsers, saving developers the hassle of manually managing driver versions.
Additionally, it provides integration with popular testing frameworks, making it seamless to incorporate into existing testing workflows.
Let's take a quick look at how Selenium Manager can be integrated into an automated testing script using Java and TestNG:
Selenium Manager is a significant advancement in the world of automated testing. It addresses the challenges faced by its predecessor, WebDriverManager, and streamlines the management of WebDriver binaries.
Embracing Selenium Manager can greatly enhance the automated testing process. Its centralized management of WebDriver binaries, along with its integration with testing frameworks, makes it a valuable tool for any testing team.
BugHerd is a visual feedback and web-based bug-tracking tool designed specifically for web development and design projects. BugHerd allows teams to report and track bugs, issues, and feedback directly on a website, making it particularly useful for collaborative web development projects.
The BugHerd sidebar can be added to a webpage in two different ways. You may choose to :

3. Click the "Add extension" button to complete the installation.

1. Add the project name and the URL of the site.

2.Then a pop-up will appear.

3. Click on the ‘Report an issue on your site’.

4. Then it redirects you to the site.

5. On the site where you want to track the bug, just simply click on the area.

6. Lock the bug and include details such as the bug's severity, tags, and current state. Then proceed to assign it directly.

7. Click on the ‘Create task’ button.

8. You can see the task is added on the site.

9. Tag the Page: Click on the ‘Tag the Page’ icon

10. Click on the task to check the issue where users can see the Tag page location.



a. After recording the video, write the issue, select the severity of the issue and assign the issue to the developer and then click on the create button.

b. After creating the task, the user can see the task by clicking on the task icon where users can play the video to see the issue.


User can also add the column in workflow by clicking on ‘Plus’ icon

Team members can collaborate more easily with BugHerd, which makes the resolution process more streamlined and effective.
Jira is a versatile team project management and issue tracking tool widely utilized by software development teams. It facilitates efficient planning, tracking, and management of work. Supporting agile methodologies with Scrum and Kanban boards, Jira provides flexibility in work visualization. The tool plays a crucial role in enhancing team collaboration, boosting productivity, and ensuring project success.
Jira's flexible workflow engine empowers teams to define and customize their own processes, allowing the tool to adapt to the unique needs of different projects. Additionally, Jira seamlessly integrates with a wide range of third-party tools and plugins. This integration enhances collaboration and expands functionality, making Jira a dynamic solution capable of meeting diverse project requirement




For UI issues, tasks are created and added to Backlog in BugHerd. And once Bugherd is mapped to the relevant JIRA project and/or Epic, we can send these tasks with details (task title, description, screenshot) to the JIRA task manually.
We can also send tasks and updates to JIRA automatically using BugHerd-Jira integration settings.

When it comes to fighting UI problems, BugHerd has shown to be an invaluable ally. Teams aiming to provide flawless user experiences will find its visual feedback capabilities, collaboration features, and easy-to-use interface to be very suitable. Development teams may guarantee that UI issues are found and fixed quickly by configuring BugHerd for UI issue tracking, effectively documenting issues, and utilizing its collaborative resolution tools. This will improve user happiness and result in a polished end product.
_0.avif)
Sitemaps are crucial for helping search engines understand websites. When sitemaps are invalid, they make it difficult for search engines to crawl new pages efficiently. Regularly checking the sitemap is important to ensure that search engines can read it.
In our previous blog post, 'A Beginner's Guide to Sitemap Testing: Part 1', we gave a quick overview of different sitemap types like XML, mobile, video, and image sitemaps.
In part 2, lets dive and explore popular tools that can ensure that a sitemap is correctly formatted, error-free, and optimized for search engines. By the end of this post, you will be well equipped to test your sitemap like pro!
To ensure that the website's sitemap is functioning properly, consider the following test cases:
By creating and executing these test cases, it can ensure that the sitemap is accurate, up-to-date, and error-free, which will help search engines better understand and crawl the website.
Check the submitted sitemap in Google Search Console:


Check the "Submitted Sitemaps" section on this page for information about the sitemap.



.webp)
6 URLs in the sitemap are getting a “Duplicate, submitted URL not selected as a canonical” message. These pages should not be indexed, so it should be removed from the sitemap.
XML sitemap validator is a tool that checks if a sitemap follows the standard protocol and has all the required elements and attributes. It can also find errors, like invalid URLs or incorrect formatting, and suggest solutions.
The validator makes sure that search engines can crawl and index the website correctly and identify any issues that could affect the site's search engine rankings. There are several free XML sitemap validators available online, such as the W3C Markup Validation Service and XML Sitemap Validator.


Note: There are paid tools available that can handle all of a website's SEO functionality.
SEOptimer is a website that offers various SEO tools, including a sitemap checker. The Sitemap Checker tool can be used to validate and test the sitemap. It checks for errors, such as broken links, and provides a report on the status of each URL in the sitemap.
Some features of SEOptimer are:


It's important to note that having a sitemap does not guarantee that all the pages on the site will be indexed, but it does help to ensure that the search engine knows all the pages on the site.
SEOptimer Sitemap Checker is a useful tool for identifying any issues and is a valuable resource for improving the website's SEO.
Let's consider how to perform real-time sitemap testing using Screamingfrog, a popular SEO tool.
We will test a sitemap using Screaming Frog - European Bartender School.
Here are two screenshots of Screamingfrog's sitemap testing feature.


We will test another sitemap using Screamingfrog - Legal Aid DC. Below are some aspects that should be checked while testing using Screamingfrog.
Here are some screenshots for the Legal Aid site using Screamingfrog.


XML Sitemaps play a crucial role in ensuring that search engines can easily discover and understand the content on a website. When sitemaps are invalid, any new primary pages are crawled less efficiently, which can negatively impact a website's search engine rankings. It's therefore important to regularly check the sitemap to ensure that search engines can read it.
Sitemaps also serve as a canonical signal for Google's crawling and indexing system. This is particularly useful for larger websites with duplicate content, where stronger canonical signals like 301 redirects cannot be implemented. By including the canonical version of each page in the sitemap, search engines can better understand which version of the page is the preferred one.
In addition to their technical benefits, sitemaps improve the overall user experience (UX) of a website. By including all the pages on a website in the sitemap, visitors can more easily navigate the site and find the information they need. This can lead to increased engagement, longer session times, and ultimately, better conversions. Therefore, maintaining a well-structured and regularly updated sitemap not only benefits search engines but also contributes to a positive user journey on the website.

Testing is an essential part of building software applications. It helps to identify bugs, errors, and unexpected behavior before deploying the code into production. React is a popular JavaScript library for building user interfaces, and Jest is a testing framework that makes it easy to test React components.
In this blog, we will consider how we can test React components using Jest and some of its best practices.
To use Jest for testing React components, we need to install Jest with the below command:
For additional information related to Jest setup, refer Getting Started with Jest.
Before writing tests, let's look at the component we are testing.
In the below code, we have a Search Input and are fetching the blogs from an API call and showing them in the UI. The App.js file contains a label, Search Input field, and useFetch hook, which we will use to fetch the content of the blog posts. The code is below:
We will be testing 3 things with this React component.
Now let's look at how to write unit tests for the above App.js component.
First, we will test for the loading state. We are mocking the return value from the 'useFetch' Hooks in the below code. Then we are rendering the App and expect to see the 'Loading Posts' text which will look like below.
You can run the tests with the command ```npm test -- App.test.js``` and see the results if it passes.

To simulate user interaction, like clicking or typing, we will use fireEvent methods, and test the output.
Here, we are testing the component by entering the text ‘second’ in the search field and validating that only the post related to it shows up.

We are testing a scenario when the API fails to fetch the posts. It will throw some error messages.

Now the above-tested component is just one of the examples which we have shown in this blog. Let's consider multiple real-world scenarios that we can use, such as:
Let's say you have a login page for your application. You can use React Testing Library to simulate user input and test the login functionality. For example, you can use fireEvent.change to change the value of the email and password inputs and fireEvent.click to simulate the click of the login button. You can then use 'Expect' to verify that the correct action was taken, such as a redirect to the dashboard page or an error message if the login credentials were incorrect.
If you have a shopping cart feature on your website, you can use React Testing Library to test the functionality of adding and removing items from the cart. You can simulate user actions, such as clicking on the "Add to Cart" button or removing an item from the cart, and then checking that the cart has been updated correctly. For example, you can use getByText to find the cart total and check that it is updated correctly.
Another real-world scenario is testing form validation. You can use React Testing Library to simulate user input and verify that the form validation rules are working correctly. For example, you can simulate user input using fireEvent.change to change the value of a form input and then check that the correct error message is displayed if the input value is invalid. You can also verify that the form cannot be submitted when there are validation errors present.
If your application makes API requests, you can use React Testing Library to simulate user input and verify that the correct data is displayed in the UI based on the mocked API responses.
These are just a few examples of applying Jest and React Testing Library to real-world scenarios. The possibilities are endless, and you can use these tools to test almost any aspect of your application. Let's look at some of the best practices.
Snapshot testing is a useful tool for detecting unexpected changes in your UI. However, relying too heavily on snapshot testing can lead to brittle tests that break easily. Instead, focus on testing the behavior of your components and use snapshot testing sparingly.
Mocks and spies can help you isolate your components from their dependencies, making your tests more reliable. Jest provides a powerful mocking system to create mocks and spies for components.
Continuous integration (CI) means automatically building and testing your code whenever changes are made. CI can help catch errors early and ensure your tests always pass. In 2023, using a CI system is becoming increasingly common, and it's highly recommended to integrate it into your testing process.
Instead of testing specific functions or components, focus on testing the behavior and functionality of your app. It makes tests more reliable and less likely to break when you make changes.
Write small, focused tests that only test one thing at a time. It makes it easier to debug failures and maintain your tests over time.
Use these functions to set up and clean up test data. It can help prevent test data from interfering with other tests.
Use waitFor() to wait for asynchronous code to finish before continuing with your tests. It helps prevent false negatives and flaky tests.
Use the screen object from React Testing Library to access the DOM elements rendered by your components. It provides a more reliable way to test your components than testing implementation details.
Use fireEvent to simulate user actions, such as clicking or typing. It makes it easy to test the behavior of your components in response to user interactions.
As you make changes to your app, make sure to update your tests accordingly. It helps ensure that your tests remain accurate and reliable over time.
Testing React components using Jest and React Testing Library are essential to building high-quality software applications. We have discussed how to set up Jest and write some tests to check the rendering, user interactions, failed API requests, and behavior of a React component. These tools can help us write comprehensive tests for React components and ensure they work as expected.
.avif)
Stepping back into the Drupal world this year at the DrupalCon Pittsburgh in person was an incredible experience. More than 1500 came together to innovate, collaborate, and celebrate. It was wonderful to immerse ourselves in the vibrant Drupal community, and we are eager to share our firsthand account of the conference.
The unwavering spirit of the community is what sets Drupal apart. We witnessed the power of a thriving environment where passion, knowledge, and ideas fuel Drupal’s growth and reinforce its prowess as an open-source management platform.
We attended a few enlightening BOFs, presentations, and initiatives that left us inspired and confident about the future of Drupal. The Drupal Association has published all sessions on its YouTube channel so that no vital information is missed.
Here are some important highlights from DrupalCon Pittsburgh, and our take on them.
DriesNote highlighted innovation and progress with the motto - Innovate or be left behind! He emphasized the importance of prioritizing and supporting product innovation. He spoke about innovation S-curves, where initially it is a slow progress followed by rapid innovations and stagnation, and then a leap to the next curve.
He explained how Drupal has been jumping S-curves over the years by having a strong vision and purpose, a supportive environment, and the time for ideas to flourish.

He encouraged the Drupal community to embrace transformative changes and create an environment to support and nurture organic experiments. Calling it "Letting 1000 Flowers Bloom", he stressed the need to foster grassroots ideas and ongoing innovation.
Following this, Dries introduced the Drupal Pitch-Burgh innovation contest, which invited the community to pitch innovative ideas and funding requests. Out of the 7 finalists, 5 won the contest, and more than $100,000 (a combination of initial funding and spontaneous crowdfunding) was raised to fund remarkable proposals.
Joyce Peralta spoke about how McGill University revised its digital standards in 2019 by compiling its web policies and best practices in an organized and concise document that now serves as the governance framework for the university. She spoke on how building a community of practice for digital standards compliance can govern and guide web practices and cross-departmental collaborations in the higher education landscape.
Kevin Paxman's lightning talk on how the University of Waterloo moved 1000+ sites out of Drupal 7 to the current Drupal version was inspiring. He discussed the challenges of moving to the cloud and finding replacements for contrib modules that work differently or are not updated in modern Drupal. He explained how modern Drupal is more flexible and empowers users to create content without compromising visual standards or accessibility.
Kevin Quillen spoke on the hot topic of this year – OpenAI and ChatGPT! He explained how integrating OpenAI in Drupal can revolutionize content creation and user experiences. A demo played at the session showed how ChatGPT can help compose an idea for a page of content in CKEditor5 quickly with simple steps and prompts. The module is available and usable in Drupal 10. OpenAI and Drupal result in powerful tools that accelerate content creation and management.
Drupal 7 official end-of-life is scheduled on Jan 5, 2025. There will be no further extensions and no vendor support after EOL. The Drupal Association is also working to certify migration partners (partners and contributors) to help D7 users migrate.

Though a minor release, Drupal 10.1.0, scheduled to release on June 21, 2023, comes filled with new features and innovations.

The "Organize Locally, Contribute Globally" summit showcased various efforts to encourage contribution, such as creating an Events Platform for organizers to build websites and the Contribution Credit System to recognize the work of organizers, sponsors, speakers, and volunteers.
We look forward to nurturing the local Drupal community in our next Drupal Camp this year in Pune, India. Submissions for session proposals are open until 25 June 2023.

Project Browser is on the Beta 4 version, and the initiative is working towards getting an MVP. The team is working on UI for Drupal 11, which would be a significant change for user experiences. While Chris Wells and Leslie Glynn have implemented a basic UX for the PB initiative, our QED42 team members are working on a UX audit for the same.

DrupalCon Pittsburgh was an exciting event where the community came together to create something unique. The atmosphere was filled with innovation, synergy, and inspiration.
We are proud to be a part of Drupal’s success. Seeing how it has grown and its impact on the digital world is truly inspiring, and this event reminded us why Drupal is a driving force in the industry.

The community's energy reignited our sense of Drupal’s purpose - “Nobody can stop anyone from using Drupal (Non- Exclusive), and one person using Drupal won’t prevent someone else from using Drupal (Non-Rivalrous).”
We all shared a vision of embracing change, pushing boundaries, and shaping the digital landscape for the better. The conference left us feeling motivated and ready to take on any challenges.
The connections we made, the knowledge we gained, and the inspiration we received will guide us toward a brighter digital future. Together, we have the power to make a lasting impact, and we at QED42 are thrilled to continue on this wonderful journey.

Drupal, a powerful and adaptable Content Management System (CMS), enables users to create and maintain complicated websites effortlessly. It is an open-source platform with numerous modules and themes, empowering developers to build specialized and feature-rich websites.
The CKEditor, a well-known and frequently used WYSIWYG editor, is one of the fundamental parts of Drupal. By offering a user-friendly interface with formatting options, image insertion, link creation, and other rich text editing capabilities, Drupal CKEditor improves the experience of editing material.
Drupal users can make their websites more engaging and visually pleasing by generating and editing content with the CKEditor. As Drupal versions are upgraded, CKEditor is also updated. The latest version released with Drupal 10 is CKEditor 5. In this blog, we will discuss Behat test techniques for both CKEditor 4 and CKEditor 5.
In Drupal, the "CKEditor" module is responsible for integrating the CKEditor WYSIWYG (What You See Is What You Get) editor into Drupal's content creation interface. CKEditor allows users to create rich, formatted text content without requiring knowledge of HTML or CSS.
CKEditor 4 is built on a monolithic architecture, meaning that all of its features and functionality are contained in a single JavaScript file. It uses DOM manipulation techniques to perform editing actions and provides a rich set of plugins and features that can be used to extend its functionality.
On the other hand, CKEditor 5 has a flexible design that allows you to add or remove features as needed. It uses a system called virtual DOM to speed up editing and works well with modern web technologies like React and Angular. Its modern and user-friendly interface is more accessible than CKEditor 4, streamlining the editing experience.
Moving from CKEditor 4 to CKEditor 5 might require changes to the DOM structure. However, it's worth considering that CKEditor5 has a newer and more adaptable DOM structure, designed to be more versatile and provide a seamless editing experience for developers and end-users. This allows for greater control over the final product.
CKEditor 4 and CKEditor 5 have significant differences in their DOM structures, which can impact Behat automation. Here's an explanation with an example:
The DOM structure in CKEditor 4 is relatively simple, and each text area is represented as a single iframe element. To enter text into the editor using Behat, you can simply locate the iframe element and send keys to it.
This works great with CKEditor 4. But when we try the above custom context for CKEditor 5 we get the following error.

In CKEditor 5 it is not represented as a single iframe element. Instead the editor is composed of multiple div elements each with its own set of classes and attributes. To enter text into the editor using Behat you must locate the appropriate div element with ck-editor__editable class and use that to locate the specific editor instance and send keys to it.

To address the error mentioned above it is necessary to create a separate Behat custom context that is specifically designed for CKEditor 5.
The function uses JavaScript to interact with the CKEditor instance on the page. It constructs a CSS selector to locate the CKEditor field based on the machine name of the field (i.e. label parameter) then retrieves the CKEditor instance using
Finally it sets the data value of the CKEditor instance using editorInstance.setData(""$string"");
The code is available on Github.
CKEditor is a feature-rich WYSIWYG editor that offers an intuitive interface and powerful functionality for content creators from beginners to experienced professionals.
It helps users create beautiful and sophisticated content with ease without requiring proficiency in HTML or CSS. This versatile tool offers a range of customization options making it the perfect choice for anyone looking to create professional-grade content.
When working with Behat/Mink remember to have a separate custom context for CKEditor 5 as it requires different scripting than CKEditor 4. The custom context provided in this blog demonstrates how to achieve it with CKEditor 5 in Behat/Mink.

Google Tag Manager (GTM) is a free and open-source service that allows users to monitor, measure, and optimize the performance of their web pages. It was introduced on the Adwords platform in 2011 and has grown to become the most used tag management system over the internet. Google Tag Manager is a tool that allows you to install, manage and update code on your website. Each tag is called a “Google Tag”, which can profile visitors and track events as they happen.
Google tags are invisible HTML/JavaScript/CSS codes embedded in websites for tracking, reporting, and analytics without installing any dedicated client. A web address identifies the Google tags appearing on web pages optimized for Googlebot, the search engine's user agent. All the tracking attributes, such as page views, time spent on site, and user engagement, are available in website analytics reports.
A GTM Tag is a snippet of code. Code snippets come from external sources that integrate tools, support, platforms, and other support with the website. GTM has preset configurations for all platforms like Google AdWords, Google Analytics, etc.
Go to “Tag Manager”, click on “Workspace”, and click on “Near the top of the window”.
For example - “GTM-XXXXXX.”

It is a specific action that enables the tags to FIRE or collect the appropriate data and send it to the appropriate location. A trigger is nothing but an action performed on different Tags. Examples of common triggers include clicks, form fills, or page views.
It provides specific information about the action of a tag. GTM variables have two types:
Built-in variables: These variables are pre-configured by GTM. Some common variables in this category include Click Text, Form Classes, and Page URLs.
User-defined variables: The end-users have to manually set up these variables. A user-defined GA Settings variable sends data to a specific Google Analytics account.

Google Analytics is a platform and web analytics service that tracks and collects data from applications or websites and generates reports.
Interest
Interaction
Conversion
Universal mainly focuses on the total number of user traffic in most of the reports. To overcome this, we use GA4.
We can check and track all activity from the current page. We don't need GTM ID to track all data in the Data Layer Checker. For example, from the checkout page to the purchase page.
It depends on the requirements of data tracking. We can track all activity on any website; Clicking, Sorting, Scrolling, & Applying Filters. In Data Layer Checker, events are tracked automatically.
If you have a button on your site, that when clicked, should send an event to the Data Layer Checker with the category "About Us" and the action "Click". To test this, follow these steps:
You should see the event in the "Events" section with the category "About Us" and the action "Click".

To overcome this we use GTM/GA Debugger.
To check using GTM/GA Debugger we need a GTM ID and JS code to track all data. Using GTM/GA Debugger we can track all types of data like the current page, previous page, and all actions.
For example- “GTM-TDJNTQL.”
It depends on the debugging tracking requirements. We can track all activity on any website; Clicking, Sorting, Scrolling, & Applying Filters. Events are tracked automatically in Data Layer Checker, and we have to check all events in the GTM/GA Tab.
Add any product to the cart to see a list of results.
Checkout Page [Event generated for every action]
Let's say you have a button on your site that, when clicked, should send an event to GA with the category "Get Legal Help" and the action "Click". To test this, follow these steps:
You should see the event in the "Events" section with the category "Get Legal Help" and the action "Click".

Google Tag Manager is a powerful tool for managing website tags and tracking data without modifying the website code. With GTM, you can easily set up tracking for various marketing and analytics tools, create custom tags, and manage all your website tags in one place. It saves time and resources and helps understand your website visitors' behavior better to optimize your website accordingly.

HTTPS stands for Hypertext Transfer Protocol security. This protocol ensures the secure transfer of encrypted HTTP data over a protected connection. You can validate website authentication and maintain data integrity by using secure connections, such as Transport layer security or secure sockets layer.

HTTPS is a security protocol that encrypts data transferred via HTTP. Securing the transfer of data over the internet between computers and servers involves using an encryption algorithm to scramble the data, rendering it unreadable and inaccessible to anyone without proper authorization.
To protect your personal data, it's important to ensure that your online communication with a website is secure before sharing any information.

HTTPS is the recommended protocol for secure URLs, rather than HTTP. The “s” in “HTTPS” stands for secure, which indicates that the site is using a secure ‘secure socket layer (SSL)’ certificate.

The presence of the lock symbol and HTTPS in the URL indicates that the connection between your browser and the web server is secure and encrypted.

Note: To enhance the monitoring and optimization of your website, it's recommended that you add all potential versions, such as subdomains, to your Google search console. When adding properties to the search console, it is important to include “https://”if your website is served from an HTTPS protocol, as per Google’s recommendation.
HTTP is a protocol that follows a request/response model. When a client, such as a web browser, sends a request to a server, the server returns a response. HTTP redirects come in two types, permanent and temporary. A permanent redirect (HTTP status code 301) indicates that a resource has moved to a new location permanently.
This type of redirect is recommended for all redirections, except those that point to a different path. For example, if you're restructuring or migrating a website from HTTP to HTTPS, a permanent redirect is the appropriate choice.


To install Let's Encrypt on Ubuntu, run the following command in your terminal:

To enable Apache2 to pass through the firewall, use the commands below if you’re using Apache:

To obtain an SSL certificate, execute the command given below:

You can use this command to generate an SSL certificate for your preferred domain by following the prompts displayed.

Automatic SSL certificate renewal is handled by Certbot, and you can test it by executing the following command:

You have the option to perform a dry run of the auto-renewal process using the command below:

Using HTTPS is not a choice anymore. Having a trusted site is crucial for both users and search engines. HTTPS provides a secure way to transmit data between your website and web browser or server, protecting sensitive information like customer and payment data from potential hackers. By implementing HTTPS, you can ensure that your site is safe and trusted by your visitors and search engines.

Organizations are constantly determining ways to improve their business and development processes to produce better products. It means speeding up deployment strategies to withstand the ever-growing market competition. However, this requires faster technology to test these products quickly and release them to the end-users.
That is why automation testing has come to the forefront, transforming existing testing processes and speeding them up. The method reduces manual testing errors, helps detect bugs, and improves the testing efficiency of testing professionals.
As a result, it leads to better deployment rates, high-quality code, and product efficiency. Moreover, companies can save sufficient time, resources, and money generally spent on manual testing.
Nevertheless, successful test automation is only possible when companies follow a systematic approach. It includes choosing the correct testing framework and executing the right test cases.
Understanding and implementing core automation testing concepts is fundamental to developing such an approach, as it identifies clear objectives and establishes metrics for success.
Consider all the crucial steps to conduct test automation effectively.
A systematic automation tactic will enhance the effectiveness of all involved test processes. Further, all professionals will be on the same page using a solid plan. Here are the essential steps to operate a test automation procedure successfully.
Appropriate test automation planning and execution can enhance the ultimate software quality. So, companies and professionals must determine achievable targets. It is the first step in preparing the strategy that decides the course of other testing phases.
Besides, an automation feasibility analysis needs to be conducted here. It analyzes the test cases that can be automated according to certain factors like infrastructure, frameworks, and ROI.
The analysis also determines the scenarios that are not feasible for automation. The testers can gauge the time and effort needed to complete the testing.
After understanding the desired testing outcomes, the way ahead is to determine the testing approach. For this, testers need to figure out the appropriate framework for the project. Make sure the tools and framework can support the testing needs of your application and are compatible with your technology stack. Choose a framework that can be easily maintained and scaled over time.
An Automation Testing Pyramid is beneficial to simplify the selection process. The technique helps professionals understand the essential tests and their order of execution relevant to the scenario.
Further, the pyramid can indicate the frequency of the tests and the best approaches to execute them. Testers can use the structure to understand the tests to run as per the scenario or use case.
For example, they can identify the test execution order while testing an application that accepts user input and offers an output.
The next phase of the strategy will involve creating test scripts and test cases. Test scripts are programs written to test a specific functionality of an application. On the other hand, test cases are documents containing the expected outcomes, data values, and specified conditions for automation testing.
Develop automation test scripts that are clear, concise, and cover all the necessary test scenarios.
Write test scripts that are reusable, maintainable, and independent of each other. Create data-driven tests to test multiple scenarios with minimal code changes. Ensure the test scripts cover both positive and negative scenarios.
Run the scripts to test the application and analyze the results. Make sure the test environment is set up correctly, and the scripts are running without any errors.
Integrate the automation into the continuous integration (CI) pipeline to enable continuous testing. Analyze the test results and identify any defects or issues. Debug the scripts and update them as needed.
Regularly maintain the automation suite to ensure it is up-to-date with the latest application changes. Continuously improve the test automation effort by gathering feedback from the team and stakeholders and making necessary changes to the automation suite.
Automation maintenance activity includes:
The automation testing market size might grow at 14.2% CAGR from 2021-26. So, it is clear that many organizations will opt for this testing technology in the future to improve their services. Following an automation testing strategy will be vital in implementing the processes effectively.
Conducting meetings and organizational discussions will be necessary before implementing the testing strategy. All steps and intricate details should be discussed among the involved professionals. Transparent communication might help executives understand and implement the techniques.
Moreover, senior professionals can also obtain feedback from testers to identify areas of improvement. Continuous monitoring and optimization of strategies can help acquire better ROI from automated testing.

Validations are used to check the accuracy, integrity, and structure of data before it is used for a company's services. If any user sends unacceptable data to any application, then the application will send validation messages either from the client side or the server side.
The frontend is nothing but what a user sees on the website/ application. Front-end testing validates that GUI elements are functioning as expected / as per the requirement.
Consider an example of a form where it checks whether input fields accept the right characters, or whether forms are being submitted only after the required fields are filled, or whether navigation is easy enough, or whether the page is loading fast enough.
Consider a form where the user has to add a file of only .gif, .png, .jpg, .jpeg formats. If the user adds any image/document other than this format, the form must throw an error message.

In this case, the client will send a validation error message. As this is a small validation, it will happen on the client side.

Consider another example of adding a file size of more than the given limit. It will show an error message that the file size should not be more than the given limit. This validation is also handled by the client side.

To see how the front-end validation of Facebook signup works, we need to inspect the element and switch to the network tab.

The backend is named because it does not run on the device (mobile/laptop) but on a remote server.
Back-end testing validates the database side of web applications or software. Consider an example of a form where it checks if an email ID input field is not accepting duplicate entries.
Suppose a user has already entered an email ID while submitting a form. When the same email ID is entered while submitting a new form, the user must get an error that the user with this email ID already exists.
Suppose we are on a payment gateway and we are asked to enter details of a credit/debit card. Now, when the user enters data in it and clicks on the ‘Submit’ button, we see a loading button, and after that the ‘Credit card is not valid' message. This means the system has checked from the backend if the credit card details are correct using APIs.

Consider another example of a user details form, where the user enters the email address of an already registered user and clicks on the Continue button. An error message is displayed on the server side. The application checks if an email address is already present in the database, and if present, the user gets an error message that the email ID is already registered.

Let us explore another example of how we can create an account on apps like Spotify or LinkedIn by logging in with Google or Facebook.
If we open any website app and click on the Login button, we get an option to log in with Google/Facebook/Email for registering or creating a new account.

If we want to create a new account, we will click on the login button. Here we will get options to log in with Google/Facebook/Email button.
If you use Google Sign-In with an app or site that communicates with a backend server, you need to understand the below steps happening in the backend:
An easy way to validate an ID token is to use the tokeninfo endpoint. This endpoint sends an additional network request that does most of the validation for you while you test proper validation. To validate an ID token using the tokeninfo endpoint, make an HTTPS POST or GET request to the endpoint, and pass your ID token in the id_token parameter.
For example, to validate the token "XYZ423", make the following GET request: https://oauth2.googleapis.com/tokeninfo?id_stoken=XYZ423.
If the token is properly signed, you will get an HTTP 200 response.
Suppose we create a role ‘Contributor’ in a CMS like Drupal and disable the permission to view the toolbar search option. We can validate it by following the steps below.
Let us consider online shopping websites like Myntra.
Things the user is seeing on the screen and interacting with like product lists, Added items in the cart, checkout screen, etc are part of the frontend. But, these things are not present on the user's machine(mobile/ laptop /desktop).
However, they are stored and managed on Myntra’s server side so that all the users will be able to see the same data on the applications/websites. Also, this data can be managed from the server side by adding/ deleting/ updating the details.
Also, whatever happens on the screen is controlled by the front-end code. Whatever the user sees, the frontend is responsible for showing and updating it.
Because of both validations, we can have a good performant application with fewer errors. The validation also reduces the complaints and rejections against the requirements of the product.
To improve the quality of a website or application we need to validate both front-end and back-end methods of validation. Both validations are critical in terms of security.
I hope this has been helpful!! Happy learning!

API stands for Application Programming Interface. It acts as an intermediary to communicate between two applications or electronic devices over the world wide web (www). API provides interoperability between different kinds of hardware and software platforms. API supports different HTTP methods like GET, POST, PUT, and DELETE in the browser.
There are several API testing tools available, such as POSTMAN, SOAP UI, JMeter, REST-Assured, Katalon Studio, etc, and QAs prefer to use the Postman tool over others.
Suppose we want to test Google Map API. For this test, we need the below scenarios.
Now consider best practices to test the above scenarios.
As per the API specification document, QAs should first understand and analyze end-to-end the flow of the application and decide on the testing scope. Then, define the sequence of requests to be executed.
Consider the scenario where we need to add, view, edit, and delete operations on a Google map location. Then, as per requirement, we need to execute HTTP request methods in the below sequence:

If we want to execute a created request on different test environments like QA, Dev, Stage, and Prod, we need to create those required environments in Postman. It will help to execute the above-created API requests in the required environment without changing test requests. It will reduce the testing efforts and number of requests.

Suppose we want to create a Test suite like Smoke, Sanity, and System test requests, then we can create folders under the collection as per suite and Organise the API requests by placing them in their respective folder. It helps to maintain the requests as shown below.

In the above example, when we send POST requests to create a Google map location, then in the API response, we get “place_id”. The same value we use in other HTTP requests like GET/PUT/DELETE requests to perform CRUD operations.
In that case, we should define the test data in global and local variables based on where they will be used. We can use these variables in the script, making it readable and understandable. Moreover, only when something changes we need to update it in one place to reflect in all tests.


For the above scenarios, we need to add requests, and under the Test tab, we need to write tests and validate the response (status code, response time). Run the tests and get the request pass/fail status.

We should identify and list the reusable functions to reduce code repeatability and increase maintainability.

We can add pre-request and post-request scripts to be executed before and after each request for the above scenarios. It will help in better readability of the execution report and avoid duplication of requests.

These scripts will apply to all requests which are present under the collection.

These scripts will apply to all requests which are present under the folder.

This script will apply only to individual requests.
In the above example, we need to define the test execution sequence like Create Google map location (POST), Update Google map location (UPDATE), retrieve Google map location (GET), and delete Google Map location (DELETE). API sequencing will help to execute the API requests in the expected order. Users can test the end-to-end flow of the application in a single click using this feature.

In the above example, suppose we want to perform data-driven testing for Create Google Map location API, then we can store test data in CSV or JSON files. And execute N-Number of time requests repeatedly. It's important to identify test data so that it covers positive and negative use cases, and stores them in their respective files.
Multiple QA resources can work on the same collection by sharing a workspace, which helps in versioning control. In Postman, we can use the Share option available to allow other team members to collaborate.


With the help of the Newman tool, we can execute exported collections on remote or local machines using a command-line interface. The command is the ‘newman run <collection name>’ command.
With CI tools like Jenkins, we can schedule, trigger, and execute the Postman collection every day, and check application health.
Postman is the must-have tool for effective API testing for any project. By following the above steps, you can easily set up and implement API testing in your project. Additionally, combining manual with automated testing using the CI tool makes API testing more reliable and efficient.

To automate features of an application, we create automation test scripts. An automated script is code that runs automatically based on a defined state, input, and expected output. While writing the test scripts, we need to identify the web elements on the UI.
For example, say you have added XPath or CSS property in the test script to identify the web elements. When you execute the script, it either results in multiple matches or fails to identify the correct input element. Then you may try with a different CSS property or XPath expression, but that may fail too. Re-execution of the test scripts and debugging the issue consumes a lot of time. We can save this time by validating the CSS selector or XPath expression before adding it to the code, making test scripts more reliable.
Browser developer tools allow you to inspect, test and debug codes. In this blog, we will use Chrome DevTools to create quick and reliable test scripts for automation!
Open Element Panel
Press F12 to open up Chrome DevTool > Elements panel should open by default.
You can also right-click an element on the page and select Inspect to jump into the Elements panel. Or press Command+Option+C (Mac) or Control+Shift+C (Windows, Linux, ChromeOS)
Enable Search in the Element Panel
Press Ctrl+F to enable DOM search in the element panel.
Type XPATH or CSS to evaluate
Enter XPath expression or CSS selectors in the search box to identify web elements in the DOM. The provided expression or property will be evaluated, and matched elements, if any, will be highlighted in the DOM.
When multiple elements match, we can use customized XPath or CSS. Customized Xpath helps to create effective XPaths of the web elements and constructs a unique locator for the web elements. CSS Selector is one of the important locators in automation. We can create customized CSS using HTML attributes like ID, class name, and tag name combination.
Open Console Panel
Press F12 to open up Chrome DevTool > Switch to the Console panel.
You can also press Command+Option+J (Mac) or Control+Shift+J (Windows, Linux, ChromeOS) to jump straight into the Console panel.
Type XPATH or CSS to evaluate
Type in XPath expressions like $x(".//header") or CSS selectors like $$("header") to evaluate and validate. Once tokens are executed, check the results returned:



Important tip: From the console panel, use either the $('selector') or $$('selector') console commands to select element(s) from the DOM. $ uses the querySelector DOM method, which returns a single matching DOM element. $$ uses querySelectorAll, which returns an array of all matching elements.
Xpath and CSS selector are the generic locators. To write automation test scripts, we can construct Xpath and CSS locators with any HTML element on the page. To create manual customized Xpath and CSS selectors, analyze the HTML properties and their values first.
Consider you need to identify the “From city” field on makemytrip.com using XPATH
We can use id -
Now, type the customized XPath in the console and validate whether it finds the correct element. The console will show the matching elements, and when we hover the cursor on the element, it will highlight the web element on the screen.
As you can see in the screenshot below, for the element “From city” > “Mumbai” city is getting highlighted correctly.

When we have multiple matches, we can handle it using an index in the XPath. Consider an example of selecting a “Property Type” field.
When we use the above XPath expression, it will start highlighting multiple elements because of common attributes of the class.


To identify the web element uniquely, we can call that element by using the index. For this test, we will write XPATH to uniquely locate the second element to perform tests and verify results.
Here [2] represents an index.
In the below screenshot, we can see that with the help of the index, we can locate the second element. The console window highlights this element on the screen.

In CSS, to handle indexing, we use “nth-child” to highlight or encounter the desired web element.
In the below screenshot, we use an index in the CSS selector to highlight the desired web element.

Note: In some cases, the index number may change for the Xpath and CSS because of some hidden attributes in the HTML code. In such cases, XPath will ignore that hidden attribute, while CSS will not.
In this article, we saw how developer tools help to speed up automation script writing. Customized XPath and CSS selector help identify and locate web elements uniquely on the webpage, improving the efficiency of automation tests. A QA automation engineer should follow these steps in their scripting writing process.
Happy Automation !!