# QATTS Product Documentation

Here You will find resources that will help you learn how to automate tests using QATTS test automation tool.

Welcome to QATTS Product Documentation. Here you will get the resources that guides you to test automation using QATTS.

## :question: Who can use QATTS?

QATTS is designed for teams who prefers to perform Test Automation in the fastest way possible, with low testing knowledge. We provide minimal setup and installation so you can start testing as soon as possible.

## :fleur-de-lis: How flexible is QATTS?

QATTS is an easy to use Automation Testing Tool. Whether you go for code or code-less testing, it ensure optimal quality and outstanding results.

## :computer: Where can I Use QATTS?

QATTS can be used for API testing, Web Automation, Mobile testing. You can use QATTS to record your results, also take screenshots.


# About QATTS

Learn more about QATTS test automation services

Welcome to QATTS Docs. Here you can get to know the application in detail. Before we dive into testing let me tell you about QATTS and what features it provides.

QATTS is Intuitive, feature-rich, Simple, Smart and Scalable testing platform on cloud delivering beyond automation fulfilling your current and future testing needs enabling you to adopt and manage testing with ease!

QATTS is a revolutionary, patent pending offering, custom-created to address diverse test automation challenges across Web, Mobile, Desktop and API.

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-McKd58yaFNzHeMKxQoN%2F-McKhVQDKqpt7KrcyDXC%2FScreenshot%202021-06-16%20at%2010.14.22%20PM.png?alt=media\&token=8246ad53-ba14-4c55-95ac-6c8c864cba9a)


# A Quick Tour of QATTS

Take a quick tour of QATTS - the best automation testing tool

An automation project has 2 phase.

Phase 1: Building **Automation components** and test cases

Phase 2: Using automation to speed up QA cycle and maintenance of existing scripts&#x20;

For phase 1,  an automation engineer with&#x20;

* Good understanding of automation concepts.
* All [Objects](/automation/objects) and their respective properties&#x20;
* Basic experience using [locators](https://www.tutorialspoint.com/selenium/selenium_locators.htm) and automation action patterns&#x20;
* Bit of java syntax.&#x20;
* Access to Qatts Studio
* Action Methods ([Standard](/standard-actions-methods), [UI](/ui-action-methods) & [File](/file-action-methods) )
* Concepts of Data Driven Automation&#x20;
* Classification of Test Case into Functional, UI Checks or Scenario

For Phase 2, a typical QA engineer with good understanding of target application and high level understanding  of Qatts Terminology.


# Terminology

<figure><img src="https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MVX-yOtIHRnx7UtstUT-320325635%2Fuploads%2FHhPlR6s3juLCBuXtCPFH%2Fimage.png?alt=media&amp;token=d953c063-76bb-457f-b164-9c43b7ed268a" alt=""><figcaption></figcaption></figure>


# Relationship

<figure><img src="https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MVX-yOtIHRnx7UtstUT-320325635%2Fuploads%2F7iBjftuhnnGvqxRPL5CO%2FQatts%20Object%20Relation.jpg?alt=media&amp;token=55e92dac-1c05-47ae-9a71-4479baf11e53" alt=""><figcaption></figcaption></figure>


# Dashboard

Dashboard makes it easy for a user to understand the current status of the testcases

The Dashboard in QATTS makes it easy for an user to understand the current status of the testcases. The filters on the dashboard further allow the viewer to narrow the dashboard's results to only the data the viewer is interested in.

QATTS dashboard has two main filters on the top left corner viz Product & Code Branch

**Product**: Clicking on the [Product](https://docs.qatts.com/administration/product) will enable user to switch from one product to other. To make the selected product as default selection click on the radio button of the desired product. This default product will become the users favorite Product on his/her subsequent logins.

**Code Branch**: You can select or deselect a [Code Branch](https://docs.qatts.com/administration/code-branch)  from the available options. The Code Branch varies depending on the selection of the Product. The data results on the dashboard will be shown for the selected Code Branch.&#x20;

Similar to Product, the user can make a particular Code Branch as his default Code Branch by selecting the radio button.

**Deployment**:  Select the [Deployment](https://docs.qatts.com/administration/deployment) as per your target application Environment. The dashboard's data for the selection varies depending on the Code Branch, the Product and the Deployment the user has selected.

**Client:** Select a [Client](https://docs.qatts.com/administration/clients) on which you would be performing the testing. The visible selections of clients are based upon the product user has selected. Again, the dashboard results will further narrowed down with the selected Client.

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-MkCoI7c0IilhcDFU80g%2F-MkGJy9Ml9i6MAme1P6z%2FDashboard.gif?alt=media\&token=6bb6782e-ee03-4618-8693-c6c63211b174)

The QATTS dashboard has three cards/layouts to give users a clear view of the information that matters most. The most critical content is simplified with visual elements using charts.

**All Test Cases Status:** The status of the test cases is represented in a Doughnut chart: how many test cases are passed, how many failed and yet to run.

{% hint style="success" %}
The **Analyze link** at bottom redirects the view to the Test Result by clients, where QATTS gives you a detailed view of all the test cases.
{% endhint %}

**Functionality Test Cases Status:** Here test cases are segregated according to the functionality names. It shows how many test cases to be run, failed or yet to run.

**Latest 5 Test Runs:** It displays the recent five test cases executed in the application for the selected Product and Code Branch


# Administration


# Product

Our product is that which we are going to perform automated software testing on

## What is a Product?

In simple terms, it is the application on which you are going to perform testing here on. If you are organization has multiple Products, you can add as many products as you need. You can [Add Product ](/administration/product/how-to-add-product)in Product Management section. Here you can select the application type you want to depending upon the target application.

## Example for Product.

Suppose you are working on a application known as Netflix, you can add a product name as Netflix. And if the requirement is API Testing, you select API in the **Application Type** mentioned in the product information view.

​‌

![](https://gblobscdn.gitbook.com/assets%2F-MgdWk21zETVSCGfZEts%2F-MgeHXcknu68ZWTLJ0zW%2F-MgeN0kDlyHKA6CkF2Nt%2Fimage.png?alt=media\&token=62498750-71c6-4dd6-a14d-10c5d7316c65)


# How to Add Product

Step by step walkthrough of how to add a product

## **Step by step walkthrough**

**Login** in to QATTS and follow below steps to add a **New Product**

**STEP 1:**  On the Left Navigation Panel click on **Administration** ----> **Product Management** ----> **Product.**

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-Mgtwkp7Im8mWdQ7TSJ6%2F-MguBtcisBGEqzcQOQ9T%2FAdd%20product2.png?alt=media\&token=874e40a2-bd95-4a7a-b7b1-e7330406a0d9)

**STEP 2** : Click on the **Add Product** on the Left corner of the screen.

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-Mgtwkp7Im8mWdQ7TSJ6%2F-MguC9qzj_fvy2Rbs0-w%2FAdd%20product3.png?alt=media\&token=36838966-23fd-4700-9385-17c94ae67fce)

**STEP 3**: A product information panel opens up and you need to fill up the required details.

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-Mgtwkp7Im8mWdQ7TSJ6%2F-MguCNvNeeWdGAoRJjv2%2FAdd%20product4.png?alt=media\&token=5468ced3-b68a-4412-9305-3fc79edcf29e)

Fill the following details

* **Product Name**: It is the name of the Product, usually the target application name
* **Product Description**: Information about the Product
* **Application Type :** Tells the target application type. Web, Mobile, Desktop etc.
* **Test Data Location Type:** It is the type of the test data repository. Currently QATTS supports `SharePoint & Dropbox`
* **IsDefault**: By selecting, it makes the product default selection.

**STEP 4**: Finally after adding the details Click on **Save** and product details will be saved. Also while adding a product there need a test data repository configuration, you can go through how to configure in the next section.

You can select the product from the Dashboard as shown below. The newly added Product can be accessed from here.

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-Mgtwkp7Im8mWdQ7TSJ6%2F-MguD9o3S6D8xQcSDBbf%2Fproduct1.png?alt=media\&token=188693f3-1cce-4793-ba34-684ead7f4474)

Below image would walk you through How to add a Product.

## Short video

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-MkGKp0WLa9VpLMjXOMh%2F-MkGLwWKht-LkGkmK7jS%2FAdding%20Product.gif?alt=media\&token=84fbe07a-9702-4d78-b814-62929680eb4b)


# Configure Test Data Repository

Test data is a set of data that are used in the software testing

Test data is a set of data that are used in the software testing. Test data comprises all sorts of data input required to test system’s functionalities. The location where test data resides is known as Test Data Repository.

QATTS currently allows two types of repositories

1. **SharePoint**
2. **Drop Box**

## SharePoint

To configure your data to the SharePoint you can follow the below illustration.

![SharePoint configuration](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-MkG_KvtgP6abgMshb6B%2F-MkGeoSviok4r0OgtVR3%2Fproperty%20value.PNG?alt=media\&token=ea32a04c-e0eb-4efb-aa7a-f817d5d83d18)

You need to enter all the SharePoint properties in product properties as displayed below.

```
storageType: SharePoint
class: com.ibaseit.filestore.service.SharepointStorageService
site: Testify
host: Enter the location of your host
clientId: Enter your client id here
clientSecret: Enter your clientsecret id.
userName: Enter the Username
password: Enter the password for the above username
tokenEndPoint: Enter your sharePoint tokenend point location.
resource: Enter your SharePoint location.
```

After fill up all the properties click on the **Update** button all the details would be saved.

## Drop Box

To configure your data to the Drobox follow the below format.

```
props.dropbox.accessToken: Enter your Dropbox token here
```


# Code Branch

Code Branch -  That which maintains the version of your Product on which you are going to automate

## What is a Code Branch?

**Code branch** is maintaining the version of an Product on which you are going to automate. Preferably it is recommended to use Product release version.

## Example for Code Branch

As a company can launch or update present product, every time a new version is released the new version is tested individually. You can see below each version of the product is tested individually and then proceed to next stage. In code Branch you can add many versions of a single product.

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-MhHTI5mdiKfaoDld56U%2F-MhHUEZIHvc8OPuRSmWq%2FQATTS%20\(4\).png?alt=media\&token=c1f1d06e-bd57-4000-b366-80a2989efd42)

​‌


# How to Add Code Branch

Step by step walkthrough of how to add code branch

## **Step by step walkthrough**

**STEP 1:** On the Left Navigation Menu, Click on the **Administration.** You should able to see the **Product Management** in a new  page, click on that **Product Management** and Select **Code Branch.**

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-MguEGsuOI87YNn_2suz%2F-MguGn94WsdPR1tYGdiv%2FCode%20Branch.png?alt=media\&token=b9c40e8a-6939-4510-a349-574022f5309d)

**STEP 2:** When you click on the “**Code Branch**”, the page should appear as also shown in the screenshot below. Then select the **Product** and then Click on “**Add Code Branch**”.

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-MguEGsuOI87YNn_2suz%2F-MguHOmm7TL2AOCInVpn%2FAdd%20Code%20Branch.png?alt=media\&token=6c10ae74-fa91-4fa3-856c-833a73ed1dab)

**STEP 3**: When you click on the “**Add Code Branch**”, the page should appear as shown in the screenshot below.

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-MguEGsuOI87YNn_2suz%2F-MguHeuYXGaVvyJRIHMN%2FCodeBranch1.JPG?alt=media\&token=d4c60c4b-8260-41bd-ad95-7f441395395b)

**STEP 4**: You need to fill the below fields.

* **Product Name**: By selecting the Product name, the newly added code branch will be shown only under the selected product.
* **Code Branch Name:** Name Could any of the user choice
* **Code Branch Description:** Describe the purpose of the Code Branch.
* **Is Default:** By checking it makes it the default Code Branch.
* **IsActive:** By checking it makes the Code Branch visible in the Dash Board view.

After you filled up the details click on **Save** button and **Code Branch** would be successfully Created.

## Short video

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-MkGMzrTh-Soixa3t8me%2F-MkGO7Z9avOvs6KdenA9%2FCode%20Branch.gif?alt=media\&token=9b430ff4-f1f2-4f4d-8067-e188e3399ddb)


# Feature

Learn everything there is to the features page

## What is a Feature?

A **Feature** can be a folder for a particular project or a module with group of functionalities under it. Here user can keep all functionalities of a particular project or module together.

You can add Feature from **Settings** from the Left Navigation panel or you can add a Feature in the QATTS Studio.​

## Add a Feature

### Step by step walk through

​To add a Feature follow the below steps

**STEP 1:** On the Left Navigation Panel click on the **Studio** and it will then redirect to new page‌.&#x20;

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-MgtChURgYtllAbNi-KZ%2F-MgtFaJtSkHv-XpHDsvH%2FStudio.png?alt=media\&token=6a0868dd-3dcd-475b-8f29-fafb163d56ac)

**STEP 2:** Here you can click on **"+"** and Click on **New Feature**

![](https://gblobscdn.gitbook.com/assets%2F-MgdWk21zETVSCGfZEts%2F-MgjuTLKe2GvtLoxPsiF%2F-Mgk-7H72KSpjDbmopd8%2FFeature.JPG?alt=media\&token=0642379a-0a90-4da8-b17a-23269cb66663)

![](https://gblobscdn.gitbook.com/assets%2F-MgdWk21zETVSCGfZEts%2F-MgjuTLKe2GvtLoxPsiF%2F-MgjzyP0fiGwQLX9IrYG%2FFeature1.JPG?alt=media\&token=cdb21da3-8d24-4222-bf74-1ab3a5aac41c)

Note: You can Also add New Feature from the Settings --> Features and can follow below steps.

**STEP 3:** A new Page will be opened as shown below. Continue by adding Feature Name and Description as per your requirements, and click **Next**.

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-MgtFksIQGHv2yHFprg1%2F-MgtGKZzoQrtLLRXzWlO%2FFeature%20name.JPG?alt=media\&token=820baff1-9bee-42a1-8ca9-6facfbb9f4f5)

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-MiUyFdB0rKh-aplEBpv%2F-MiV5i0iE1K74K3SrifK%2FFeature2.JPG?alt=media\&token=41afe5cb-4127-4068-a625-86c5c0367b3c)

{% hint style="info" %}
**Note:** Here Property Name and Value are Optional.
{% endhint %}

Finally After adding the required details click on the **Save** button and the feature would be added, the newly added feature can be accessed from the left navigation Panel.

### Short video

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-Ml99AA38AoBaM3MjRR9%2F-Ml9kFFA0gTpEvqGvmSM%2FAdding%20Feature.gif?alt=media\&token=41b56f20-bc4d-4b73-9644-b33823fd3411)

​

​


# Client

Different clients are created based on different datasets

## What is a Client?

Different clients are created based on different datasets(date format, language etc.), where the core functionality of the website remains the same but some minor changes occur based on the region or date/time format or the product might have customized for a particular customer.

## Example for Client

Netflix has a huge library and is a global website, but its website differs from region to region it could be in different language and with different library. Here we can create multiple clients based on the region.​

![](https://gblobscdn.gitbook.com/assets%2F-MgdWk21zETVSCGfZEts%2F-MgeY073h3QAGT7rR4Yo%2F-MgebUAtQ0dPzDO-puXh%2Fclients%20\(1\).png?alt=media\&token=97917d71-1a01-4b11-ae23-998944ba75bc)

​


# How to Add Client

Step by step walkthrough on how to add a client

## **Step by step walkthrough**

**Login** in to QATTS and follow below steps to add a **New Product**

**STEP 1:** On the Left Navigation Panel click on **Administration** ----> **Product Management** ----> **clients.**

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-MgxvzKy0kcJCFV6y1fn%2F-MgxyPTCKLcIDtx9QgAC%2FClient.png?alt=media\&token=22c55841-ac44-4452-ba28-a5e04ae921bb)

**STEP 2:** When you click on the “**Client**”, the page should appear as also shown in the screenshot below. Then select the **Product** and then Click on “**Add Client**”.

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-MgxvzKy0kcJCFV6y1fn%2F-Mgxz6k1kzjWh-qL--b1%2FClient1.png?alt=media\&token=46cb9be0-44b0-4c56-a4ed-1deafadc71ab)

**STEP 3**: When you click on the “**Add Client**”, the page should appear as shown in the screenshot below.

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-MgxvzKy0kcJCFV6y1fn%2F-MgxzNewsPOvgycmpJzR%2FClient2.JPG?alt=media\&token=47a056d1-da13-4f00-a558-13776e5ad939)

**STEP 4**: You need to fill the below fields.

* Product Name: By selecting the product, the newly added client will be visible only under the selected product.
* Add Client Name: The client name could any of the user choice
* Property Name: The property name cou
* Property value
* Is Default

After filling up the details click on **Save** button and **Client** would be successfully Added.

## Short video

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-MkGPEZilV57p52k3WrZ%2F-MkGQ7bhhiBf1viu5-1G%2FAdding%20Client.gif?alt=media\&token=91c63362-c2dc-4b65-81ab-f69affb6fd3a)


# Deployment

Deployment holds all the target environment details of your product

## What is Deployment?

**Deployment** holds all the target environment details, like Sprint, Staging or Prod environment. The test execution can be performed on one of the deployments.

## Example for Deployment

To know how Deployment works. To clearly understand lets get into a example.‌

An Organization having a QA Team and Developer Team, both the teams will be running their work on same Websites. A changes made by developer team on a website will not be affecting the work done by the testing team website. There will two separate versions of website will be maintained.​

![](https://gblobscdn.gitbook.com/assets%2F-MgdWk21zETVSCGfZEts%2F-Mgl-_81dDSSg5ka4-8W%2F-Mgl0LwVU45veaekM1--%2FDeployemnt.png?alt=media\&token=4edecba5-7a14-4044-810c-e6f71650ab68)

​

​


# How to Add Deployment

Step by step walkthrough of how to add deployment

## **Step by step walkthrough**

**Login** in to QATTS and follow below steps to add a **Deployment**

**STEP 1:** On the Left Navigation Panel click on **Administration** ----> **Product Management** ----> **Deployment.**

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-MguX6X2h9VxnwzcFdeL%2F-MguYU9xo4BZfU_qQHoH%2FDeployment.png?alt=media\&token=f1169627-4598-4ed5-945d-fe5635cbd845)

**STEP 2:** When you click on the “**Deployment**”, the page should appear as also shown in the screenshot below. Then select the **Product** and then Click on “**New Deployment**”.

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-MguX6X2h9VxnwzcFdeL%2F-MguYcY6BmZxNWSkKax1%2FDeployment2.png?alt=media\&token=ee796c3f-88d1-4ee8-95b1-ce290e579176)

**STEP 3**: When you click on the “**Add Deployment**”, the page should appear as shown in the screenshot below.

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-MguX6X2h9VxnwzcFdeL%2F-MguYnp6kU0tTpZRAi-u%2FDeployment3.JPG?alt=media\&token=1e686bb9-52c6-47d0-a418-ed35f775d6dd)

**STEP 4**: You need to fill the below fields.

* Select the Product Name
* Deployment Name
* Deployment Description

**STEP 5:** After you filled up the details click on **Next** button and property Name and Value need to be filled.&#x20;

After filling the value click on Save the Deployment would be saved.

## Short video

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-MkGRAlYO5q0gKbH0M_R%2F-MkGRDKYJTHZbCA-6CHo%2FAdding%20Deployment.gif?alt=media\&token=e3d1fc8f-93d9-4278-8d7f-b7ffc3db5022)


# Database Config

<table><thead><tr><th width="249.33333333333331">Prop Name</th><th>Prop Value</th><th>Rules / Info</th></tr></thead><tbody><tr><td>email.[alias name].dbType</td><td>Database Type</td><td>Supported Database Types: mysql,mssql,oracle,postgresql,db2,bigquery</td></tr><tr><td>mail.[alias name].host</td><td>IP address or URL of the database server</td><td></td></tr><tr><td>mail.[alias name].port</td><td>Port used for the database connection</td><td></td></tr><tr><td>mail.[alias name].userName</td><td>Username for database access</td><td></td></tr><tr><td>mail.[alias name].password</td><td>Password for the database access</td><td></td></tr><tr><td>mail.[alias name].schemaName</td><td>Database name</td><td></td></tr></tbody></table>


# Email Config

Any email account that need to be used must be configured at deployment. Each mail box configuration as grouped as alias. So all the properties must have alias name in the prop name. With the help of

<table><thead><tr><th width="249.33333333333331">Prop Name</th><th>Prop Value</th><th>Rules / Info</th></tr></thead><tbody><tr><td>email.[alias name].username</td><td>User name for the Email Account</td><td></td></tr><tr><td>email.[alias name].password</td><td>Password for the email account</td><td></td></tr><tr><td>email.[alias name].host</td><td>Host URL</td><td></td></tr><tr><td>email.[alias name].port</td><td>Port Number</td><td></td></tr><tr><td>email.[alias name].protocol</td><td>Email retrieving protocol</td><td>imaps,pop3s,smtp</td></tr><tr><td>email.[alias name].mailbox</td><td>Mailbox name.</td><td>Optional. Default will be inbox</td></tr><tr><td>email.[alias name].folder</td><td>Folder name.</td><td>Used for reading emails only. Default value is inbox</td></tr><tr><td>email.[alias name].msgformat</td><td>Message Body Format</td><td>Options: text or html</td></tr></tbody></table>


# Node

A Node is a runtime environment for test execution.

## What is a Node?

A Node is a runtime environment for test execution.

## **Steps for Node creation:**&#x200C;

**STEP 1**: **Login** --> **Administration** --> **Node** --> **Create Node**‌

**STEP 2**: Give proper details of the Node and save it.‌

**STEP 3:** After saving it you will a find Download License File as shown in the below image.

​​‌

![](https://gblobscdn.gitbook.com/assets%2F-MgdWk21zETVSCGfZEts%2F-Mgk4S_NciL9eJBQ7XlA%2F-Mgk6aPjjG7bV3-rTkjJ%2FNodes.png?alt=media\&token=75d6add2-00d1-4e49-8795-0d58035a1262)

**STEP 4**: paste the license file into the QATTS system files folder.​‌

![](https://gblobscdn.gitbook.com/assets%2F-MgdWk21zETVSCGfZEts%2F-MgkVC0jOh2j7jLnSO8j%2F-MgkWExTL8s-RDal1G4F%2FMicrosoftTeams-image%20\(26\).png?alt=media\&token=cabd1215-ae6f-436e-9f68-3ab66fbf5058)

**Note**: The above steps are done only when we create a new node.‌

**STEP 5:** start the Agent service and wait until u get this screen with last line as **Subscribed to / user /queue / agent** as shown in the below image.​‌

![](https://gblobscdn.gitbook.com/assets%2F-MgdWk21zETVSCGfZEts%2F-MgkRS4zEoXnSS4_Ny-9%2F-MgkSv99LWYojEBtxws_%2FMicrosoftTeams-image%20\(27\).png?alt=media\&token=9c664967-aa14-45c2-831a-a5a38f72e36f)

Now your system is ready to run QATTS.‌

| Prop Name               | Prod Desc                                                                                                         | Rules                                                                                                                                                                                                                 |
| ----------------------- | ----------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| prop.capability.browser | List of supported browsers by this node. Multiple browsers and thier version no can be given with comma seperated | <p>Supported Browsers. chrome,edge,firefix,safari</p><p></p><p>if the node supports specific version, you specify like this: \[browser name]:\[version no]</p><p>Example: chrome,chrome:94,edge:32,firefox,safari</p> |
| prop.capability.desktop |                                                                                                                   |                                                                                                                                                                                                                       |
| node.developer.username | user of the developer                                                                                             |                                                                                                                                                                                                                       |
| node.reserved           |                                                                                                                   | true/false                                                                                                                                                                                                            |
| node.reserved.users     | List of users who can access this node. Multiple users can be given as comma seperated                            |                                                                                                                                                                                                                       |
| prop.capability.mobile  |                                                                                                                   |                                                                                                                                                                                                                       |

{% hint style="info" %}
Every time Agent service should be started before running tests in QATTS.
{% endhint %}


# Streaming Configuration

Once you have registered your node in QATTS, We just need to follow a few simple steps to get executions streamed. QATTS streaming works on the windows platform, when the agent-service is running.

**Installation / Pre- Requisites for Streaming**

There is no installation required for the test run streaming.

*Note : QATTS agent-service batch should be running for the tasks to get pick*

{% hint style="info" %}
Only the machines which can be accessed publicly were only supported
{% endhint %}

***How to Configure my node for Streaming ?***

Select your node&#x20;

Administration -> Nodes -> Select your node

In the properties section configure as below&#x20;

| Property Name           | Property Values | Description                                                                                                                                                                                                                                                      |
| ----------------------- | --------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| props.rds.enabled       | true / false    | This enables us the streaming service when the task is executing                                                                                                                                                                                                 |
| props.rds.connection.id | Integer Value   | <p>After registering the node with guacamole -> and id would be generated. generated id has to be provided in the value section<br>Refer to : <a data-mention href="/administration/node/how-to-register-node-for-streaming">/pages/2Nv6XTrgD2kQ9DsOPYJm</a></p> |


# How to register node for streaming

The guacamole server provide an easy way of registering, testing the nodes and disconnecting the

***Pre***-***Requisites***

&#x20;*In order to register, Apache Guacamole server has to be installed.*

1. &#x20;*Navigate to the URL :* [*http:{{Your Server}}:8080/guacamole/#/*](http://poc.ibaseit.com:8080/guacamole/#/)
2. *Login with your credentials :*  guacadmin\*\*\*\* **/ guacadmin**\*\*\*\*
3. *Go to settings -> Connections -> New Connection*
4. Form Details as explained below

{% hint style="info" %}
Only the machines which can be accessed publicly were only supported
{% endhint %}

| Form Label Name                                       | Value description                                                                                                                                                                 |
| ----------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Name                                                  | <p>Registered NODE name has to be provided for ease of use and <strong>recommended</strong><br>(OR)<br>Any user defined name can be provided</p>                                  |
| Location                                              | ROOT : This is the defined value, no need of any change                                                                                                                           |
| Protocol                                              | Select the value as RDP                                                                                                                                                           |
| <p>Network Parameters:<br>HostName</p>                | <p>IP Address of the machine (Node)<br>Ex : 192.168.203.\*</p>                                                                                                                    |
| <p>Network Parameters:<br>Port</p>                    | Default value : 3389                                                                                                                                                              |
| <p>Authentication : <br>Username</p>                  | <p>Machine username to be provided here<br>Ex : venkatasastryd<br>Note : To be matched</p>                                                                                        |
| <p>Authentication : <br>Password</p>                  | <p>Machine password to be provided here<br>\*\*\*\*\*\*\*<br>Note : To be matched</p>                                                                                             |
| <p>Authentication : <br>Ignore Server Certificate</p> | Enable the field, as there were no certificates externally provided                                                                                                               |
| <p>Display : <br>Resize Method</p>                    | <p>Select the value <br>"<em>Display Update virtual channel (RDP 8.1+)</em>"</p>                                                                                                  |
| <p>Screen Recording :<br>Recording path</p>           | <p>server path to save the recorded videos to be provided here<br>Path : /var/www/html/video<br><br>Note : No path to be provided if the user don't want to save recording's.</p> |
| <p>Screen Recording : <br>Recording name</p>          | Provide your node name here                                                                                                                                                       |

5\. Save the form

6\. Fetch the connection ID from the URL to configure them in the node configuration


# Status And Actions

This page describes various options in the node with their working and configurations

## Status :&#x20;

Every object has a status which defines it state. Let's see some status of the node.

| Status    | Description                                                                             |
| --------- | --------------------------------------------------------------------------------------- |
| Idle      | It means the node is not having any tasks running and ready to have a task              |
| Offline   | It means the agent-service is not started in the VM                                     |
| Executing | It means the node is running a task and any task which has been assigned will be in QUE |

## Actions :&#x20;

| Button                | Action                                                                                                                  |
| --------------------- | ----------------------------------------------------------------------------------------------------------------------- |
| Restart               | Restarts the agent service                                                                                              |
| Remote Control        | Can control your VM a.k.a remote logging in                                                                             |
| Reset                 | Terminates the execution of task on the machine, and sets the node status to idle for picking up the next task          |
| Clear Agent Cache     | Deletes the agent data folder in the node, Which syncs overtime a new task was assigned.                                |
| Clear Test Runs Data  | <p>Deletes the task folders on the node.<br>Note : Backing up the needed evidence is recommended before doing this.</p> |
| Download License File | A text file will be generated with the encrypted information generated by QATTS, which is unique by node.               |
| Update License        | It updates the node information to the license file, Need to update license file in the node, when updated.             |
| Delete                | Soft deletes the node which can be undo later.                                                                          |


# Agent

Agent might be a browser or mobile device

<table><thead><tr><th width="248.33333333333331">Prop Name</th><th>Prop Desc</th><th>Information</th></tr></thead><tbody><tr><td>agent.browser.name</td><td>Name of the browser</td><td><p>Supported Browsers:</p><p>chrome</p><p>edge</p><p>safari</p><p>firefox</p></td></tr><tr><td>agent.browser.version</td><td>Browser version number</td><td>This is optional. Default is latest available browser version</td></tr><tr><td>agent.mobile.model</td><td></td><td></td></tr><tr><td>agent.mobile.os.name</td><td></td><td></td></tr><tr><td>agent.mobile.os.version</td><td></td><td></td></tr><tr><td>agent.desktop.os.name</td><td></td><td></td></tr><tr><td>agent.desktop.os.version</td><td></td><td></td></tr></tbody></table>


# User

A step by step guide to creating a user

## Step by step walkthrough

To add a **User** follow the below steps

**STEP 1:** Go to **Administration** ---> Click on **User Management** ---> **Users**. You can see a **Create User** as shown below.

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-MhXjXC-vTAvZ40NrNP8%2F-MhY4Zv0aildNvBKUfho%2FUser.png?alt=media\&token=f77af2e1-faa7-4c30-8c03-0f1227b244ff)

**STEP 2:** Click on **Create User** and fill out the required details.

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-MhXjXC-vTAvZ40NrNP8%2F-MhY4wYHR68osYaOlZrw%2FUser1.JPG?alt=media\&token=2e9faa19-c412-41d9-8f80-1b57c14ecdce)

* **Email:** Enter the Email of the user you prefer to add.
* **First Name, Last Name and Mobile Number:** Enter the following user details.
* **Product Name:** Select the product name you prefer to add it to the user.
* **Role:** Select the Role which suitable to the User.

**STEP 3:** After filling out the required details, click on **Save** and the User will be saved and should be visible in the User Management.

## Short Video

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-MkfAM6lZRb16N9ULQx4%2F-MkfBIlOZmwtWLoqXC73%2FAdding%20User.gif?alt=media\&token=4d399a8e-ba89-4673-9b33-5193622abb68)


# Role

A Role specifies what type of access can a user have in QATTS.

## What is a Role?

A **Role** specifies what type of access can a user have in QATTS.

## Step by step walk through

To add a Role follow the below steps

STEP 1: Go to **Administration** ---> Click on **User Management** ---> **Roles.** You can see a **Add Roles** as shown below.

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-MhX6ktGulx-I3YuY1i3%2F-MhXhAg-P5OVlkHl4ZCb%2FAdd%20roles.png?alt=media\&token=a91616be-a15f-4682-a6cf-46b408d44eac)

**STEP 2:** Click on **Add Role** and Fill out the required information.

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-MhX6ktGulx-I3YuY1i3%2F-MhXhQ0qEhNJdp0sms-t%2FAdd%20Role.JPG?alt=media\&token=1199a58b-282c-4293-8393-1e68b5b816cb)

In the **Manage Role** you can restrict user access by specifying what applications can be accessed.

**STEP 3:** After filling out the required details, click on **Save** and the Role will be saved.

## Short Video

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-MkeubR_eUWqSXJ4g0RE%2F-Mkf9S2-5xDZeYWPZMQ7%2FAdding%20a%20Role.gif?alt=media\&token=221f5e2f-6373-4c2b-b7a9-441fa8e8b7e0)


# Studio

Creating objects and designing of functionality with test cases


# UI Elements


# text\_box

It is one of the UI element type to populate a value and also has many defined ways of sending a value.

A textbox is a common input control in HTML. It is used to collect user input and allow the user to enter text. The most common use of a textbox is to enter search queries on a web page or to enter login credentials on an online form. It is a common input element found in many software programs

When you click on the text box, a cursor is enabled, indicating the user can begin typing.&#x20;

## Automation

How does this work ?

Usually whenever sending a value to the text box, QATTS clears the value and sends the value.

But, There would be some situation where the user cannot send a value. Might get multiple exceptions / sent value will not get displayed.&#x20;

Let's see some questions from automation communities.  [Trouble Shoot](/studio/ui-elements/text_box/trouble-shoot)

How to configure the advanced options. [Properties Library](/studio/ui-elements/text_box/properties-library)


# Properties Library

QATTS has all the solutions to the day-to-day automation problems defined. Below will explain us how to use them.

<table><thead><tr><th>Property Name</th><th>Property Value</th><th width="187">When to use</th><th>How it works</th></tr></thead><tbody><tr><td>charSequence</td><td>true/false</td><td><p>1)     When there were some characters missing in the sent value</p><p>2)     The given value has some special characters</p><p>3)     When the field has some dependent results like a search box / date</p></td><td>Sends the value character by character with a time gap of 100ms</td></tr><tr><td>copyAndPaste</td><td>true/false</td><td>This is kind of a hack when none of the configuration were not working / unable to send the value to the textbox</td><td>It copies the given value to the clipboard and pastes the same into the element</td></tr><tr><td>pasteOnly</td><td>true/false</td><td>This should be used when there was a value getting copied from the application and that be used for pasting.</td><td>It just copies the clipboard value into the element</td></tr><tr><td>clickAndSend</td><td>true/false</td><td><p>1)     When there is no pointer on the text box</p><p>2)     When the sent value is not visible in the webpage</p></td><td>It performs a click on the element and then sends a value</td></tr><tr><td>jsSend</td><td>true/false</td><td><p>1)     When we got the element click interception</p><p>2)    When an element is getting overlapped by other element</p></td><td>It sends the value using javascript</td></tr><tr><td>focusAndSend</td><td>true/false</td><td>When the element is not in the active state and in enabled state without any pointer</td><td>It mouse hovers on to the element then clicks and send a value</td></tr><tr><td>sendWithoutClear</td><td>true/false</td><td>When we are performing any update operations on the web page</td><td>It sends the value into the element without clearing the existing value</td></tr><tr><td>selectAllAndSend</td><td>true/false</td><td>When we couldn’t clear the existing value by default technnique</td><td>It performs the CTRL+A Operation then clicks on BACKSPACE -> Which clears the element data, Then sends the value</td></tr><tr><td>smartClearAndSend</td><td>true/false</td><td>When we see an increment / decrement typical text box. We can use this</td><td>It clears the value character by character and then sends the value</td></tr></tbody></table>


# Trouble Shoot

Answers to yours questions / Exceptions

**FAQ's**

<details>

<summary>How can I send a value to the text box using JavaScript?</summary>

We can simply configure the “jsSend” property for the respective object

</details>

<details>

<summary>Can I click on the element before sending a value?</summary>

Yes, QATTS has the PRE-ACTION feature. Refer to LINK. (OR) Configure “clickAndSend” property.

</details>

<details>

<summary>I have a text box at the bottom of page, Can QATTS scroll automatically and send the value?</summary>

Yes, With the PRE and POST Action features it can be done. By, default QATTS scrolls to the element and sends the value.

</details>

<details>

<summary>Getting an exception “ElementNotInteractable” when sending a value. How can I handle this?</summary>

In general, whenever the element is getting overlapped with another element, we receive this kind of exceptions, to handle this kind of issues. Configure the property “jsClick”.

</details>

<details>

<summary>Value was not seen in the element after populating? There was no exception either?</summary>

In this scenario we have hover the mouse and send the value. Configuring “moveAndSend” will do the job perfectly.

</details>

<details>

<summary>Sending a value to a textbox, few characters were missing?</summary>

Cases like this, We need to send the value character by character to the element. It can be achieved simply by configuring “charSequence”.

</details>

<details>

<summary>How can I send a value from clipboard?</summary>

Yes, clipboard values can be sent by configuring “pasteOnly”.

</details>

<details>

<summary>How can i append my value to the existing value without clearing?</summary>

By configuring “sendWithoutClear”, We can achieve this.

</details>

<details>

<summary>By default, the value of element was not getting cleared, How to clear the value?</summary>

In this special case, we can configure “selectAllAndSend”, which highlights the complete value and clicks on backspace.

</details>

<details>

<summary>How to clear the value in the incremental/decremental textbox?</summary>

We need to configure “smartClearAndSend” which clear the value character by character.

</details>


# loader

A web page loader is a graphical representation of how long it will take for a website to load and to show the user how long it will take before they can interact with the page.

## Importance of loader

These days if a website takes more than a few seconds to load, people tend to close the page and move on.

CSS loaders help retain a site’s traffic. It increases the **loading speed** and **entertains users.**

Unlike a gif, a CSS animation avoids the image request. This results in less bandwidth consumption and a faster loading process.

## Automation

Now lets understand how a loader works and how to configure.

Loader can be configured in two ways

1. Configuring at Pre/Post actions
2. Configuring in action class

For any way to make the loader works, We need to create an UI element with the element type as loader.\
Wait value provided in the UI element will act as the maximum time in seconds to wait for the indivisibility of element

#### Action class [UI Action Methods](/ui-action-methods#wait-for-invisibility-of-element)

#### Pre and Post Actions

LINK TO PRE AND POST ACTIONS

Let's see some questions from automation communities. [Trouble Shoot](/studio/ui-elements/loader/trouble-shoot)


# Trouble Shoot

Answers to yours questions / Exceptions

<details>

<summary>How do I wait for the loader</summary>

Loader can be configured in 2 ways as explained. Link to the refence.[loader](/studio/ui-elements/loader#automation)

</details>

<details>

<summary>How do I inspect the loader</summary>

In the daily applications we see different types of loaders and their behavior completely depends on the time taken for the page to load.

Open the developers tools in the browser and navigate to source tab. PAUSE the browser when you see a loader\
Now sit back inspect the element and write the locator.

</details>

<details>

<summary>I don't have / see a loader on my webpage</summary>

In the modern application, we definitely see a element that will dissappear after loading the content of the page. \
If, there was no such elements in our web page. We need to skip thinking about the loader and validate the header of the page to continue further

</details>

<details>

<summary>What was the maximum time I can wait for the loader</summary>

Usually, we can wait for the maximum of 2 minutes for a loader and completely depends on the network conditions and multiple factors.

</details>

<details>

<summary>I couldn't inspect my loader. It was fast as rocket</summary>

Yes, we do see this kind of situations where a loader is disappeared in a fraction of milli seconds. Pausing the script and inspection was the only way we can do it.

</details>

<details>

<summary>I have multiple loaders in my application, How can i handle them</summary>

Yes, this is pretty simple in QATTS. this can be done in either of ways in action class / action.

Ex : action.pre : waitforloader:UI\_Element

</details>

<details>

<summary>Sometimes my loader appears and sometimes not. How does this work</summary>

Yes, As said we might not get the loaders all the time. QATTS has an internal mechanism when the loader is not found in 2 seconds. It just skips and proceeds with the next steps in action.

</details>

<details>

<summary>Timeout exception in the task when loader appears</summary>

This happens when the loader time is greater than the given maximum time of the UI element. increasing the time will solve the problem

</details>


# date


# button

It is one of the UI element type for clicking a web element on a web page. Some times a normal click might not work. So, QATTS has a rich properties library to click in multiple ways.

A web page button is a type of hyperlink that can be clicked on to go to a new page or site. Web page buttons are often used to highlight important information on a website, such as contact information, navigation links, and other items that are frequently accessed.

Web page button is a graphical control element that is used to trigger a specific action on the web page.

## Automation

In QATTS, at the time of execution it automatically scrolls to the element irrespective of top or bottom of the page and clicks on the element.

There were some possible ways in the recent emerging web technologies where a click will not happen. In this kind of scenarios also QATTS has a rich property library where all the problems has a pre-defined solutions. Refer to link. [Properties Library](/studio/ui-elements/properties-library)

Let's also see some questions and exceptions from communities. [Trouble Shoot](/studio/ui-elements/trouble-shoot)


# drop\_down

It is one of the UI element type to select a value and also has many defined ways for selecting the desired value

A dropdown is a UI element that lets users select one value from a list. There are two types of dropdowns: list and menu.

List dropdowns are primarily used for selecting one value from a list of options. Menu dropdowns are primarily used for selecting one option from a list of values, where the user can type in their own choice.

## Automation

Usually when the UI element type is a dropdown, QATTS checks the tag name of the element is SELECT. If the tag name is not matched. it will throw an exception "Element tag name should be select".

WAIT !!! That's not the end of the world. Still we can make the dropdown work.

QATTS has solutions defined to all the problems in handling the dropdown. Refer to link  [Trouble Shoot](/studio/ui-elements/drop_down/trouble-shoot)

Now, lets see some questions / exception from communities [Properties Library](/studio/ui-elements/drop_down/properties-library)


# Trouble Shoot

Troubleshoot the problem you have, by looking at the various available options

<details>

<summary>How can I select a value from the dropdown</summary>

If the dropdown has standard select-option model. By configuring the property "byValue" we can achieve this. Refer to link [Properties Library](/studio/ui-elements/drop_down/properties-library)

</details>

<details>

<summary>How can i select the nth value from the dropdown</summary>

If the dropdown has standard select-option model. By configuring the property "byIndex" we can achieve this. Refer to link [Properties Library](/studio/ui-elements/drop_down/properties-library)

</details>

<details>

<summary>How can I scroll the dropdown and select a value</summary>

QATTS automatically scrolls to an element and selects the value, if it is not happening in your application. Below configuration can work\
Using the pre action as "scrollToElement". Refer to link [Properties Library](/studio/ui-elements/drop_down/properties-library)

</details>

<details>

<summary>How can I select a dropdown with partial value</summary>

Using the properties "contains" and "tagName" we can achieve this. [Properties Library](/studio/ui-elements/drop_down/properties-library)

</details>

<details>

<summary>How can I select multiple values from the dropdown</summary>

In the test data provide the values with a comma separated. QATTS automatically recognizes and selects the multiple values

</details>

<details>

<summary>How can I select the dropdown value which is present in the name attribute</summary>

If the dropdown has standard select-option model. By configuring the property "byName" we can achieve this. Refer to link [Properties Library](/studio/ui-elements/drop_down/properties-library)

</details>

<details>

<summary>There were no select->options tags in my web page, How can I work on such elements</summary>

QATTS has a property called "tagName" where the user can provide their tagName. [Properties Library](/studio/ui-elements/drop_down/properties-library)

</details>

<details>

<summary>How can I select a dropdown value which is completely dynamic</summary>

QATTS also provide an option to write a different locator to find the value. This can be configured with property "custom" [Properties Library](/studio/ui-elements/drop_down/properties-library)

</details>


# Properties Library

Answers to yours questions / Exceptions

<table><thead><tr><th width="161">Property Name</th><th>Property Value</th><th>When to use</th><th>How it works</th></tr></thead><tbody><tr><td>byValue</td><td>TRUE / FALSE</td><td><ol><li>When the user required value is saved in the attribute "value"</li><li>When the value was saved in the hidden attribute</li></ol></td><td>It finds the web element matching the with the attribute value == given test data<br><strong>Note</strong> : Works only for select tags</td></tr><tr><td>byIndex</td><td>TRUE / FALSE</td><td><ol><li>When the user required value is in maintained in a fixed index all the time</li></ol></td><td>It finds the web element matching with the given index number in the tets data<br><strong>Note</strong> : Works only for select tags</td></tr><tr><td>byname</td><td>TRUE / FALSE</td><td>When the user required value is saved in the attribute "name"</td><td>It finds the web element matching the with the attribute value == given test data<br><strong>Note</strong> : Works only for select tags</td></tr><tr><td>tagName</td><td>YOUR TAG NAME</td><td>It is a special property when the dropdown is not authentic. <br>Here user has to provied the tagName   value.<br>Ex : dropdown has values in "li" tags.<br>Then we have to configure as <br><strong>tagName : li</strong></td><td>QATTS frames the XPATH locator internally with the test data given.<br><br>Finds and clicks the element. </td></tr><tr><td><ol><li>Contains</li><li>tagName</li></ol></td><td><ol><li>TRUE / FALSE</li><li>YOUR TAG NAME</li></ol></td><td>This works same as above. The only difference is. When we have the partial text provided in the test data. This will work</td><td>QATTS frames the XPATH locator internally with the test data given.<br><br>Finds and clicks the element. </td></tr><tr><td>custom</td><td>YOUR_XPATH</td><td>When we have to write a complex XPATH and then replace a value inside it using parameterization ${} in the given locator</td><td>QATTS evaluates the given XPATH.<br><br>Finds and clicks the element.</td></tr></tbody></table>

Note : When configuring the tagName, contains, Custom -> Main locator should be configured to match the main click and tagName should match the value.


# label


# check\_box

It is one of the Ui element type which is used to make a decision on web page. selecting or unselecting can make differences in saving the form

A checkbox is a small, usually square or rectangular box with a clear area in the middle.

The checkbox is used to indicate that an item is selected. It can be used to select one or more items from a list, and they can be either checked or unchecked.

Checkboxes are often used in online forms to allow people to choose which items they want included in the form submission.

## Automation

When automating a checkbox. we need to think and decide what should be the final status of our checkbox. Because, some checkboxes might come selected at the time of loading the web page. To address this QATTS has a logical mechanism to give the desired result.&#x20;

Let's understand the inputs for a check box

#### Pre-Requisite : Saving a UI element and Using in the design !!!

A true / false value should always be provided in the test data.

**TRUE** : If we want the checkbox to be in selected state. Ignores if already in selected state

**FALSE** : If we want the checkbox to be in de-selected state. Ignores if already in de-selected state

Note : If there was no value provided in the test data. No action will be performed

Let's see some questions from automation communities.  [Trouble Shoot](/studio/ui-elements/text_box/trouble-shoot)

How to configure the advanced options. [Properties Library](/studio/ui-elements/text_box/properties-library)


# radio\_button

It is one of the UI element type which make user to decide or opt for a value from the list of values

A radio button is a graphical control element that is used to select one option from a set of choices.

Radio buttons are usually used in conjunction with textboxes, dropdowns, and other input controls

These can be selected or deselected by clicking it. The user typically selects one option from among two or more options.

Radio buttons are often used in forms to provide the user with mutually exclusive choices.

## Automation

When automating the radio buttons, Sometimes clicking on the selected radio button become de-selected. To handle this kind of scenarios QATTS handles the logical behavior from the user inputs.

QATTS simply checks the radio button status, If it is not in selected state. Performs click operation on web element. Refer to library for different ways of clicking. [Properties Library](/studio/ui-elements/properties-library)

My web application was maintaining the state of the radio button in different attribute. Yes, we got it handled as well.

| Property Name          | Property Value  |
| ---------------------- | --------------- |
| attName.selected       | YOUR\_ATTRIBUTE |
| attName.selected.value | DEFINED\_VALUE  |

When configured the above and at the time of execution

Step1 : QATTS extracts your attribute value (YOUR\_ATTRIBUTE ) and compares with the  DEFINED\_VALUE.

Step2 : If both doesn't match. it will click on the web element. Refer to library for different ways of clicking. [Properties Library](/studio/ui-elements/properties-library)


# link

It is one of the UI element type for clicking a web element on a web page. Some times a normal click might not work. So, QATTS has a rich properties library to click in multiple ways.

Hyperlink is a word/phrase/image that allows the user to navigate from one page of a website to another.&#x20;

Hyperlinks are often used in the form of anchor text, which is highlighted when clicked and takes you to the linked web page.

The links are usually underlined, but they may also be in different colors, shapes, or other ways that help them stand out from the rest of the text. Hyperlinks may also be accompanied with phrases like "click here" or "read more".

## Automation

In general, Links opens in a new tab / window. For validating this functionality we need to click on the web element first. As, we see QATTS has a rich library to make the click operation work. Refer to link [Properties Library](/studio/ui-elements/properties-library)

I have few questions and exceptions. Refer to link [Trouble Shoot](/studio/ui-elements/trouble-shoot)


# Shadow


# Trouble Shoot

Answers to yours questions / Exceptions

<details>

<summary>I have clicked on the element and there is no action happening</summary>

Usually QATTS scroll to the element before performing the click action. Please check whether the element is in the current view or not.

If it is in the current view and no automation errors observed. Refer to [Properties Library](/studio/ui-elements/properties-library) for configuring the jsClick property

</details>

<details>

<summary>My button gets enabled only when hovered. How can I handle</summary>

This can be done in 2 ways. Explained below\
1\. Configure the pre action as "mouseover" [Pre and Post Actions](/studio/ui-elements/pre-and-post-actions)\
2\. Configure the property "focusAndSend" [Properties Library](/studio/ui-elements/properties-library)

</details>

<details>

<summary>How can i perform the right click</summary>

We usually don't perform the context click in web applications. This is helpful when we are working on native applications.

We need to give the property called "contextClick" [Properties Library](/studio/ui-elements/properties-library)

</details>

<details>

<summary>How can I perform the ENTER operation after populating the web form</summary>

This can be achieved in 2 ways.

1. Performing the post action for the last element as ENTER. Refer to link [Pre and Post Actions](/studio/ui-elements/pre-and-post-actions)
2. For the button element configure the property enterKey. Refer to link [Properties Library](/studio/ui-elements/properties-library)

</details>

<details>

<summary>How can I click multiple times on a web element</summary>

This is not recommended because, clicking on a element can change a page or redirect to new section. If that is the functionality in the application.

Then it can be achieved by configuring "clickAndHold". Refer to link [Properties Library](/studio/ui-elements/properties-library)

</details>

<details>

<summary>How can I wait for the loader after clicking on the button / link</summary>

This can be achieved with the post action "waitforloader:UI\_Element". Refer to link [Pre and Post Actions](/studio/ui-elements/pre-and-post-actions)

</details>


# Properties Library

QATTS is all about configuring the right thing in right place. Here is the process

In the UI elements, We have the section called PROPERTIES. any actionable configuration will be configured here. Refer the below screenshots to understand.

| Property Name | Property Value | When to use                                                                                                                                              | How it works                                                                                                                |
| ------------- | -------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- |
| jsClick       | TRUE/FALSE     | <ol><li>An element is covered  by another element</li><li>An element is not in a scrollable position</li><li>When  a normal click doesn't work</li></ol> | Performs the click operation with java script                                                                               |
| focusAndSend  | TRUE/FALSE     | <ol><li>When we have to hover the mouse and perform click</li><li>When a web element is not responsive. To enable the element</li></ol>                  | It hovers the mouse on to the element and then performs the click operation                                                 |
| contextClick  | TRUE/FALSE     | <ol><li>To perform the right-click operation</li></ol>                                                                                                   | <p>It just performs the right click to select the sub option.<br><br>Helpful to automate the native applications mostly</p> |
| returnKey     | TRUE/FALSE     | <ol><li>When a normal click doesn't work in web form</li><li>When to press the ENTER Key for submission of a form</li></ol>                              | It just clicks on the ENTER button                                                                                          |
| clickAndHold  | TRUE/FALSE     | <ol><li>When the user wants to click and hold on the element for 2 seconds</li><li>When a click operation has some inbuilt process running</li></ol>     | It clicks the web element and holds for 2 seconds then release the click operation on the element                           |


# Pre and Post Actions

An element action that can be performed before or after the main action.

Pre and Post actions are important aspects of any user experience and essential in any automated testing process. They allow us to prepare the element for a test before executing it and clean up after it is finished. \
\
QATTS has a rich set of actions for all the element types, which can be easily configurable.

Pre-Action can be used to set up the element for the test

Post-Action can be used to reset the element back to its original state / to activate the next element in automation.

### How can i use these action

We can configure the actions in any UI Element in the properties section as below

{% hint style="info" %}
action.pre  : click

action.post  : highlight
{% endhint %}

Multiple actions can be given in comma separated.

### Automation

<table><thead><tr><th width="197.33333333333331">Action Name</th><th>How it works</th><th>When to use</th></tr></thead><tbody><tr><td>click</td><td>Performs click operation on the element.</td><td>Many cases, this will help you. Few of them were : <br>1. When the textbox is not in active state is not blinking<br>2. When the pointer is not blinking in the textbox<br>3. When the text is not getting populated</td></tr><tr><td>waitforloader:YOUR_UI_ELEMENT</td><td>By default, this command takes the UI element which is configured in the Product.<br><br>If not, the user can provide in the below way <br>waitforloader:YOUR_UI_ELEMENT<br><br>In general, waits for the loader to be invisible.</td><td>When a loader appears after clicking on a button<br><br>When loader appears after populating something</td></tr><tr><td>clear</td><td>It clears the value from a textbox</td><td>By default, when populating a value into textbox it clears and sends the value.<br><br>In special cases, when the value is not getting cleared and getting appended we can use this</td></tr><tr><td>highlight</td><td>Highlights the element with a red rectangular box</td><td>When the element action was getting performed and event was not getting triggered<br><br>We can use this for debugging the element</td></tr><tr><td>escape</td><td>Performs the keyboard escape action on the element</td><td>When a date picker was getting populated, to collapse the picker pop-up we can use this</td></tr><tr><td>tab</td><td>Performs the keyboard tab action on the element</td><td>When in a form, to activate the next element we can use</td></tr><tr><td>left</td><td>Performs the keyboard left action on the element</td><td>Some times to append a value with certain index / To activate the pointer also we can use this</td></tr><tr><td>right</td><td>Performs the keyboard right action on the element</td><td>Some times to append a value with certain index / To activate the pointer also we can use this</td></tr><tr><td>up</td><td>Performs the keyboard up action on the element</td><td>Some times to append a value with certain index / To activate the pointer also we can use this</td></tr><tr><td>down</td><td>Performs the keyboard down action on the element</td><td>Some times to append a value with certain index / To activate the pointer also we can use this</td></tr><tr><td>pageup</td><td>Performs the keyboard pageup action on the element</td><td>When to capture the screenshot of the current / top view <br><br>When in editor mode, to go to the starting point index</td></tr><tr><td>pagedown</td><td>Performs the keyboard pagedown action on the element</td><td>When to capture the screenshot of the current / bottom view <br><br>When in editor mode, to go to the ending point index</td></tr><tr><td>backspace</td><td>Performs the keyboard backspace action on the element</td><td>To add a trailing and leading spaces in the text by default when populating a textbox</td></tr><tr><td>delete</td><td>Performs the keyboard delete action on the element</td><td>When working on a combo box to clear the old value we can use this.</td></tr><tr><td>focus</td><td>Makes the element as an active element in the current document</td><td>In general, It can be used when the textbox / any button is not in avtive state. To make the element active before performing the action. It can be used</td></tr><tr><td>movetoelement</td><td>It helps us to move the mouse cursor on to the web element and performs the cursor operation with offset(1,1) </td><td>It can be applied when the element is not in active state and becomes active whenever the mouse hovers only.</td></tr><tr><td>scrolltoelement</td><td>It scrolls to the element and make the element visible in the viewport. No matter how long we have to scroll</td><td>Any browser will have auto scroll feature when action was performed by default. If it doesn't work we can use this configuration in making the element visible in the view port.</td></tr><tr><td>dispatchevent</td><td>It frees up the element from all the events that were blocking the element for performing operations</td><td>When the particular element is having certain events, which were blocking to perform a click/populate actions we can use this in pre action</td></tr><tr><td>doubleclick</td><td>Performs the double click operation on the element</td><td>When the element has a customized functionality to perform  double clicks</td></tr><tr><td>submit</td><td>Performs the enter operation on only forms which causes the current page to change</td><td>When working on a form to submit it after all the populations. In the final element we can use this in the POST action.<br><em><strong>Note : If the element is not in a form, we might get NoSuchElement exception</strong></em></td></tr><tr><td>enter</td><td>Performs the keyboard enter operation on the element</td><td>When we are working on a chat window / forms this can be used in POST action which might cause the current page change.</td></tr><tr><td>sleep:YOUR_WAIT_TIME</td><td>This causes the current execution instance sleep for the given time</td><td>Not Recommended<br><br>It is just an option to wait for something to complete or invisibilities.</td></tr></tbody></table>


# table

It is one of the UI element type which is used to extract the data for the validations or using for other automation process

A table is a data structure that consists of rows and columns. The table displays the data in a tabular format, which means that it is structured as a grid of rows and columns. The table has two purposes: to organize data in rows and columns, and to display the information in an organized way.

The most common type of tables are HTML tables, which are designed for displaying tabular information on webpages or documents.

### Tables can be structured in a variety of ways:

\- A table may have one or more header rows, which identify the information contained within each column.

\- A table may also have one or more footer rows, which summarize the total number of entries for each column.

\- Tables can be sorted according to any one or more columns, with the sorting order indicated by an arrow at the top of the column.

## Automation

QATTS can make the extraction and data handling very easy with the properties.

Simply configuring the columns what we need. Now lets see with an example [Example](/studio/ui-elements/table/example)

When extracting the table, we might have multiple requirements / questions. let's[Trouble Shoot](/studio/ui-elements/table/trouble-shoot)


# Example

This page gives us how extraction of table data works and how to customize

| First Name | Last Name | Email                   |
| ---------- | --------- | ----------------------- |
| Ashile     | M.Smith   | <smith.ash@yahoo.com>   |
| Robert     | H.Chan    | <robert.h@outlook.com>  |
| Mark       | F.Flores  | <flores.mark@gmail.com> |
| Leonardo   | Carvalho  | <l.carvalho@yahoo.in>   |

Now, let's consider the above table for extraction.

In the UI element the locator configured should give us the number of rows

#### Approach 1 (When we want to decide what needs to be extracted)

Under the properties section. Below Configure the below

***prop.column:Your\_ProductElement = Your\_UIElement / LocatorType:LocatorValue***

***Ex : prop.column:FirstName = la.firstName***

In the above format we can configure all the columns or the column's we require.

#### Approach 2 (When we want all the columns with auto key names)

If you have written a locator which gives all columns . Configure as below.

***prop.columns.locator =*** ***Your\_UIElement / LocatorType:LocatorValue***

The result for the above prop will look like below

Item1 : value

Item2 : value

Item3 : value

With any approach once all the rows has been extracted. It will check for the below prop

prop.nextPage.link : UI Element / Locator Type : Locator Path

If it was configured it will navigate to each active page in the pagination and extracts the data

&#x20;


# Trouble Shoot

Answers to yours questions / Exceptions

<details>

<summary>How can i extract specific columns from my table</summary>

With the approach 1, You can simply configure only the required columns.Refer to [Example](/studio/ui-elements/table/example#approach-1-when-we-want-to-decide-what-needs-to-be-extracted)

</details>

<details>

<summary>Column value was not getting changed. First column value is displaying for all the rest</summary>

When writting XPATH for the column locator. Make sure you use the (.) before your XPATH

Reason : (.) mean current node

</details>

<details>

<summary>How can I extract only numeric from the column</summary>

Let's support your column value is "QATTS235". And you want the value as 235.

For the column UI element . Configure the extraction property.[Extraction Rules](/extraction-rules)

</details>


# form


# toogle\_button


# file


# alert


# Automation


# Objects

| Prop Name                      | Prop Desc                                                                                                                                                                                                                                                                             | Rules |
| ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----- |
| prop.errormsg:\[workflow name] | Defines customer message for an object by workflow name. When there is an exception on an object, this customer message will be added to the standard message. This will help uses to understand possible actions to take to fix the issue. Mainly used for prerequisite verification |       |
|                                |                                                                                                                                                                                                                                                                                       |       |
|                                |                                                                                                                                                                                                                                                                                       |       |


# UI Element

Understanding the UI element - a key component in automated web testing

## What is UI Element?

UI elements are integral part of a web application. They are responsible for interactions between the user and the application.

Refer <https://www.uxpin.com/studio/blog/user-interface-elements-every-designer-should-know/>

UI elements can be uniquely identified by their locators.&#x20;

A locator is a command that tells QATTS to locate a particular UI element.

## Create a UI Element

### Step by step walkthrough

To add an UI Element follow the below steps

**STEP 1**: Log into QATTS goto **Studio** on the left navigation panel, it directs to new window which will be appearing as shown below.

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-Mgp4eu5xaGEWm-XurSa%2F-MgpSeICOkIC4wEvjWBv%2FSuit.JPG?alt=media\&token=de11e8f8-6ae1-43a6-93ac-31f5c86949e8)

**STEP 2:** On the right corner Click on "**+**" icon and select **Add UI Element**, it should appear as below.

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-Mgp4eu5xaGEWm-XurSa%2F-MgpTVp-2SrwoFfnk1f3%2Ftempsnip.png?alt=media\&token=b6328ddd-29a7-43d3-9a11-5729ac1907b6)

**STEP 3:** Fill the required details as shown in the below screenshot.

{% hint style="info" %}
while filling **Wait Type** select " Time" and in **Wait Value** add value of at least "3 seconds".
{% endhint %}

&#x20;

* **UI Element Name:** The name could any of the user choice.
* **UI Element Type:** The user need to choose the type of the element such as button, text, file etc.
* **HTML Linking:** User need to define type of linking as xpath or others.
* **Locator path:** Here the locator id need to added.
* **Wait Type:** Here time is the default selection.
* **Wait Time:** Here user can add how many seconds the application searches for the locator.

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-Mk_rQTtA9TM92S0zvCS%2F-Mk_rvG5iSDH5U39KCZM%2FNew%20UI%20Element.JPG?alt=media\&token=b50057b2-8e9e-41bb-a283-4c9659f96228)

**STEP 4:** After adding required details and then click on **Save**, the given **UI Element name** would be saved in the groups you have selected it in.

### Short video

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-MkGSjyD3XFPBeA1LeDA%2F-MkGTwEzjiqEHpt4qwmV%2FCreating%20UI%20Element.gif?alt=media\&token=dda8950d-14ba-466a-9129-afc26cfa213f)

**Special Locator Options**

DataSetName of custom data options based locators

Locators with Test Data

Locators with Product Element Label name


# Drop Down

Dropdown or Select is a special input type. Unlike standard test box or button we need to perform multiple actions to select a value from a drop down.

Actions to be performed:

1. Click to activate/display the select options
2. Type a Selection Phrase to narrow your results ( Only for dynamic/suggested drop downs. E.g. Google Search is a suggested Drop Down)
3. From the drop down list select a value of your choice

**How to configure?**

Main locator info of the UI element must be pointed to activate/display drop down selection. Usually to click on the container to activate drop down recommendation

Add property **tagName** with value as locator for item selection. For example, if you are selecting a state Florida from the drop down, and all the states names are in span tags, then your locator will be //span\[text()="Florida"].&#x20;


# Radio Button

| Prop Name              | Prop Desc                                                                     | Prop Rules |
| ---------------------- | ----------------------------------------------------------------------------- | ---------- |
| attName.selected       | Element attribute name that have property to define if the option is selected |            |
| attName.selected.value | Element attribute value that tells if the option is selected                  |            |


# Multi Elements

There are 2 options available.

Multi Elements

Multi Element with Values

| Prop Name         | Prop Desc                                                                                          | Prop Rules                                                                                          |
| ----------------- | -------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- |
| clearBeforeSelect | Before selecting items based on selection, all check boxes will be unselected if they are selected | <p>Boolean (true/false)<br>Default is false<br>Only applicable if multiElementType is check box</p> |
| multiElementType  | Type if item that we are dealing with multi selection                                              | checkbox/select                                                                                     |
| groupItemsLocator | Locator to find all the items in the group                                                         | Only xpath locator is supported                                                                     |
| singleItemLocator | Locator to identify single item in the group. To pass item value use ${ItemName} in the locator    |                                                                                                     |


# table

Table is ready to use component for extracting data an UI table

Table in web application is very important and complex structure holding lot of data. To simplify extracting data from a complex table, qatts have inbuilt component. Just need to config locators of the table, headers, columns and rest of it is magic created by our engineers.

Based on your scenario you can configure properties for quick results:

* Extract selected Columns only and Map to Product Element

Use prop.column:\[Product Element Name] property to define each column and respective product element

* Extract columns without product element definition
*

\>>Extract selected Columns and Map to Product Element

**Locator Type & Path must be given for row array. Not to the table. Column locator has to be relative to row.**

Use below advanced props for table element type

| Prop name                           | Description                                                                                                                                                                                                                                                                                                                                                                               | Options                                                                                                                                                                                |
| ----------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| prop.column:\[Product Element Name] | Locator for respective Product Element or UI Element. For the product element name in the prop value, give locator info. Locator Info contains locator type and locator path with colon as delimiter                                                                                                                                                                                      | <p>prop.column:First Name ( First Name is product element)</p><p>prop.column:ZipCode (ZipCode is Product Element) </p><p>Locator Info Syntax</p><p>\[locator type]:\[locator path]</p> |
| prop.columns.locator                | Generic locator to each cell. Use columnIndex variable in locator to make it dynamic                                                                                                                                                                                                                                                                                                      | if this property is given, it will ignore individual  prop.column:\[Product Element Name]                                                                                              |
| prop.column.key                     | Typical table data will be hold data of an entity. For example a table will hold list of employee. And each row will hold information of an employee. So for employee key field that represent unique employee such as emp id or name etc. Key field for the data set that table data is representing. This is optional and but will be useful in getting the Data from array and display | A valid product element                                                                                                                                                                |
| prop.table.noDataElement            | Locator to check if table don't have any data. if the element exits, its assume that data doesn't exists in the table                                                                                                                                                                                                                                                                     |                                                                                                                                                                                        |
| prop.nextPage.link                  | Locator info of the web element that navigates to the next page.                                                                                                                                                                                                                                                                                                                          | Optional Field. Locator to be specified as \[locator type]:\[locator path]                                                                                                             |


# form

Form UI Element helps doing actions on the complete HTML Form.

**ExtractData**

Extract data for form element will help get all the form data without much configuration.

Use below properties to extract data from various fields on the forms. All form elements may not be same. When they are not same we can't apply same rules for all the fields. Form elements let you a set of properties for each set of fields. For example all text boxs will have same properies, an&#x20;

| Prop Name                                   | Prop Desc                                                              | Prop Options/Info                                                         |
| ------------------------------------------- | ---------------------------------------------------------------------- | ------------------------------------------------------------------------- |
| formData.set.\[setIndex].locator            | A common Locator for a group form elements                             | Generally you can define as input or textarea                             |
| formData.set.\[setIndex].attName            | Element attribute value to used for the name of the data of the field  | name or id                                                                |
| formData.set.\[setIndex].attNameExtraction  | Extraction rules that need to be applied on the extracted attName      | [Extraction Rules](/extraction-rules)                                     |
| formData.set.\[setIndex].attValue           | Element attribute value to used for the value of the data of the field | value or text                                                             |
| formData.set.\[setIndex].attValueExtraction | Extraction rules that need to be applied on the extracted attValue     | [Extraction Rules](/extraction-rules)                                     |
| formData.set.\[setIndex].dataType           | Data type of the data that is there for the field                      | string,data,number                                                        |
| props.page.contentCleanExp                  | ExtractionRules to clean up dynamic codes                              | Optional fields[Extraction Rules](/extraction-rules)                      |
| duplicatesAction                            | When form have duplicate AttNames what action to be performed          | <p>Default option: override</p><p>Options: </p><p>override</p><p>exit</p> |


# Product Element

Product elements are the data variables in QATTS

## What is Product Element?

Product elements are the data variables in QATTS. They carry the test data to execution engine during test execution.

They have a tight bonding with UI elements. Which means, every product element is associated with a UI element.

## Create Product Element

### Step by step walkthrough

To add an Product Element follow the below steps

**STEP 1**: Go to **Studio**, it directs to new window which will be appearing as shown below.

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-Mgp4eu5xaGEWm-XurSa%2F-MgpSeICOkIC4wEvjWBv%2FSuit.JPG?alt=media\&token=de11e8f8-6ae1-43a6-93ac-31f5c86949e8)

**STEP 2**: On the right corner Click on "**+**" icon and select **Add Product Element**, it should appear as below.

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-MgpUzckr-S6kNKKvV1A%2F-MgpXAVZitsjumF4ZCly%2FAdd%20product.png?alt=media\&token=ef9d28f3-86ab-490e-ab6b-2965f5808ec1)

**STEP 3**: Fill the required details as shown in the below screenshot.

{% hint style="info" %}
Selecting the Group details is mandatory.&#x20;
{% endhint %}

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-MgpUzckr-S6kNKKvV1A%2F-MgpXQ6TKvpPRGbJNbpz%2FProduct.JPG?alt=media\&token=174d092b-68ca-4d74-a8c7-889360a92981)

* **Product Element Name:** The name could any of the user choice.
* **Label Name:** It should be similar to the given product element name.
* **Product Element Type:** There are various fields to choose from input,output,action, custom, page.
* **UI Input Element Name:** Add the UI Element you want to connect it from the drop down selection.
* **UI View Element Name:**
* **Data Type:** Choose the type of data as string, boolean, Integer and others.
* **Database Column Name:**
* **Sequence**:

**STEP 4**: After adding required details and then click on **Save**, the given **Product Element** name would be saved in the groups you have selected it in.

### Short video

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-MkGhpnxQ0P3hHnVeI1k%2F-MkGiYqKoTMlX_hD_3c8%2FCreaing%20Product%20Element.gif?alt=media\&token=c062ec9a-8f91-4a0e-a0b7-b000cc9bbbc4)

{% hint style="info" %}
**Note**: The Product Element Name should be same as the excel sheet headings.
{% endhint %}


# Advanced Data Types

QData

QArray

QStringArray

QIntegerArray


# QIntegerArray

Stores an array of Integer values. Can be constructed with String value separated with delimiters

| Prop Name | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| delimiter | <p>Predefined Delimiters: comma, dot, hash, hyphen</p><p><strong><code>delimiter.dot</code></strong></p><p><strong><code>delimiter.hash</code></strong></p><p>Custom Delimiter: must be defined in square brackets. Some examples:</p><p><strong><code>delimiter.\[and]</code></strong> <code>word and is delimiter</code></p><p><strong><code>delimiter.\[break by]</code></strong> <code>word break by is delimiter</code></p><p><strong><code>delimiter.\[']</code></strong> <code>character single quote is delimiter</code></p> |


# QStringArray

Stores an array of String values. Can be constructed with delimiter

| Prop Name | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| delimiter | <p>Predefined Delimiters:  comma, dot, hash, hyphen</p><p><strong><code>delimiter.dot</code></strong></p><p><strong><code>delimiter.hash</code></strong></p><p>Custom Delimiter: must be defined in square brackets. Some examples:</p><p><strong><code>delimiter.\[and]</code></strong><code> word and is delimiter</code></p><p><strong><code>delimiter.\[break by]</code></strong><code> word break by is delimiter</code></p><p><strong><code>delimiter.\[']</code></strong><code> character single quote is delimiter</code></p> |

**Methods**

void addItem(String strValue)

String removeAt(int index)

boolean remove(String strValue)

String getItemAt(int index)

QStringArray getItems(String matchDataName,String prefix)

boolean contains(String strValue)

boolean containsWithStr(String contstr)

boolean endWithStr(String contstr)

boolean startsWith(String prefix)

boolean isSorted(String orderBy)

Integer getSize()

boolean isEmpty()

String toJson()

String toJson(Object keyName)

String\[] toStringArray()

String toString()

boolean doAssert(TFStepContext tfStepContext,String fieldName,QStringArray targetList)


# QArray

**Methods**

* void addItem(QData qData)
* QData removeAt(int index)
* boolean remove(QData qData)
* QData getItemAt(int index)
* QData getItemByKey(String keyValue)
* QData getItem(String matchDataName,Object matchObj)
* QData getItem(String matchDataName,String operator,Object matchObj)
* QArray getItems(String matchDataName,Object matchObj)
* QArray getItems(String matchDataName,String operator,Object matchObj)
* QStringArray findMatchingItemStr(String matchDataName,QStringArray keyArray,String targetDataName)
* QIntegerArray findMatchingItemInt(String matchDataName,QStringArray keyArray,String targetDataName)
* QArray filterData(String inExp)

Filter Data is used to extract data with an expression.&#x20;

Some examples:

| Expression  | Description                       |
| ----------- | --------------------------------- |
| 1,4,6       | Returns 1st, 4th & 6th objects    |
| 1-3,5-7,10  | Returns 1,2,3,5,6,7 & 10          |
| ItemA,ItemB | Retuns key matching, ItemA, ItemB |

Note: if the item in given position or with matching key, exception will be thrown.&#x20;

* boolean hasItemWithKey(String keyValue)
* Integer getSize()
* boolean isEmpty()
* String toJson()
* String toJson(String keyName)
* QData toQData(String keyName,String valueName)
* void invokeDataModifiers(TFStepContext tfStepContext,TFProductElement tfProductElement)
* boolean doAssert(TFStepContext tfStepContext,String fieldName,QArray targetList)
* double sum(String sumDataName)
* double sumIf(String matchDataName,Object matchObj,String sumDataName)
*


# QData

QData is a data structure which holds data in name:value pairs.

**Data modifiers**: After reading data from any source such as Excel Smarty, Test Data Sheets, API, Database,  modifiers will be activated. Qatts has rich library of modifiers defined. On a dataset (QData) many modifiers can be configured to operate in sequential batches. Modifiers has to configured using product element properties.

Property name syntax: modifier.batc&#x68;**\[number]**.**\[Source Data Name].to.\[Result Data Name]**

**Source Data Name:** Source Data Name is the data key name on which data modification has to be done. if the data value is empty modifiers will not be executed.&#x20;

**Result Data Name:** Result Data Name is the data key name in which result of the modifier will be saved.

**Batch Number:** In some cases modifier has to be operated in a sequence. Use incremental numbers with prefix **batch**. All modifiers in a batch will be executed in any order.&#x20;

Property value syntax: **convertTo**:delimiter.\[Delimiter String/Char]

**Date Conversion:** Converting basic data to advanced data types

Expression to use: **convertTo**:delimiter.\[Delimiter String/Char]

Predefined Delimiters:  comma, dot, hash, hyphen

Custom Delimiter: must be defined in square brackets. Some examples:

**`delimiter.[and]`**` ``word and is delimiter`

**`delimiter.[break by]`**` ``word break by is delimiter`

**`delimiter.[']`**` ``character single quote is delimiter`

**Moving Data**: Moving data from one element to another element.

Expression to use:

**moveTo**:keyName.\[Child Column Name]:keyValue.\[Child Column Data]

Methods

String getKey()

boolean isEmpty()

boolean containsValue(Object object)

boolean hasDataFor(String dataName)

Integer size()

String\[] getKeyNames()

void setValue(String dataName,Object dataValue)

Object getValue(String dataName)

String getValueAsString(String dataName)

Integer getValueAsInteger(String dataName)

Double getValueAsDouble(String dataName)

Boolean getValueAsBoolean(String dataName)

QData getValueAsQData(String dataName)

String dump()

String toJson()

String toJsonArray(String keyName,String valueName)


# Basic Data Types

Answers to yours questions / Exceptions


# API

Step by step walkthrough on how to add API

## Step by step walkthrough

To Add API kindly follow the below steps

**STEP 1:**  Go to **Studio** on the Left Navigation, it directs to new window which will be appearing as shown below.

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-Mgp4eu5xaGEWm-XurSa%2F-MgpSeICOkIC4wEvjWBv%2FSuit.JPG?alt=media\&token=de11e8f8-6ae1-43a6-93ac-31f5c86949e8)

**STEP 2:** On the right corner Click on "**+**" icon and select **Add API**, it should appear as below.

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-MgtV_wdG50Dyqp8rP0Z%2F-MgtWXx_zTsoYK9OlBro%2FAPI.png?alt=media\&token=c56a6ec1-1541-48f5-b642-d0e0272dd335)

**STEP 3:** Fill the required details as shown in the below screenshot.

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-MgtV_wdG50Dyqp8rP0Z%2F-MgtWloT6b8p3kQdaLV1%2FAPI%20Deatils.JPG?alt=media\&token=53387a2b-d34e-4834-bf91-e1dd2146b9cc)

The following is the detailed explanation for adding API details.

* **API Name**: The Name of the API need to be filled ( it could be any name of your convenience).
* **Description**: Mention in detail the project or what type of testing is to be conducted.
* **Type**: It consists of two testing methods -SOAP, REST. Choose according to your need.
* **Select Group**: select the group name which you prefer to conduct the test on.
* **END Point Url**: Add the URL of the source which you are conducting the test.
* **Methods**: POST, GET, PUT, HEAD, PATCH, DELETE, OPTION, TRACE - need to choose one of these methods according to the Testing requirements.

**STEP 4:** Click on **Save** to save the details you have entered.&#x20;

## Short Video

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-MkGvbqCFXBIKFILU4kR%2F-MkH-QYDMuhS0BssFDqw%2FAdding%20API.gif?alt=media\&token=83d32027-0bdc-40b3-84fe-1bfbb44b6cc2)


# Query

Add Query write Queries on different Databases without much needed additional system files and code to execute the query

## What is Query in QATTS?

**Add Query** write Queries on different Databases without much needed additional system files and code to execute the query. Its functionality is to execute the SQL queries on the Database. Normally, if you want to execute a query on the database you have to install a Database tool to perform the tasks. such as installing a Database as Oracle Db or MySQL.

## Step by step walkthrough

To add Query follow the below steps.

**STEP 1**:  Click on **Studio** on the Left Navigation Panel, it directs to new window which will be appearing as shown below.

![A new window is opened after clicking on the Studio](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-Mgp4eu5xaGEWm-XurSa%2F-MgpSeICOkIC4wEvjWBv%2FSuit.JPG?alt=media\&token=de11e8f8-6ae1-43a6-93ac-31f5c86949e8)

**STEP 2**: On the right corner Click on "**+**" icon and select **Add Query**, it should appear as below.

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-MhHqUUfnKkhcmpSvr4T%2F-MhIAU5n7D2Vo58W_yKU%2FAdd%20Query.png?alt=media\&token=e0c8b2e2-d169-4e3d-bf89-008c5133d396)

**STEP 3**: Fill the required details as shown in the below screenshot.

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-MkaeW33TDfpzazPILrI%2F-Mkaerq7zYHOpVfQ5Uvr%2FNew%20query.JPG?alt=media\&token=404f14bc-deb7-46ca-b3c1-34c7b8672a72)

* **Query Name:** The name could be any of the user choice.
* **Description:** Describe the action of the query.
* **Alias Name:**
* **Query:** Here user can write the query, it could be of any depending on the requirement.

**STEP 4**: After adding the required details click on Save and the data will be added in the Group you have Selected.

## Short Video

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-MkabzmMZe3IvY1PR2ab%2F-MkaeSGWjk339dNMKsRZ%2FTbVj5SLnqz.gif?alt=media\&token=10ccbb9e-d6aa-431d-b679-fa35be9bcde8)


# Smarty

Smarty is a predefined words or functions that are used in the Action class.

## What is Smarty?

**Smarty** is a predefined words or functions that are used in the **Action class**. For example while testing, If you have to read OTP of an email for 'n' number of times, Instead of writing down the code each and every time you can use the predefined word such as "**email:Reads OTP**", where the action that needs to be taken is already written in the library files.

#### Predefined Smarties

[File: Reads File Data](/automation/objects/smarty/file-reads-file-data)

Email: Read OTP

EmailRead

EmailSend

Capcha

Site Scan

Excel: Read Data from Excel File

Msg Publish: Push  message to Published Topic

## Step by step walkthrough

To add Smarty follow the below steps.

**STEP 1**:  Click on **Studio** on the Left Navigation Panel, it directs to new window which will be appearing as shown below.

![A new window is opened after clicking on the Studio](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-Mgp4eu5xaGEWm-XurSa%2F-MgpSeICOkIC4wEvjWBv%2FSuit.JPG?alt=media\&token=de11e8f8-6ae1-43a6-93ac-31f5c86949e8)

**STEP 2**: On the right corner Click on "**+**" icon and select **Add Smarty**, it should appear as below.

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-MhIDza1tpBDsXRV4geC%2F-MhIFueLjdvmKsgU1rWE%2FAdd%20Smarty.png?alt=media\&token=ffa29b76-b552-479e-9f9f-349b3cf2e280)

**STEP 3**: Fill the required details as shown in the below screenshot.

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-MhIDza1tpBDsXRV4geC%2F-MhIG0d-Q6Jf0D17zJWL%2FAdd%20Smarty1.JPG?alt=media\&token=cfd6625e-d29f-403f-93c5-37847e35c092)

* **Smarty Name:** Name could be any of the user choic&#x65;**.**
* **Description:** Describe the function of the smarty.
* **Smarty Type:** Specify the type of smarty you want to add from the drop down box.

**STEP 4**: After adding the required details click on **Save** and the data will be added in the Group you have Selected.

## Short Video

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-MkkScD3L-NFtcJePitg%2F-MkkaM3umZurZldIHsBj%2FAdding%20Smarty.gif?alt=media\&token=1a351ddf-2e70-4494-884b-ab237100884b)


# Excel: Read data from excel

Reads data from an excel sheet and gives output as QArray or QData based on config

| Param Name                                                                                        | Param Desc                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             | Default Value                                                                             |
| ------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- |
| fileName                                                                                          | Location & Name of the file                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            | Assume that file is in the Agent Data Folder                                              |
| sheetName                                                                                         | Excel Sheet from which data must be read                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               | Mandatory Field                                                                           |
| dataElementName                                                                                   | Name of the Product Element defining the data structure                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                | Valid Prodcut Element with data type QData                                                |
| dataType                                                                                          | Represent the type of data that you are reading. Select one of the options. \[multiRow, keyValue]                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      | No Default                                                                                |
| firstRow                                                                                          | Starting row from where the data must be read. For example if the data start from first row, give 1. Remember to match with the row no in excel                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        | 1                                                                                         |
| endRow                                                                                            | Ends reading when the excel row no is greater then given endRow value                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  | <p>Number. Optional. </p><p>Will read until the end of the row if endRow is not given</p> |
| firstColumn                                                                                       | Starting column from where the data must be read. For example, if the data start from column A, give 1                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 | 1                                                                                         |
| firstRowHasColumnHeaders                                                                          | When true smarty will read column names from the first row of the excel. All the column names must be defined a product elements.  When false, it will take column names from the columnNames property. if a column name is not defined as product element, that column will be skipped from reading                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | false                                                                                     |
| columnNames                                                                                       | Column name will be mapped to the product elements. Specify column names separated with comma                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          | No default                                                                                |
| keyColumnName                                                                                     | Specify keyColumnName if data is represented with single field. This is very helpful when doing find on the row on QArray                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |                                                                                           |
| toClipBoard                                                                                       | Copy's data to system clip board                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       | <p>Boolean. True/ False </p><p>Default is false</p>                                       |
| adjustColumnData.batch\[Number]:\[columnName] Column procesing is done based on batch no sequence | <p>1) Converting String with delimiter to QStringArray</p><p>Expression to use:</p><p><strong>convertTo</strong>:delimiter.\[Delimiter String/Char]:<strong>dest</strong>.\[Dest Element Name]</p><p>Predefined Delimiters: </p><p><code>comma</code></p><p><code>dot</code></p><p><code>hash</code></p><p><code>hyphen</code></p><p>Custom Delimiter: must be defined in square brackets. Some examples:</p><p><strong>delimiter.\[and]</strong> word and is delimiter</p><p><strong>delimiter.\[break by]</strong> word break by is delimiter</p><p><strong>delimiter.\[']</strong> character single quote is delimiter</p><p></p><p></p><p>2) Moving Another column data as child object</p><p>Expression to use:</p><p><strong>moveAsChild</strong>:keyName.\[Child Column Name]:keyValue.\[Child Column Data]</p> | Optional. Define for columns that need adjustment                                         |


# File: Reads file Data

Reads contents of a file and give data in various formats. Data will be stored in configured bulk param

| Param Name   | Param Desc                                                                            | Default Value                                |
| ------------ | ------------------------------------------------------------------------------------- | -------------------------------------------- |
| fileName     | Location & Name of the file                                                           | Assume that file is in the Agent Data Folder |
| outputParam  | Bulk Param name to store the content of the file                                      | SmartyName                                   |
| outputFormat | Format in which data need to be stored in bulk data. Options: bytes, base64,jsonArray | bytes                                        |


# EmailRead

EmailRead smarty reads email recent 10 emails from the mail box and filter them based on match criteria.

| aliasName            | Email configuration is done in deployment. Aliasname that you want to use for this configuration                                                                                                                                      | Must be a defined alias name from deployment                                                                                                                                           |
| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| mailServer           | Type of Mail server that you are connecting to. For popular mail server we have predefined props that will ease off configuration                                                                                                     | Options: office365,gmail                                                                                                                                                               |
| protocol             | Mail Access Protocol                                                                                                                                                                                                                  | Options:imaps,smtp,pop3s,pop3                                                                                                                                                          |
| host                 | Host name to connect to the mail server                                                                                                                                                                                               | <p>Examples:<br>outlook.office365.com<br></p>                                                                                                                                          |
| port                 | Port no to listen on                                                                                                                                                                                                                  |                                                                                                                                                                                        |
| domain               | Domain Name to access mail box                                                                                                                                                                                                        | Optional. Mostly required if you mail server is linked to your active directory                                                                                                        |
| username             | Username to access mailbox                                                                                                                                                                                                            |                                                                                                                                                                                        |
| password             | Password to access mailbox                                                                                                                                                                                                            |                                                                                                                                                                                        |
| sharedMailbox        | Mailbox address of shared mailbox that you want to access                                                                                                                                                                             | Optional                                                                                                                                                                               |
| folder               | folder in the mail box from which you want to fetch email                                                                                                                                                                             | <p>Optional: Default: Inbox</p><p>Example: Inbox/orders</p>                                                                                                                            |
| matchCriteria        | <p>Matching text in subject or body. </p><p>Expression format: \[fieldName]:\[operation]:\[value] </p><p>Supported operators: contains , equals Logical Operators: AND / OR (Make sure to give before and after Logical operators</p> | <p>Simple Eg: body:contains:Ram</p><p>With Dynamic Value  Eg: subject:contains:${FirstName}</p><p>With Complex Logical Operation Eg: body:contains:Ram AND subject:equals:Inviated</p> |
| matchOptions         | Option to return single item or all                                                                                                                                                                                                   | <p>Default: firstOnly</p><p>Options:firstOnly,all</p>                                                                                                                                  |
| extract.field        | Message Data field from which information to be extracted                                                                                                                                                                             | Message Fields: subject,body,receivedDataTime,fromEmail,fromName,toEmails,toNames,ccEmail,ccNames,bccEmails,bccNames                                                                   |
| extraction.operation | Extraction rules to be applied on the message field                                                                                                                                                                                   | Refer to [Extraction rules](/extraction-rules)                                                                                                                                         |
|                      |                                                                                                                                                                                                                                       |                                                                                                                                                                                        |


# EmailSend


# SiteScan

Site Scan is very powerful utility to test websites with dynamic content. It scans complete website and checks for broken link, compares it with previous content and many more.

{% file src="/files/oYYJL3fqGBuYfsie44uJ" %}
Site Scan File Template
{% endfile %}

Argument Name: Mode

Multiple options can be given with comma separation.  &#x20;

Example Options: &#x20;

* saveContent -> Saves content of the site to task folder
* scanOnly -> Scans complete websites and extracts information&#x20;
* sample -> Used for dry run. Will extract first 10 pages and its Childs
* sample:50 -> Used for dry run. Customize number of pages in the sample. Will extract first 50 pages and its Childs
* PageValidations -> Validates all the pages with w3 standards
* SpellChecks -> Performs spell check for new & changed pages and will be added to the site scan report
* ConsoleErrors -> Extract console error after each page load and logs in ConsoleError sheet of site scan report

| Prop Name            | Prop Desc                                                     | More Info                                                                                                                                |
| -------------------- | ------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
| props.page.checks    | Active tag names to checked                                   | Default Options: link:src,link:href,img:src,a:href                                                                                       |
| props.page.element   | Check based on an element. Give UI Element name               | Links to product element. To use this props.page.checks must be set to "**custom**"                                                      |
| baseURL              | URL on which we are performing the scan                       | This must a valid URL. Main URL or can give sub domain                                                                                   |
| cdnURL               | List URLs of CDN                                              | multiple CDN urls can be by comma separation                                                                                             |
| props.page.include   | Only matching URL to be included                              | <p>startsWith:\[phrase in the URL]</p><p>endsWith:\[phrase in the URL]</p><p>regex:\[expression]</p><p>contains:\[phrase in the URL]</p> |
| props.page.exclude   | All matching URL's will be excluded                           | same as include rules. multiple can be given with comma separation                                                                       |
| inputSiteData        | File of approved site scan data                               | <p>Site Scan Excel file format</p><p>File must be in Test Data folder</p>                                                                |
| defaultMissingImages | List of default missing images                                | Multiple image path can be given as comma separated                                                                                      |
| ignoreChildPages     | When true, scan will not check for any child pages            | Default is false                                                                                                                         |
| ignoreSiteMap        | When true, scan checks for skips reading the siteMap xml file | Default is false                                                                                                                         |
| scanCheckType        |                                                               | <p>FirstOccurance</p><p>AllOccurance</p>                                                                                                 |

Compare Site Scan

{% file src="/files/XPTAba1EZqfgHoCU1dVk" %}
Base Scan Template Excel
{% endfile %}

When performing site scan, it is very important to compare and drive test based on previous result. Run site scan once to extract data from the website. This will be used as reference point hence forth. In addition to extracted site scan data, Compare Site scan data must have extra columns, A**ction** & S**tatus**.&#x20;

Action Values:

* spellcheck&#x20;
* brokenlinks


# PDF Utils

The PDF Utilities is responsible for comparing and extracting information from PDF files. It provides functionality to compare two PDF files, extract text from a PDF file.

<table><thead><tr><th width="228">Property Name</th><th width="236.33333333333331">Property Value</th><th>Description</th></tr></thead><tbody><tr><td>StartPage</td><td>1</td><td>The starting page number for comparison/Extraction</td></tr><tr><td>EndPage</td><td>-1</td><td>The ending page number for comparison/Extraction</td></tr><tr><td>PDFAction</td><td>--</td><td>The action to be performed on the PDF files. Available options: "compare", "ExtractText"</td></tr><tr><td>File1</td><td>Value can be provide either in expressions (td:fileName, ud:fileName) or absolute path</td><td>The path or location of the first PDF file for comparison / extraction</td></tr><tr><td>File2</td><td>Value can be provide either in expressions (td:fileName, ud:fileName) or absolute path</td><td>The path or location of the second PDF file for comparison / extraction</td></tr><tr><td>TrimWhiteSpaces</td><td>Default : false</td><td>Flag to indicate whether to trim white spaces in the PDF files</td></tr><tr><td>HighlightDifference</td><td>Default : false</td><td>Flag to indicate whether to highlight differences in the PDF files</td></tr><tr><td>DifferenceImageColor</td><td>Default : MAGENTA</td><td>The color code (e.g., #FF0000) for highlighting differences in the PDF files</td></tr><tr><td>CompareAllPages</td><td>Default : false</td><td>Flag to indicate whether to compare all pages of the PDF files</td></tr><tr><td><strong>CompareType</strong></td><td>--</td><td>The type of comparison. Available options: "visual", "text"</td></tr><tr><td>ExcludeRegexPattern</td><td>--</td><td>Regular expression pattern to exclude specific text during comparison</td></tr><tr><td>fileName</td><td>Value can be provide either in expressions (td:fileName, ud:fileName) or absolute path</td><td>The path or location of the file <br>Note : Only when PDF Action is "ExtractText"</td></tr><tr><td>ExtractionOperation</td><td>Refer to : <a href="/extraction-rules">Extraction Rules</a></td><td>Given extraction operation will be applied to the extracted text<br><br>Note : Only when PDF action is "ExtractText"</td></tr></tbody></table>


# New Group

New group is created for a new project or new web page, under which Product Elements of that web page and UI Elements of that web page comes under this group

## What is New Group?

**New group** is created for a new project or new web page, under which Product Elements of that web page and UI Elements of that web page comes under this group. New group is created mostly based on the Functionality.

## Step by step walkthrough

To create New Group Kindly follow the below steps

**STEP 1:** STEP 1: Goto **Studio** in the Agent level, it directs to new window which will be appearing as shown below.

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-Mgp4eu5xaGEWm-XurSa%2F-MgpSeICOkIC4wEvjWBv%2FSuit.JPG?alt=media\&token=de11e8f8-6ae1-43a6-93ac-31f5c86949e8)

**STEP 2:** On the right corner Click on "**+**" icon and select **New Group**, it should appear as below.

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-MgtTlL-dpRHryqJwdVv%2F-MgtUDNO9nckm2hRhwDw%2FNew%20Group.png?alt=media\&token=6282b54e-953f-4b97-aeb3-7b0f602616da)

**STEP 3:** Fill the required details as shown in the below screenshot.

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-MgtTlL-dpRHryqJwdVv%2F-MgtUl5wLlaRiKJScsO1%2FGroup%20details.JPG?alt=media\&token=c5df93a4-2529-4270-ba37-a5c55a50893e)

* **Group Name:** The name could be any of the user choice.
* **Group Description:** Describe the purpose of the group.

**STEP 4:** After adding required details and then click on **Save**, the given **Group Name** would be saved and  it should be displayed in the Groups as shown below.

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-MgtTlL-dpRHryqJwdVv%2F-MgtVSlD4IayJTWzJLdK%2FGroups%20add.png?alt=media\&token=82a52408-14fa-42e6-85b5-69db6d37df83)

## Short Video

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-MkGRH7hW4z9LBB0llmC%2F-MkGSf8TwLupvzv7bCpo%2FCreating%20Group.gif?alt=media\&token=9bc1caa8-8550-4b48-9b0e-d331a1f8141d)


# Test Case

A Test Caseis a particular web page, with different web elements

## What is Test Case?

A **Functionality** is a particular web page, with different web elements. Here we connect the test data (excel File) in the functionality which is related to the web page.

## Step by step walkthrough

To add a Functionality kindly follow the below steps:

**STEP 1**: Click **Studio** on the Left Navigation Panel, it directs to new window. On the left corner Click on "**+**" icon and select **Add Functionality**, screen should appear as below.

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-Mgt04xbMHUxpnI91oLE%2F-Mgt2RxV1eOS-9pMdZyJ%2Fadd%20Functionality.png?alt=media\&token=791aff5b-3ccc-48dc-868a-2f125eb5bd72)

**STEP 2**: Fill the required details as shown in the below screenshot.

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-Mgt04xbMHUxpnI91oLE%2F-Mgt2bzQc71kBSDBAWel%2FFunctionality%20details.JPG?alt=media\&token=73540597-dd23-464d-9737-89fbab451a15)

* **Functionality Name:** The functionality name could be any of the user choice.
* **Functionality Type:** Select the type from the drop down as Web, API or Function depending on the requirement.
* **Testcase Excel File Name:** The Name given to the file should be same as the test data.
* **Testcase Excel Sheet Name:** Give the sheet name of the test data.
* **Description:** Write the description what this functionality is for.

**STEP 3**: After adding required details and then click on **Save**, the given **Functionality Name** would be saved in the Feature you have chosen in.

## Short Video

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-MkH6MW3CxBsvu2cl1w8%2F-MkH8-bKunKuU5u9EdGR%2FAdding%20Functionality.gif?alt=media\&token=f164826e-af64-48a4-be47-ccf83aa10232)

{% hint style="danger" %}
&#x20;Here the Excel file name and sheet name should be exactly same as the it is used in the test dat&#x61;**.**
{% endhint %}


# Function

Function is a reusable block of script code. Function can be called in a test case with executeFunction method. To avoid writing loops in your script you can use function with data table or a query.

You can pass data or data expression for any argument


# Data Table

Data Tables hold data set similar to excel sheet/database table. Typically used to hold configuration or a common data set that may used across multiple test cases

Data Table Access with Expressions

With Direct Row Number:  \[Data Table Name]:row no  eg: Persons:2

With Multiple  Row Numbers:  \[Data Table Name]:row no1, Row no 4, row no 5 eg: Persons:1,4,5

With Multiple Row Numbers with range:  \[Data Table Name]:row no1 - row no 5 eg: Persons:1-5


# Execution


# Test Case

A specification of input, a set of procedure, desired output is all part of a Test Case.

## What is a Test Case?

A specification of input, a set of procedure, desired output is all part of a Test Case.

For each functionality a excel sheet is linked and whenever a new test cases are added user have to click on the sync button or else newly added test cases in excel sheet will not be synced into the QATTS system.

Here in this section you can check the status of the Test Cases.

To search test cases you can click on the **Search Test cases** as shown below.

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-MhD2JKiznAmw_uoijIX%2F-MhDMK4cPNNHlktO8E6y%2FTestcases.png?alt=media\&token=54bbe3ce-50a2-4535-a4f5-fc8c55376dc5)

It opens a new window as shown below where you need to fill the required data and then click on **Search.**&#x20;

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-MhD2JKiznAmw_uoijIX%2F-MhDMh8PXv8lNq6V_mN9%2FTest%20cases2.JPG?alt=media\&token=04f2708a-3eff-4488-919f-b56c6707e865)


# Clients Summary

It is a mini dashboards to summarize the Test Cases status for each Client

It is a mini dashboards to summarize the Test Cases status for each Client. User can select the client and retrieve Test cases under the selected client. The Client Names are arranged according to selected Product, Code Branch.

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-MjiwszhDVSwKoemg_Ci%2F-MjmS9iIV5V5WLpVvyoy%2FClient%20Name.png?alt=media\&token=b7c6358d-dd82-446a-a59a-c25b38f817a4)

User can click on the required client name to display the test cases under a specific Client. The displayed page would appear as below.

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-MjiwszhDVSwKoemg_Ci%2F-MjmT3pX-oLpGc1iypDt%2FFunctionality.PNG?alt=media\&token=caf56252-f3d6-4fa7-8776-68712b74c068)


# Search and Manage

In this section you will get to know how to search test cases in QATTS.

In this section you will get to know how to search test cases in QATTS. To search test cases you can click on the **Search Test cases** and your screen should be visible as below.

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-Mk0yGvbDVRcClwTr9Dg%2F-Mk0zlexEEy0785mCrly%2FSearch%20Test%20Cases.PNG?alt=media\&token=9aac8c38-6a29-4540-8481-d142b68b5600)

Fill out the following details.

* **Feature:** Select the feature which you prefer to work on.
* **Functionality:** Select the functionality you prefer to work on.
* Test Case Ref:
* Life Status:
* Execution Status:
* Severity:
* **Client:** Choose the required client for the test cases.
* Approver By:&#x20;
* Action By: User who is executing the test case.
* Engineer By: user who has created the test case
* TMS id: Here user need to fill the Jira ticket reference number
* TMS Status:&#x20;

And click on **Search**, your desired test cases will be displayed.


# Context Parameters


# Details by Functionality

The Test cases are arranged according to the functionality name. User can change the test cases by changing the Product, Code Branch and Client.

The Test cases are arranged according to the functionality name. User can change the test cases by changing the Product, Code Branch and Client.

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-MjmTBX9jMM77IqDw6er%2F-MjmUJFXbZrAzMn7ydTf%2FFunctionality1.png?alt=media\&token=4bc6ecca-fd88-47e3-a09e-144897dd8eed)

If we go further into the page you can see and Erase and Sync option.

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-MjmTBX9jMM77IqDw6er%2F-MjmUa14kh_-cfXepx6U%2FSync1.PNG?alt=media\&token=066d9ec7-fc3c-4a04-abe5-c198bca0457f)

* **Erase**: By clicking user erases all the test cases. Use only if necessary.
* **Sync**: It syncs all the recently added data in the excel sheet to the QATTS.

User can narrow down the test data by selecting a feature.

## Short Video

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-MjmhJJBHjLqWPpuuevG%2F-MjmiI8c4pImVWplPl2s%2FFeature.gif?alt=media\&token=4048f377-fc6d-40ee-9766-787037f4794e)


# Sync

Sync helps you to update your recently edited Test case data.

**Sync** helps you to update your recently edited Test case data.

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-Mjm_GgXo33SpyoZg-mB%2F-Mjm_UemTaXB4gOPqPNW%2Fssync.PNG?alt=media\&token=200b4632-7be9-4897-bda7-62a3d27186f8)

To understand let us drive in a scenario, If an user have tested couple of test cases and not happy with the result and added few more test cases in the excel sheet. User can just click on the **Sync** button it retrieves and sync the excel sheet that being recently updated.

By syncing the test data you will be getting the below sync message.

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-MjmUwpzsYZdBhkvK4Q6%2F-MjmWBIzTivyMQ1kHolM%2FSync%20data.PNG?alt=media\&token=39c7f387-a301-440f-a75f-0c7c17a42281)

Sync Message tells what files are being updated and also displays the test location of the test cases.


# Test Suite

Test suite is a package that you make for certain groups of test cases

## What is Test Suite?

Test suite is a package that you make for certain group of test cases. Here you can give additional properties in the suite for the required test cases.&#x20;

Suite is collection of test case that intended to be used to test specified set of behavior.

## Step by step walkthrough

The following steps to be followed to create a **New Test Suite**.

**STEP 1**: Login to QATTS, In the Left Navigation Panel Click on **Test Suites** ----> **New Test Suite** as shown as below.

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-MhDNYrTZc6F98eKwbYu%2F-MhDOjUfwMkHtwLn8M27%2FTest%20Suite.png?alt=media\&token=6664c068-758a-45ea-9f59-5c0deb9b59aa)

**STEP 2**: After clicking on New Suite you should be able to see the below screen and fill out the required details.

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-MhDNYrTZc6F98eKwbYu%2F-MhDPMK5M1ZeW0x01nOQ%2FTest%20suite2.JPG?alt=media\&token=7b1203ab-58da-42ec-9b90-13f0769387b1)

**STEP 3**: Fill out the following details.

* **Suit Name**: You can give a suite according to your Project
* **Description**: Here write down the steps or what this suite is about.
* **Visibility**: Here you can choose between **Private** and **Public**.&#x20;
  * **Private** - The Suite is visible only to you.
  * **Public** - The Suite is Visible all who is working on the same Product.
* **Type**: Here you need to choose between **Automated** or **Manual**, by the name itself you can assume its automated or manual testing.
* **Clients:** Choose which client are performing the Test Cases on.
* **Functionality**: Need to choose the functionality which you want to Test.
* **Test Cases**: You can add number of test Cases you wish to perform.

And Click on **Add** and then **Save**, your suite will be saved.


# Create Suite

Step by step walkthrough on how to create suite

## Step by step walkthrough

The following steps to be followed to create a **New Test Suite**.

**STEP 1**: Login to QATTS, In the Left Navigation Panel Click on **Test Suites** ----> **New Test Suite** as shown as below.

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-MhDNYrTZc6F98eKwbYu%2F-MhDOjUfwMkHtwLn8M27%2FTest%20Suite.png?alt=media\&token=6664c068-758a-45ea-9f59-5c0deb9b59aa)

**STEP 2**: After clicking on New Suite you should be able to see the below screen and fill out the required details.

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-MhDNYrTZc6F98eKwbYu%2F-MhDPMK5M1ZeW0x01nOQ%2FTest%20suite2.JPG?alt=media\&token=7b1203ab-58da-42ec-9b90-13f0769387b1)

**STEP 3**: Fill out the following details.

* **Suit Name**: You can give a suite according to your Project
* **Description**: Here write down the steps or what this suite is about.
* **Visibility**: Here you can choose between **Private** and **Public**.&#x20;
  * **Private** - The Suite is visible only to you.
  * **Public** - The Suite is Visible all who is working on the same Product.
* **Type**: Here you need to choose between **Automated** or **Manual**, by the name itself you can assume its automated or manual testing.
* **Clients:** Choose which client are performing the Test Cases on.
* **Functionality**: Need to choose the functionality which you want to Test.
* **Test Cases**: You can add number of test Cases you wish to perform.

And Click on **Add** and then **Save**, your suite will be saved.

## Short Video

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-Mk_kT34af6olU1rvRNc%2F-Mk_ozVhyI7ounc2sLpM%2F5ePriI6TsW.gif?alt=media\&token=8b6c5278-0502-4f99-8847-058073c526a8)


# Test Run

Test Run gives the detailed log of the test cases which are running at present and have completed

## What is Test Run?

Test Run gives the detailed log of the test cases which are running at present and have completed. User can customize test runs search by selecting the Product and Code Branch.

## Step by step walkthrough

To create a Test case follow the below steps

**STEP 1**: Click on the Test Run in the Left Navigation Panel and Select Test Run as shown below.

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-MhJ2BunobPXPKQdsDf4%2F-MhJ3ScmKaT-b1o_cVvk%2FTest%20Run.png?alt=media\&token=cd1d470e-d391-4b2b-9fd7-883bc2de9abb)

**STEP 2**: Click on the New Test Run. and Select Automated or Manual depending on the requirements.

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-MhJ2BunobPXPKQdsDf4%2F-MhJ3uGQBOp_zWciwp5F%2FTest%20Run1.png?alt=media\&token=fbd9e55a-0cbb-4fa9-895b-45c38efe9759)

**STEP 3**: Fill the following details to execute a Test.

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-MhJ2BunobPXPKQdsDf4%2F-MhJ4OKRfIe_Z5HwajrC%2FTest%20Run2.JPG?alt=media\&token=429ce680-20e8-41ea-8021-410a7cda5957)

* **Test Run** - Any preferred name to given for the Test Execution.
* **Suite** - The required suite should be selected from the drop down list shown.
* **Deployment Name** - Select the required Deployment Name.
* **Build No**: Select the Build No from the given list.
* **Browser** - Select which browser you prefer to test on, if doing API Select No Browser.
* **Client** - Select the Client Environment.

**STEP 4**: After entering the required details click on **Execute** and your Test results will be displayed.


# Schedule Test Run


# Untitled


# Test Result

Here the test runs results are displayed with the functionality name.

Here the test runs results are displayed with the functionality name.

When you click **Test Result** on the Left navigation Panel the following screen appears.

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-MhIZAZRyNia28lX9UVk%2F-MhIZwa1sJWI_Ft2ha0z%2FTest%20Result.JPG?alt=media\&token=cadf6589-41c0-4b74-bca7-690351ae3109)

The above image is segregated by the Name of the Clients, If you click on the Clients it directs to another page displaying all the functionalities where you can check the results of the executed test cases in detail.

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-MhIZAZRyNia28lX9UVk%2F-MhI_H8cSWjP4injOYlM%2FTest%20Result1.JPG?alt=media\&token=d9131167-06ba-4c05-b8cd-d730a9760d64)


# Results by Clients

The Clients are arranged according to selected Product, Code Branch.

The Clients are arranged according to selected Product, Code Branch.

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-Mk10Nu7gqH4_397CjwI%2F-Mk16v2h-7rL_Aa_AL4m%2FTest%20Resuly.PNG?alt=media\&token=6f9d7330-57b5-4ae5-adbc-9e834c1fbb27)

User can click on the required client name to display the test cases under a specific Client. The displayed page would appear as below.

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-Mk10Nu7gqH4_397CjwI%2F-Mk17BTQ4AvGwYK02fq0%2FTest%20Result.PNG?alt=media\&token=ec85db9b-7f7b-4813-b738-df2c5eed5331)


# Results by Fuctionality

The Test cases are arranged according to the functionality name. User can change the test cases by changing the Product, Code Branch and Client.

The Test cases are arranged according to the functionality name. User can change the test cases by changing the Product, Code Branch and Client.

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-Mk10Nu7gqH4_397CjwI%2F-Mk17O8_TVbbUcU-48Ef%2FTest%20Result.PNG?alt=media\&token=41e04eab-d163-4263-afe4-531887d8bf93)

User can narrow down the test data by selecting a feature.

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-Mk10Nu7gqH4_397CjwI%2F-Mk17crxMiPfsx6h44h3%2FTest%20Feature.PNG?alt=media\&token=654bb45e-49c5-4c7e-988c-2c82476311c6)


# Build No

Learn how to create a Build

## Step by step walkthrough

To create a Build follow the below steps.

**STEP 1:** On the Left Navigation panel Go to **Settings**---> Click on **Builds.** You can see a **Add Roles** as shown below.

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-Mhs3pzcvZdmWzHWIG18%2F-Mhs4r40jkssOvNmPfjf%2FBuild.png?alt=media\&token=a35f7dd1-021e-4974-b973-c37b950bc7a9)

**STEP 2:** Click on Create User and fill out the required details.

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-Mhs3pzcvZdmWzHWIG18%2F-Mhs5DAzCkdF_cZlQbwh%2FBuild1.JPG?alt=media\&token=08122b00-ac8c-4633-8412-5667517a8410)

**STEP 3:** After filling out the required details, click on **Save** and the **Build No** will be saved and should be visible in the Build Summary.


# Reports


# All Failed Test Cases

All the failed test cases will be displayed in this panel depending on the selected Product, Client and Deployment.

All the failed test cases will be displayed in this panel depending on the selected **Product**, **Client** and **Deployment**.

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-MkBSZeO3VOiQD_T6G45%2F-MkBUGZugYcjuvdSOrYh%2Ffailed%20tests.PNG?alt=media\&token=f024c280-7e73-459c-98db-d62590b831a6)

User can click on the **Result Info** to get more information about the test case results.

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-MkBSZeO3VOiQD_T6G45%2F-MkBUhdc2qPY7JCu3PRk%2FTest%20info.png?alt=media\&token=c8c2c49e-b1eb-47dc-893e-d8f1b2962627)

![](https://1916024011-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MVX-yOtIHRnx7UtstUT%2F-MkBSZeO3VOiQD_T6G45%2F-MkBUl1axYXX3KgHuIYd%2FTest%20info1.PNG?alt=media\&token=07b66aa4-80f0-4dda-ad8e-3fca0d8719fc)


# Recently Failed Test Cases




---

[Next Page](/llms-full.txt/1)

