Selenium - Two - Pdf-Posalji
Selenium - Two - Pdf-Posalji
Selenium - Two - Pdf-Posalji
Instructions
Analyze and describe open-source tools used primarily for automated testing of the
front-end of web applications.
1. Analyze the current state of the tools, i.e., evaluate how can the tool be used in
different types of testing, how easy it is to integrate it with other testing tools for testing
web applications and what technical skills should the user of the tool have.
2. Compare and economically evaluate the benefits of implementing automated tests
with the selected tools.
3. Design a test plan with test scenarios comprising UI and API tests for the selected
demo application.
4. Implement automated tests for the given test scenarios with the tools that were
analyzed.
5. Evaluate the benefits and risks of using automation testing tools on a web application
from an economic perspective.
ANALYSIS OF
OPEN-SOURCE TOOLS
FOR AUTOMATED
TESTING OF WEB
APPLICATIONS
Samson Ošlakov
Citation of this thesis: Ošlakov Samson. ANALYSIS OF OPEN-SOURCE TOOLS FOR AUTOMATED
TESTING OF WEB APPLICATIONS. Bachelor’s thesis. Czech Technical University in Prague, Faculty
of Information Technology, 2022.
Contents
Acknowledgments viii
Declaration ix
Abstract x
Introduction 1
2 Concepts 5
2.1 End-to-end testing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.2 Functional testing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.3 Behavior-driven development . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.4 Test-driven development . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
iii
iv Contents
3.12.3 Set up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
3.12.4 Integration with other tools . . . . . . . . . . . . . . . . . . . . . . . . . . 45
3.12.5 Community and support . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
3.12.6 Disadvantages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
3.13 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
4 Quantitative analysis 47
4.1 Browser support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
4.2 Data formats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
4.3 Language support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
4.4 Dev platforms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
4.5 Reporting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
4.6 Selectors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
4.7 Web UI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
4.8 Community . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
4.9 Integration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
4.10 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
5 Test implementation 55
5.1 Introduction of the demo application . . . . . . . . . . . . . . . . . . . . . . . . . 55
5.1.1 Functionality . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
5.2 Test plan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
5.2.1 Scenario 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
5.2.2 Scenario 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
5.2.3 Scenario 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
5.3 Implementation of the test plan . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
5.3.1 Selenium . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
5.3.2 Appium . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
5.3.3 Karate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
5.3.4 SikuliX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
5.3.5 Cypress . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
5.3.6 Puppeteer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
5.3.7 Playwright . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
5.3.8 TestCafe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
5.3.9 Nightwatch.js . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
5.3.10 TestProject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
5.3.11 WebdriverIO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
5.4 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
Conclusion 87
3.1 Image showing how the Cucumber framework operates with tests written in Java
[6] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.2 Example of a default HTML page generated by Karate . . . . . . . . . . . . . . . 9
3.3 Image showing how the Selenium WebDriver testing process works [21] . . . . . . 14
3.4 Overview of how Selenium WebDriver worked before version 4 [22] . . . . . . . . 14
3.5 Overview of how WebDriver works since version 4 [22] . . . . . . . . . . . . . . . 15
3.6 Image of Selenium IDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
List of Tables
vi
List of code listings vii
viii
Declaration
I hereby declare that the presented thesis is my own work and that I have cited all sources of
information in accordance with the Guideline for adhering to ethical principles when elaborating
an academic final thesis.
I acknowledge that my thesis is subject to the rights and obligations stipulated by the Act
No. 121/2000 Coll., the Copyright Act, as amended, in particular, that the Czech Technical
University in Prague has the right to conclude a license agreement on the utilization of this
thesis as a school work under the provisions of Article 60 (1) of the Act.
ix
Abstrakt
Tato bakalářská práce popisuje a porovnává open-source nástroje pro automatizované testovánı́
webových aplikacı́. Práce se zaměřuje předevšı́m na nástroje použı́vané při automatizovaném
end-to-end a funkčnı́m testovánı́ webových aplikacı́ s grafickým uživatelským rozhranı́m.
Práce analyzuje 12 nástrojů pro automatizované testovánı́ webových aplikacı́ a diskutuje jejich
kvality a nedostatky. Nad rámec zadánı́ je provedena kvantitativnı́ analýza nástrojů s využitı́m
vážených parametrů pro kategorizaci nástrojů pomocı́ objektivnı́ch a subjektivnı́ch metrik, na
základě, kterých byly nástroje hodnoceny. Známky parametrů byly sečteny do celkového součtu
a nástroj s nejvyššı́m počtem bodů byl považován za nejvı́ce doporučený k použitı́. Výsledkem
je, že čtenář má k dispozici tabulku v Google sheets, kde bude moci pomocı́ úpravy vah u
jednotlivých zkoumaných parametrů určit, který nástroj by byl nejlepšı́ volbou ve zvoleném
přı́padě použitı́.
V praktické části je navržen a realizován testovacı́ plán pro demo aplikaci s využitı́m analy-
zovaných nástrojů. Jednotlivé implementace jsou porovnány. Nakonec jsou diskutovány přı́nosy
a nevýhody automatizace testovánı́ z ekonomického hlediska.
Zı́skané poznatky mohou být velkým přı́nosem pro vývojáře nebo jiné odpovědné osoby při
výběru vhodných nástrojů pro automatizované testovánı́ webových aplikacı́ na různých projek-
tech.
Abstract
This bachelor thesis describes and compares open-source tools for automated testing of web
applications. The thesis primarily focuses on the tools used in the automated end-to-end and
functional testing of web applications with a graphical user interface.
The thesis analyses 12 tools for automated testing of web applications, discussing their quali-
ties and shortcomings. Beyond the terms of assignment, a quantitative analysis of the tools using
weighed parameters to categorise tools using objective and subjective metrics on which were the
tools graded. Grades of the parameters were summed into total, and the tool with the highest
amount of points was considered the most recommended for usage. As a result, the reader has
access to a Google sheet table where he will be able to use the adjusted weights of the individual
parameters examined to determine which tool would be the best choice in the selected use case.
In the practical part, a test plan for a demo application is designed and implemented using
the analysed tools. The implementations are compared. Finally, the thesis discusses the benefits
and liabilities of test automation from an economic point of view.
The findings can greatly benefit developers or other responsible individuals in selecting the
right tools for automated testing of web applications on different projects.
x
xi
Keywords software testing, software testing automation, open-source, web application testing,
analysis of testing tools, E2E testing automation, functional testing automation
List of abbreviations
AI Artificial Intelligence. 80
API Application programming interface. 1, 8, 9, 11, 12, 14, 17–20, 27, 29–34, 37–39, 41–43, 45,
47, 51, 56, 58, 60, 61, 63, 67, 72–77, 83, 84, 88
app Application. 18, 19, 27
HTML Hypertext Markup Language. vi, 8–12, 28, 31, 35, 37, 40, 45, 75
HTTP Hypertext Transfer Protocol. 11, 18, 19, 56, 58, 74
IDE Integrated Development Environment. 12, 15, 17, 19, 21, 23–25, 29, 32, 33, 35, 37, 40, 45,
68, 69, 78, 80, 83, 84
JS JavaScript. 10, 12, 13, 22, 26, 28, 30–37, 39–41, 44, 45, 56, 60, 66, 71, 73, 77, 84
JSON JavaScript Object Notation. 9–11, 14, 17–19, 26, 36, 37, 39, 44, 67, 74
QA Quality assurance. 1, 5
xii
List of abbreviations xiii
UI User interface. 1, 8, 9, 42
XPath XML Path Language. 10, 20, 27, 31, 34, 36, 39, 41, 44, 73, 77, 78
It is widely known that testing is a crucial phase of the software development life cycle.
Manual tests are still widely used among many software companies. It is a common prac-
tice for software companies to employ a full-time Quality assurance (QA) team. This team is
responsible for preventing or at least minimising bugs in the software products. A standard
part of their work is creating a collection of “test plans” or step by step checklists that assert
whether a feature of a software project behaves as expected. The team would then manually
execute the test plans by clicking through the application or interacting with the software and
Application programming interface (API) with the appropriate tools every time a new update
or change was introduced into the system. They would then return the results of the test plans
to the engineering team for review and any further development to address issues. [3]
This process was slow, expensive, and error-prone because the testers from the QA team often
needed to learn how the system works and behaves in certain circumstances. That takes some
time, and even after the testers get to know the system well, they are prone to make typos or
omit steps in the test script or miss some bugs that could later gravely affect the user experience.
That is why companies started automating their test plans. Automated tests are performed
by a machine that executes a test script written using various test automation frameworks using
multiple tools. These tests can vary in complexity, from testing a single method in a class to
making sure that performing a sequence of complex actions in the User interface (UI) leads to
the same results. It is much more robust and reliable than manual tests, but the quality of
automated tests depends on how well were the test scripts written. Automation brings huge
gains for team efficiency and Return on investment (ROI) of QA teams. However, it also poses
a significant challenge in finding the right people who can write and maintain these tests. Major
changes in the code of the application can often break the automated tests, so the test scripts
need to be updated. [3]
Automated testing is a crucial component of Continuous integration (CI) and Continuous
delivery (CD). Most modern agile and DevOps software projects now include automated testing
in the project’s conception. It is a great way to scale the QA process as new features are added to
an application. Automated testing puts ownership responsibilities in the hands of the engineering
team. The test scripts are developed alongside regular project road-map feature development
and are automatically executed by CI/CD tools. Automated testing enables the QA team to
focus on more sensitive tasks like exploratory testing.
There are a lot of tools available in the test automation market. Choosing the right ones
for the job can be difficult. Sometimes it can be just one tool to cover the testing needs of the
project, but most of the time, it is a combination of wisely picked tools.
I have noticed that there have not been many comprehensive resources available that compare
these tools so that the developer can have a better time choosing the tools best suitable for his
project. This is the reason why I chose this assignment.
1
Introduction 1
This problem is addressed as the thesis analyses different tools for automated testing of web
applications. Because the domain of automation testing is vast, the thesis will mainly focus
on the tools used for automating functional and End-to-end (E2E) tests for web applications
through the Graphical user interface (GUI) of web applications.
The main tools under the scope of the analysis are free and open-source, but some of the
tools offer premium services for a fee. My main criteria for choosing the tools were popularity
and usefulness.
The primary sources are the official websites and documentation written for the tools. Other
sources include technical articles, forums and university publications.
2 Introduction
Chapter 1
This thesis aims to analyse tools for automated testing of web applications that mainly have a
GUI. The main focus will be testing the web applications on desktops across operating systems.
However, the thesis will also discuss testing web applications from mobile devices and using cloud
services.
The analysed tools are currently still maintained, so hopefully, the content of this thesis will
not get outdated soon, but that is unlikely due to the technological progress being so fast-paced
that new open-source tools for automation are likely to emerge.
After reading this thesis, the readers should be able to tell which tools are suitable for their
E2E testing automation needs by the terms they set using specified parameters. In this thesis,
one can also find recommendations on what to test in web applications and which part should
be automated, including the economic implications of test automation.
3
4 Aim of the thesis
Next comes the comparison of the using the tests examples. The chapter starts with a
description of the demo application for which were the tests written. Then it describes the test
plan for the application. The tools are then compared using their implementation of the test
plan.
In the next section, the thesis delves into the benefits and liabilities of automation testing
from an economic perspective.
At the end of my thesis, I evaluate the whole study.
Chapter 2
Concepts
5
6 Concepts
The following tools have been chosen for their popularity and usefulness in writing scripts for
automated testing of web applications.
In the following sections, the open-source tools to analyse in this bachelor thesis are intro-
duced. These tools are primarily used for automating functional and E2E tests.
All of the following tools are cross-platform, which means they can be used on Windows,
Linux and macOS. Most tools support browsers from the list below and can operate on browsers
in the headless mode except for SikuliX.
Google Chrome
Mozilla Firefox
Microsoft Edge
Google Chrome is currently the most popular browser on the internet, with more than half of
the browser market share belonging to Chrome. The current browser share can be viewed using
a link.1
3.1 Cucumber
Cucumber is a wildly popular tool to support BDD. [6] It provides two major features:
Gherkin syntax Helps with defining scenarios, features, and use cases. It follows a specific
Given-When-Then pattern like shown in the example 1. It can be described as a business
readable behaviour description language.
An open-source framework Translates the Gherkin steps to executable code that can be run
as tests. It is available in multiple languages. The list of supported languages can be found
on the installation website.2
Thus, Cucumber covers two stages of BDD: writing the use cases and automating the tests. They
can be found referenced in the Cucumber documentation as Formulation and Automation. [8]
1 https://gs.statcounter.com/browser-market-share
2 https://cucumber.io/docs/installation/
7
8 Analysis of test automation tools
The Cucumber framework uses “feature files” for describing tests using Gherkin. The feature
files are stored in files with a “.feature” filename extension, hence the name feature file. The
test steps in the feature file are then mapped onto functions written in the chosen programming
language. The functions that describe the logic of a test are called “glue” and are stored in “step
definition” files. [1]
Image shown in the figure 3.1 explains how the Cucumber framework operates on a test
written in Java using the JUnit library.
Figure 3.1 Image showing how the Cucumber framework operates with
tests written in Java [6]
It was first released in 2008 and is now under SmartBear Software company. The “Open”
version is still under active development by the team and the open-source community. Cucumber
has around 10 000 stars on GitHub [9] and around 10 000 questions on Stack Overflow. [10]
Cucumber Open is under the MIT License3 so it can be used commercially.
Cucumber also offers a premium version called “CucumberStudio”4 that offers more useful
features for BDD.
Cucumber can be used with all of the other tools subject to this analysis.
3.2 Karate
“Karate is the only open-source tool to combine API test-automation, mocks, performance-
testing and even UI automation into a single, unified framework. The behaviour-driven develop-
ment syntax popularised by Cucumber is language-neutral and easy for even non-programmers.
Assertions and HTML reports are built-in, and you can run tests in parallel for speed.” [11]
Karate was added to the list because it is an all-in-one framework that includes environment
3 https://github.com/cucumber/cucumber-jvm/blob/main/LICENCE
4 https://cucumber.io/tools/cucumberstudio/features/
Karate 9
switching and CI integration. Karate was first created for API testing, but now it can do more
than that.
Internet Explorer
Safari
3.2.1.4 Reporting
Karate offers a great default HTML report that looks good and tells all of the essential details
about the test. An example can he found in the figure 3.2.
Karate has an option for the JUnit XML output from the parallel runner that can determine
the status of the build as well as generate reports that can be integrated with most reporting
and CI tools. [14]
It has examples for the set-up of reporting and an example for third-party libraries that can
be easily used to generate excellent looking reports from the JSON output of the parallel runner.
An example of a commonly used library with Karate is the “cucumber-reporting” open-source
library. [13]
Karate has adequate traceability for the errors that might occur during tests. Detailed wire-
protocol logs can be enabled in line with the test steps in the HTML report. [12]
Scenario: Try to create a new reservation with an empty body and fail.
* def req =
"""
{}
"""
Karate contains broad assertion abilities. For easy troubleshooting, the failed tests report
which web element and path are not as anticipated. Karate’s match assertion command and
other UI assertions core capabilities can use regular expressions (regex).
Mimicking standard user input types like keyboard key combinations and mouse actions is
possible in Karate.
Karate allows intercepting HTTP requests made by the browser and uses Karate mocks to
stub/modify server responses and replace HTML content. [14]
3.2.1.12 Multifunctionality
From all of the functionalities mentioned afore, it can be assessed that Karate is a unique multi-
purpose testing framework which has a goal to keep things simple and bundled together.
All of this is helpful in case using multiple tools for testing automation is not favourable, as
it can often be demanding to teach each team member to use multiple tools.
3.2.3 Set up
To set up the Karate framework, one needs a computer with macOS or Windows or Linux and
Java Development Kit (JDK) or Java SE version 8 or later to execute the Karate standalone.
In case of the need to develop and debug the tests, an Integrated Development Environment
(IDE) should be installed. Then it would be best to have a project management tool for Java,
either Maven or Gradle.
Karate integrates well with CI/CD tools because of the standalone version. It also has Spring
Boot support.
Karate is integrable with GitLab and GitHub actions.
3.2.6 Disadvantages
One of the disadvantages is that the main contributor to Karate is the author himself. The
progress can be slow if one person mostly maintains the project.
The fact that it uses its syntax can be offsetting for someone because the interoperability
with Java and JS can be problematic and bothersome.
Since the tool is relatively new and not used by many people, encountering problems that
have not yet been solved or at least asked on Stack Overflow is possible, so fixing them or asking
how to fix them is a personal responsibility.
3.3 Selenium
Selenium is probably the most widely-known and used suite of tools for testing web applications.
[19] It is often used for regression testing. The suite consists of:
Selenium IDE Is used for recording tests, executing, debugging, and generating scripts.
Selenium WebDriver Drives a browser natively, as a user would locally or on a remote machine
and marks a big step forward in browser automation. Selenium WebDriver refers to both
the language bindings and the individual browser controlling code implementations. [20] It
is designed as a simple, object-oriented and more concise programming interface.
Selenium Remote Control Is an old version of WebDriver that had to be used with an old
version of Selenium Grid.
Selenium Grid Works as a central point for managing tests on different devices and running
tests in parallel.
Figure 3.3 Image showing how the Selenium WebDriver testing process
works [21]
With Selenium 4, the JSON Wire Protocol is no longer supported, as can be seen in the
figure 3.5. For backward compatibility, Selenium provides Java bindings and Selenium Server.
With a focus on the W3C protocol, Java bindings will persist in being backwards compatible so
that tests working on Selenium 3 do not break on Selenium 4. [22]
Selenium 15
Internet Explorer
Safari
Opera
3.3.1.5 Reporting
Reporting relies on the testing framework and third-party reporting libraries. Since Selenium is
prevalent numerous reporting libraries support it.
The execution speed was greatly improved by getting rid of the JSON Wire Protocol. The
methods are named and parameterised nicely, so the scripting process is genuinely intuitive.
3.3.1.9 Multifunctionality
The functionality of Selenium revolves around the WebDriver and support for it. Other tools
and frameworks need to be used in order for it to function correctly. The performance or API
testing is not part of Selenium, so other tools need to be used.
3.3.3 Set up
The setup process differs depending on the programming language chosen for the test scripts.
Nevertheless, one should install an IDE and the prerequisites for the language chosen for
the implementation. To use Selenium, one has to install the web drivers for each browser and
configure the pathway for them.
Selenium Grid needs to be configured for parallel testing, and nodes need to be connected to
it. The process is not trivial.
12 https://www.selenium.dev/documentation/
18 Analysis of test automation tools
3.3.6 Disadvantages
The test scripts can take a significant amount of time to write and maintain. To debug the code
or get to the problematic part, one needs to rerun the test.
The JSON Wired Protocol caused problems in the tests because it added an extra layer of
HTTP communication.
It needs to be used alongside many other tools and frameworks to test effectively.
3.4 Appium
Appium is an open-source tool for automating native, mobile web, and hybrid applications on
iOS and Android mobile platforms and the Windows desktop platform.
The native apps are applications written using the iOS, Android, or Windows SDK. Mobile
web apps are web apps accessed using a mobile browser. [28]
The subsequent four principles summarise the principles of Appium:
1. “You shouldn’t have to recompile an app or modify it in any way to automate it.”
2. “You shouldn’t be locked into a specific language or framework to write and run tests.”
3. “A mobile automation framework shouldn’t reinvent the wheel when it comes to automation
APIs. (it uses Selenium WebDriver)”
4. “A mobile automation framework should be open source, in spirit and practice as well as in
name!” [28]
To uphold the first principle by using the automation frameworks developed by the creators
of each platform (Apple, Google, Microsoft), implying that one does not have to compile any
additional code with an app.
The second principle is upheld by wrapping the frameworks into one API, the WebDriver API.
As discussed with Selenium, one can use any client implementation and test frameworks they
choose because Appium and WebDriver clients are automation libraries and not test frameworks.
13 https://github.com/SeleniumHQ/selenium/blob/trunk/LICENSE
Appium 19
The third principle relies on WebDriver because it became a standard for automating web
browsers. Creating a new standard for mobile browsers would be a waste of time. Instead, the
protocol was extended with extra API methods useful for mobile automation.
The last one speaks for itself because Appium is open source. [28]
3.4.1.4 Reporting
Reporting relies on the testing framework and third-party reporting libraries. Many reporting
libraries support Appium.
Beware when using Appium. One needs to use these client libraries instead of the regular
WebDriver client. [28]
Accessibility ID
Class name
ID
Name
XPath
Image
Android UiAutomator
Details about the selectors can be found on the Appium elements page.15
3.4.1.8 Multifunctionality
The functionality of Appium revolves around the automation of mobile applications UI and
support for it.
Other tools and frameworks need to be used in order for Appium to function correctly,
including emulators, test frameworks, and reporting libraries.
The performance or API testing is not part of Appium, so other tools need to be used.
15 https://appium.io/docs/en/commands/element/find-elements/
Appium 21
3.4.3 Set up
The setup process depends on the programming language and the mobile device chosen for the
test scripts.
Regardless, one should install an IDE and the prerequisites for the language chosen for the
implementation — getting an existing iOS or Android device or installing and configuring an
emulator, choosing the proper testing framework and configuring test scenarios. To do mobile
web testing, one has to install the web drivers for each browser and configure the pathway for
them.
Appium server needs to be installed and configured to run the tests.
3.4.6 Disadvantages
The tests can take a significant amount of time to write and maintain due to the complexity of
the configuration and maintenance of devices and emulators.
To debug the code or get to the problematic part, one needs to rerun the test, which can be
very slow when using emulators.
It needs to be used alongside many other tools and frameworks to test effectively.
3.5 SikuliX
“SikuliX automates anything you see on the screen of your desktop computer running Windows,
Mac or some Linux/Unix. It uses image recognition powered by OpenCV to identify GUI
components. This is handy in cases when there is no easy access to a GUI’s internals or the
source code of the application or web page you want to act on.” [36]
3.5.1.4 Reporting
Logs are used in SikuliX IDE or when it is used as a library. Further reporting needs to be
configured using other libraries.
RobotFramework text-scripts
SikuliX can be used in Java and with any Java aware programming/scripting language. [36]
Click on an element
Find an element
3.5.1.8 Multifunctionality
It simply automates the GUI using image recognition to find elements and by simulating simple
user commands.
3.5.3 Set up
SikuliX needs an actual screen running the application under test or at least an equivalent virtual
solution. SikuliX is only available on devices running Windows, macOS or Linux Moreover, it
requires Java version 8 or higher. Then it is up to the choice whether to use SikuliX IDE or use
it as a Java library.
It has around 900 questions on Stack Overflow, [38] which is not much. SikuliX gained around
1 800 stars and 2 400 used by statistics on GitHub. [39]
Users seeking support can use the SikuliX launchpad.21
3.5.6 Disadvantages
Scripts written using SikuliX IDE cannot be exported to code, only to runnable JAR files.
SikuliX requires an actual screen or a virtual one. Script using reference images captured for
a screen with a specific resolution often does not work on another screen or another resolution.
It can be integrated into a sensible advanced test plan only by using Java alongside many
other tools and frameworks to test effectively.
Similar to Karate, the project is maintained primarily by one person.
3.6 Cypress
Cypress is a great front end testing tool built for the modern web. It consists of a free, open-
source, locally installed Test Runner and a Dashboard Service for recording tests. [40] Cypress
is a JavaScript testing framework based on Chai library and Mocha framework.
3.6.1 Mocha
Cypress has adopted BDD syntax from Mocha to fit perfectly with both integration and unit
testing. Mocha offers outstanding async support. Cypress has extended Mocha and fixed un-
pleasant functionalities. These fixes are all fully transparent. All of the tests in Cypress sit on
the fundamental saddle Mocha provides, specifically:
describe()
context()
it()
before()
beforeEach()
afterEach()
after()
.only()
.skip() [41]
3.6.2 Chai
Chai provides Cypress with the ability to write assertions quickly. It offers readable assertions
with exceptional error messages. Cypress extends this, fixes several typical catches, and envelops
Chai’s DSL using subjects and the .should() command. [42]
21 https://answers.launchpad.net/sikuli
26 Analysis of test automation tools
Spies, Stubs, and Clocks – verification of the behaviour of functions, server responses or
timers
Cross-browser Testing
3.6.3.4 Reporting
Cypress uses the spec reporter to output information to STDOUT in the default configuration.
Reporters built for Mocha can be used with Cypress. Teamcity and JUnit are the two most
common third party reporters for Mocha are built into Cypress.
Creating custom reporters or using any third party reporter is supported in Cypress.
There is also a possibility of merging reports across specs and using multiple reporters. [43]
The Cypress Dashboard is a service that provides access to recorded test results. Typically
when running tests from a CI provider. The Dashboard provides insight into what transpired
when the tests ran. It is possible to add more additional record keys. The Dashboard is free to
use for non-commercial open-source public projects. [44]
cy.get(selector)
cy.get(alias)
cy.get(selector, options)
The cy.contains() can be used to select elemetns too. It can select elements that match a
regular expression, text, selector or even contain a number for example cy.contains(2) will select
the first element that contains number 2.
Cypress can work with the shadow DOM and iFrames, though working with iFrames is not
very intuitive. Cypress can use multiple tabs. Asserts are very intuitive.
It features retries and auto waits, but they are not ideal and sometimes do not react well to
some UI changes. This can be fixed by using manual waits.
Cypress can sometimes select multiple elements from a dynamic element, which can sometimes
be problematic.
Cypress offers useful callback functions to create aliases, debugging functions and closures
that enable to keep references around to refer to work done in previous commands. [47]
Sharing context between tests is possible using cy.fixture(). The call is used for loading a
fixed set of data located in a file.
Cypress features multiple events and ways of handling them. Like listening for uncaught
exceptions and preventing Cypress from failing the test. Listening for alert or confirm calls and
changing the confirm behaviour. This is primarily used to handle alerts in browses. Listening for
window:before:load events and modifying the window before any app code is executed between
page transitions. Listen for command:retry events to comprehend why Cypress is internally
retrying for debugging intentions. [48]
File uploading can be done only after installing a plugin.
3.6.3.8 Multifunctionality
Cypress enables writing E2E, integration and unit tests. [40]
Cypress supports UI and API testing and can test some performance aspects but probably
does not cover all of the demands for performance testing.
Cypress can be considered a multifunctional tool for testing modern web applications.
28 Analysis of test automation tools
Values should be different across multiple environments: (dev, staging, qa, prod)
Cypress also has OS-level variables. Environment variables can be created and modified easily
in 6 different ways:
3. CYPRESS * (OS-level)
4. –env (CLI)
5. Plugins
3.6.5 Set up
Cypress is a desktop application that needs to be installed.
The application supports these operating systems:
macOS 10.9 and above (64-bit only)
Linux Ubuntu 12.04 and above, Fedora 21 and Debian 8 (64-bit only)
Windows 7 and above (64-bit only)
Node.js is 12 or 14 and above is required for installing Cypress using npm. Alternatively, it
can be directly downloaded. [51]
3.6.8 Disadvantages
One disadvantage could that that Cypress is mainly for JS.
Some of the capabilities of Cypress in the premium version are available for free in other
tools.§
File uploading can be done only after installing a plugin.
3.7 Puppeteer
Puppeteer is a Node.js library which provides a high-level API to manage Chrome or Chromium
over the DevTools Protocol. Puppeteer operates in the headless mode by default but can be
configured to operate full (non-headless) Chrome or Chromium. [59]
3.7.1.4 Reporting
Puppeteer does not support reporting. It only outputs logs and error traces. Integrating Pup-
peteer into testing requires using it with a JS testing framework.
Type selector
Class selector
ID selector
Attribute selector
Puppeteer also uses Selectors API. Navigation in Puppeteer is done using the page object.
Things like opening a new page, going back and forward in the page navigation history and
reloading a page.
By default, the viewport is 800x600px and can be set to a different value.
Emulating a device can be done by setting the user agent to a specific device and setting the
viewport accordingly.
Puppeteer can get the HTML source of a page and can handle multiple tabs, iFrames and
shadow DOM. However, it is a bit challenging. Using eval() it is possible to get an object from
DOM and perform actions on it. Puppeteer allows usingJS functions in the page context. Mouse
and keyboard operations are available in Puppeteer. Puppeteer can focus on elements and type
values into them. Generating a PDF from a page can also be done using Puppeteer. Setting the
content of a page is possible too.
Waiting for events and handling them is also part of Puppeteer. It is often used on alerts.
Puppeteer extends the EventEmitter object from Node.js. [61]
Pupetteer has no asserting capabilities. They have to be added using other libraries.
3.7.1.8 Multifunctionality
Puppeteer can be used in API testing, but it was not created. It can intercept the GET request for
the website, change it to another request, and add the body and awaiting the script constructed
is wired. Other tools should be used for the purpose.
3.7.3 Set up
To set up the development process in Puppeteer requires a desktop with Windows, macOS or
Linux. The newest version of Node.js and an IDE.
3.7.6 Disadvantages
Puppeteer has no asserting capabilities.
Requires a lot of work and integration with other tools to be used it as a proper testing tool.
Puppeteer is not very beginner-friendly.
3.8 Playwright
Playwright is a framework for automated web testing. It allows testing Chromium, Firefox and
WebKit with a single API. Playwright enables cross-browser web automation that is ever-green,
capable, reliable and fast.[63]
25 https://pptr.dev/
26 https://github.com/puppeteer/puppeteer/blob/main/LICENSE
Playwright 33
Cross-platform Test on Windows, Linux, and macOS, locally or on CI, headless or not.
Cross-language] Use the Playwright API in TypeScript, JS, Python, .NET, and Java.
Test Mobile Web Native mobile emulation of Google Chrome for Android and Mobile Safari.
The same rendering engine works on the Desktop and in the Cloud.
Auto-wait Playwright waits for elements to be actionable prior to performing actions. It also
features a rich set of introspection events. Combining the two eliminates the need for artificial
timeouts – the primary cause of breakable tests.
Web-first assertions Playwright assertions are explicitly created for the dynamic web. Checks
are automatically retried until the necessary conditions are met.
Tracing Configure test retry strategy, capture execution trace, videos, and screenshots to elim-
inate flakes.
Trusted events Hover elements, interact with dynamic controls, and produce trusted events.
Playwright uses real browser input pipeline indistinguishable from the actual user.
Test frames, pierce Shadow DOM Playwright selectors pierce shadow DOM and allow en-
tering frames seamlessly.
Multiple everything Test scenarios that run multiple tabs, multiple origins and multiple users.
Create scenarios with different contexts for different users and run them against a server, all
in one test.
Browser contexts Browsers run web content belonging to different origins in different pro-
cesses. Playwright is aligned with the architecture of the modern browser and runs tests
out-of-process, making Playwright free of the typical in-process test runner limitations.
Log in once Playwright can save the authentication state of the context and reuse it in all the
tests.
Codegen Playwright can generate tests by recording user actions and saving them in any lan-
guage.
Playwright inspector Inspect page, generate selectors, step through the test execution, see
click points, and explore execution logs.
Trace Viewer Capture all the information to investigate the test failure. Playwright trace
contains test execution screencast, live DOM snapshots, action explorer, test source, etc. [63]
3.8.1.3 Reporting
By default, Playwright generates an excellent HTML web page report with all necessary infor-
mation about the executed tests, including everything about tracing described in the features.
Debugging tests are made much easier with the default reporter and other valuable tools Play-
wright provides. Multiple reporters can be used, and it can aggregate results from the sharded
executions into one. The reporter can be easily changed and configured in the configuration file.
3.8.1.6 Multifunctionality
Playwright is a reliable multifunctional tool for testing modern web apps. It supports API
testing, and the tests in Playwright look very similar to the ones in Cypress. It can also be used
in performance testing a bit but not in most aspects.
3.8.3 Set up
Playwright requires a desktop with Windows, macOS or Linux. The newest version of Node.js
and an IDE.
3.8.6 Disadvantages
It is relatively new and does not offer official integrations for Jira, Slack or Microsoft teams.
Playwright does not support DDT by default.
3.9 TestCafe
TestCafe is a JS framework running on Node.js, and it aims to simplifiy E2E testing.
3.9.1.4 Reporting
TestCafe has following built-in reporters:
spec
list
minimal
xUnit
JSON
The default reporting setting is set to spec. It primitively reports to the CLI, so another reporter
should probably be configured instead. A custom reporter can be created to fulfil one’s needs.
The community has developed custom reporters for Slack, NUnit, TeamCity and Tesults. [73]
Smart assertions that can do retries. For asserting the BDD inspired expect method is used.
Regex can be used for matching text. Page element properties can be accessed for assertion. [76]
TestCafe has a speed variable that can be changed in the configuration to speed up or slow
down the pace of tests. TestCafe features request mocking and server-side caching to speed up
some parts of the tests.
Roles can be used for user authentication. It takes data from cookies, sessionStorage and
localStorage. [74]
3.9.1.7 Multifunctionality
The functionality of TestCafe revolves around user E2E testing. It does not support API testing
and probably should not be used for performance testing.
3.9.3 Set up
To set up TestCafe, one should possess a desktop with Windows, macOS or Linux, and have the
newest version of Node.js, IDE and some time to read the documentation, import commands
from GitHub, and configure the framework to work well.
3.9.6 Disadvantages
TestCafe does not create the configuration file upon installing from npm.
Documentation needs to be read extensively before starting development.
The selector object is complicated initially, and importing selectors from GitHub is not ideal.
3.10 Nightwatch.js
NightwatchJS is an integrated, easy to use, E2E testing solution for browser-based applications
and websites and is running on Node.js. It uses the W3C WebDriver APIto perform commands
and assertions on DOMelements.
NightwatchJS has a clean and simple syntax so that tests can be written swiftly. It comes
with a built-in test runner, it has support for page objects within the framework, and it can be
easily extended to create items like custom reporters.[83]
Cloud Testing Support Works with BrowserStack out of the box and other clouds can be
easily added.
Continuous Integration JUnit XML reporting is built-in for integrating tests in the build
process with systems such as Teamcity, Jenkins, CircleCI etc.
Plugin API Flexible command and assertion framework makes it easy to implement custom
plugins and extend the built-in commands and assertions APIs. [83]
28 https://github.com/DevExpress/testcafe/blob/master/LICENSE
Nightwatch.js 39
3.10.1.3 Reporting
By default, NightwatchJS reports into the console, which can be changed using third party or
custom reporters.
.assert Upon failing an assertion, the test terminates, skipping all other assertions.
.verify Upon failing an assertion, the test logs the failure and resumes with further assertions.
Negate assertions are available for both versions of calls to negate the assertion logic. For ex-
ample, browser.assert.not.visible(’.visible’) should fail because the element is visible even though
we wanted it not to be visible.
Assertions can automatically retry, and timeout can be configured. [87]
3.10.1.6 Multifunctionality
NightwatchJS is a good E2E testing tool, and it is not made for API and performance testing.
40 Analysis of test automation tools
3.10.3 Set up
The set-up process is identical to TestCafe and Playwright.
3.10.6 Disadvantages
It is only avalivable in JS.
Switching between XPath and CSS selectors should be removed, and the selectors should be
united.
The documentation could be made better for exploration.
3.11 TestProject
TestProject is a great free E2E automation platform for web, mobile, and API testing that is
built on top of Selenium and Appium.
Most testing can be done using TestProject from the browser on the platform, but there is
also an offline version available if storing data in the cloud is a problem.
Full team collaboration Test automation works best when the whole team can work together
on the same platform. TestProject makes sharing tests between team members straightfor-
ward and simple
Extensibility There is a library of shared add-ons available to help extend the default capabil-
ities of TestProject. Teams of people can also create their add-ons to simplify the work.
Integration into existing workflows TestProject has an API that can run within existing
continuous integration workflows. It also has a developer SDK that allows creating or im-
porting existing tests that users might have into the platform.
Cross Browser and Cross Platform Creating and running mobile tests (Android and iOS)
is possible. TestProject can be installed on any Windows, macOS and Linux. It only takes a
quick install to access testing on all connected platforms and browsers instantly.
Reliable Technology TestProject uses reliable and proven technology like Selenium and Ap-
pium for a robust and well-understood way of interacting with web pages.
Free! The Free plan that TestProject offers is unparalleled in test automation in terms of features
and capabilities. TestProject is a powerful and fully-featured product that anyone can use
for free. [93]
3.11.1.4 Reporting
Reporting is done by default, and the reports look astonishingly professional. The reporting
menu is described in detail with images in the implementation part of the thesis.
3.11.1.8 Multifunctionality
TestProject is a multifunctional tool as it can be used in API testing using cleverly designed add-
ons with commands in which asserting the response and saving the output can be configured. It
can also test mobile applications and allows offline and online development.
3.11.3 Set up
Firstly, an account must be created for TestProject. Then a TestProject Agent must be down-
loaded and installed on the selected device along with the browsers. After the installation, the
Agent should be configured and registered to the created account with an API key. The setup
is ready, and tests can be created and executed. [96]
3.11.6 Disadvantages
Using TestProject in the cloud mode can be a problem when under maintenance. The tests are
inaccessible.
Importing tests to the platform can be challenging.
3.12 WebdriverIO
WebdriverIO is a modern Node.js E2E test automation framework that allows running tests based
on the W3C WebDriver protocol or Chrome DevTools Protocol and Appium. [101] WebdriverIO
offers third-party integrations that make testing and debugging a lot more efficient. [102]
30 https://github.com/testproject-io/java-opensdk/blob/master/LICENSE
44 Analysis of test automation tools
3.12.1.4 Reporting
WebdriverIO reports to the console by default but comes with a vast list of reporters that can be
easily configured instead, like JUnit, Video, HTML, JSON and Mochawesome Reporters. The
list is far from over. [103]
3.12.1.8 Multifunctionality
The primary purpose of WebdriverIO is E2E testing which is why it cannot be used in API
testing. It is integrable with PerformanceTotal. [109] Google Lighthouse can also be
integrated using the Devtools service. [110] Both integrations enable measuring performance
during testing, but that does not make WebdriverIO a performance testing tool because it lacks
functionalities.
3.12.3 Set up
The setup is analogous to other JS frameworks. It requires a desktop with a suitable operating
system and having Node.js at least v12.16.1 or higher installed. [113]
It has around 1 500 questions on Stack Overflow, [118] which is a bit less than TestCafe and
NightwatchJS.
WebdriverIO gained around 7 500 stars and 40 700 used by statistics on GitHub. [102]
Help can be found on Stack Overflow, Slack, Gitter and GitHub discussions. [119]
3.12.6 Disadvantages
The syntax of WebdriverIO can be confusing for beginners.
No reliable test recording tools are available.
It needs to be initially configured a lot to be valuable.
3.13 Summary
In this chapter, the tools were analysed in-depth on their capabilities and shortcomings.
Cucumber has an interesting approach to testing with its feature files and function mappings,
but it is definitively not for everyone. Each team should decide if it is worth it for them. I
would not recommend it, as writing the functions matching specific steps is constraining and
bothersome.
Selenium and Appium have presented themselves as valuable tools that drive other tools and
frameworks. Selenium was used in Nightwatch.js, TestProject and WebdriverIO, and Appium
was used in Karate, TestProject and WebdriverIO.
Karate has shown that it is a jack of all trades that simplifies syntax and tries to keep all
testing within one framework.
SikuliX emerged as a helpful accessory that can be integrated into a custom Java testing
framework with other tools.
TestProject is an unbelievably beneficial beginner-friendly tool that probably beast most of
the tools in terms of the quality of functionalities in its default settings. It appeals to me the most
from all of the analysed tools. Though its strength is its weakness, having everything available
on the cloud is great, but it is a free service, so security and availability can be concerning.
However, when set up in the offline mode, a part of its functionality and simplicity is traded for
configuration and data management.
Regarding JS frameworks, Cypress and Playwright are the most developer-friendly, advanced,
and popular. If having a lot of different integrations and services readily available is an essential
factor for selection, then WebdriverIO would be a great candidate.
Nightwatch.js has exciting capabilities, but I would not choose it over Cypress and Playwright
due to the development experience that can be had with those tools.
TestCafe did not impress me with a missing XPath selector and other parts of its func-
tionalities. Coding selectors by making operations with DOM can be a memorable exploratory
experience, but not when the goal is to write a test, then not so much.
Concerning fact can be that Cypress and TestCafe offer premium versions of their products
that have functionalities that other open-source frameworks offer for free, like test recording and
professionally looking reporting. The developers might focus on the premium aspect more than
the open-source one, and the tool might start to deteriorate in the eyes of the community.
Chapter 4
Quantitative analysis
For the quantitative analysis part of the thesis, a decision was made to create a Google sheet
table to compare the tools using weighted parameters. These parameters will try to categorize
a tool using objective and subjective metrics on which should be the tools graded.
The grades are then summed into total, and the tool with the highest points is considered the
most recommended (with the selected weights). The explanation for grading of each parameter
and the entire table can be found using a link.1
Explanation for chosen parameters:
Browser support In E2E, testing a web application’s browser support is crucial. More browsers
supported means more points for the tool.
Test recording tool It is very convenient for the developer of the test scripts if the tool allows
him to record his test as if he was the actual user of the app and just recorded scenarios. It
is a massive bonus if the tool offers a test recording capability. The better the recording tool
is, the more points it gets.
Required technical knowledge If the tool is hard to use, configure or has a steep learning
curve, it gets fewer points.
Supported data formats Many tests use data for input and output, which is especially im-
portant in DDT. The more formats they support, the better points they get.
Reporting Reporting is paramount for the testing process. The reports need to be in a suitable
format and preferably exportable.
Language support This parameter is essential if the codebase should be based in a specific
language or if having an option to write tests in many languages is advantageous.
Parallel testing This parameter is crucial for the rapid execution of the tests.
Web UI automation This is an integral part of the UI aspect of the test automation. It grades
the tools on how they handle certain parts of web elements and other aspects of UI testing.
API testing If the tool includes API testing, it gets more points. They get fewer points if API
tests can be run in the same script but using different libraries.
Performance testing If the tool includes performance testing, it gets more points. They get
fewer points if performance tests can be run in the same script but using different libraries.
1 https:
//docs.google.com/spreadsheets/d/1mzyTKND-6bCwpxybEJpuiv5uQWvMIPGpBKQxkoqyzf8/edit#gid=699299515
47
48 Quantitative analysis
Development platform variability Development platforms are Windows, macOS, and Linux.
Point per supported platform.
Environment configuration Meaningful category when it is essential to run tests in different
environments like VM, Cloud, Desktop, Mobile, Emulator, or it is essential to configure
different parameters.
Set up difficulty The harder it is to install the prerequisites and configure the run and devel-
opment environment, the fewer points it gets.
Maintenance How hard is it to maintain the tests, configurations, and devices. The harder it
is, the fewer points it gets.
Integration with other useful dev tools This is a vital category because, in a modern envi-
ronment, the tools should be integrable with many other tools like CI/CD or communication
tools.
Community/Support This parameter rates the tool by downloads, community, age and com-
pany size.
Screenshots and Video recordings of tests This parameter is useful for reporting and de-
bugging.
Multifunctionality This parameter is vital if it is crucial to have one tool for everything and
minimize the need to use many different tools for each part of the testing.
Documentation and test examples This is important, especially if a user needs to get started
with the tool or needs to find out how the tool works. The more convenient the documentation
and vast the examples are, the more points for the tool.
Selectors This is also an important parameter that touches on Web UI automation. The more
selectors the tools support or if it has any other exciting capabilities with selecting web
elements, the more points it gets.
Data type Karate Selenium Cypress Sikuli and Appium Playwright Puppeteer TestCafe Nightwatch.js TestProject WebdriverIO Weight
SikuliX
CSV 2 1 1 1 1 1 1 1 1 2 1 1
JSON 2 1 2 1 1 2 2 2 2 2 2 1
XML 2 1 1 1 1 1 1 1 1 2 1 1
YAML 2 1 2 1 1 1 1 1 1 2 1 1
Text files 1 1 2 1 1 1 1 1 1 2 1 1
Sum 9 5 8 5 5 6 6 6 6 10 6
4.5 Reporting
Table 4.4 shows tools rated on their reporting capabilities like logging and showing test steps
having an excellent report with graphs, and having the ability to export the report.
The first two parameters were graded 0 or 1 depending on whether the tool supported the
feature or not. The other parameters were rated on an integer scale from 0 to 2, depending on
the quality of supportability.
Reporting type Karate Selenium Cypress Sikuli and Appium Playwright Puppeteer TestCafe Nightwatch.js TestProject WebdriverIO Weight
SikuliX
Logs 1 1 1 1 1 1 1 1 1 1 1 1
Test steps 1 1 1 0 1 1 0 1 0 1 1 1
Graphs 1 1 1 1 1 1 1 1 1 2 2 1
Report format 2 1 1 1 1 2 1 1 1 2 2 1
Exporable report 1 1 1 1 1 1 1 1 1 2 1 1
Sum 6 5 5 4 5 6 4 5 4 8 7
4.6 Selectors
The tools are rated on their selector capabilities in the figure 4.5.
One point is given to the tool for supporting the following type of selectors: CSS selectors,
XPath selectors, Images (using image recognition), Selecting relative to some elements, Mobile
app selectors and Desktop app selectors. If the selector is not supported, 0 points are given.
50 Quantitative analysis
The “custom useful selectors” parameter is rated from 0 to 2 points based on the subjective
experience of the benefit and sophistication of the custom selectors.
Selector Karate Selenium Cypress Sikuli and Appium Playwright Puppeteer TestCafe Nightwatch.js TestProject WebdriverIO Weight
SikuliX
CSS selectors 1 1 1 0 1 1 1 1 1 1 1 1
XPath selectors 1 1 1 0 1 1 1 1 1 1 1 1
Custom useful selectors 1 1 2 1 1 2 1 1 1 2 2 1
Images 1 0 0 1 0 0 0 0 0 0 1 1
Relative to some elements 1 1 1 1 1 1 0 0 1 1 0 1
Mobile app selectors 1 0 0 0 1 0 0 0 0 1 1 1
Desktop app selectors 1 0 0 0 1 0 0 0 0 0 0 1
Sum 7 4 5 3 6 5 3 3 4 6 6
4.7 Web UI
This section contains a rating of the tools for handling some of the main aspects of browser
testing and some general testing capabilities. The results can be found in the table 4.6.
Most of the parameters are rated mixed on objective and subjective criteria on their intu-
itiveness of implementation or presence. Details about grading can be found in the Google sheet.
Capability Karate Selenium Cypress Sikuli and SikuliX Appium Playwright Puppeteer TestCafe Nightwatch.js TestProject WebdriverIO Weight
Waits 2 2 2 1 2 3 2 2 2 3 3 1
Events 1 2 2 1 2 2 2 2 1 2 2 1
Alerts 2 2 2 2 2 1 1 1 2 2 2 1
Asserting 2 1 2 1 1 2 1 2 2 2 2 1
Mobile support 2 0 1 0 2 1 1 1 2 2 2 1
Execution speed 3 2 2 1 1 3 3 2 2 2 2 1
iFrame 2 2 1 2 2 2 2 2 2 2 2 1
Shadow root 1 2 2 2 2 2 1 2 1 1 2 1
Multiple tabs 1 1 1 1 1 1 1 0 1 1 1 1
File upload 2 2 1 0 2 2 2 2 2 2 2 1
Syntax 2 2 2 2 2 2 1 1 1 2 2 1
Data driven 2 1 2 1 1 1 1 1 1 2 1 1
Debugging 1 1 1 1 1 1 0 1 0 1 1 2
Sum 24 21 22 16 22 24 18 20 19 25 21
4.8 Community
In this section, the tools were rated using the following criteria:
Stack Overflow questions Because it is an important place for developers to ask questions.
More questions answered or asked means more problems addressed.
GitHub stars and used by statistics Reflect popularity and community.
Downloads Enumerate the popularity of the tool.
Responsible authority Is a criterium to categorize the size of the team managing the tool. It
makes a huge difference whether a tool is managed by one man or a team from a company
like Microsoft or Google.
Support This parameter rated the tools by the platforms that the responsible authorities to
answer questions from other developers using the tools.
Age Is a crucial factor. The older the tool is, the more people got into contact with it. That
includes written articles about the tools, tests written with the tools, YouTube or other
tutorials published about the tool, etc.
Integration 51
These parameters were sorted into different groups selected by closest intervals of size, age,
etc., and given points according to the group they were put in.
The results can be found in the table 4.7.
Statistic Karate Selenium Cypress Sikuli and Appium Playwright Puppeteer TestCafe Nightwatch.js TestProject WebdriverIO Weight
SikuliX
Stack overflow questions 3200 95000 6000 900 8000 800 6500 1600 1600 13 1500 1
Github stars 6000 30000 38000 1700 15000 35000 76000 9300 11100 200 7500 1
Github used by 1600 140000 409000 2400 2600 11000 197700 10200 133000 - 40700 1
NPM downloads - 3000000 4000000 - - 2000000 3000000 250000 187000 - 1000000 1
Other downloads - 130000000 - 400000 20000000 - - - - 102000 - 1
Responsible authority Karate Labs Inc. Software Freedom Conservancy Cypress.io Sikuli Lab OpenJS Foundation Microsoft Google Developer Express Inc. BrowserStack Tricentis OpenJS Foundation 1
Age 2017 2004 2014 2012 2011 2020 2018 2016 2014 2017 2013 1
Support Stack overflow, Github issues Bug tracker, user group, chat Gitter, Stack Questions and Appium discuss Microsoft Github issues, Github issues, Stack Github, Discord, Help articles, Slack, Github 1
rooms (multiple platforms), overflow, Bugs on their support, Github Stack overflow overflow Stack overflow Contact us discussions, Gitter
sponsors, Slack Github issues website issues
Stack overflow questions in points 2 4 3 1 3 1 3 2 2 1 2 1
Github stars in points 1 3 3 1 2 3 4 1 2 1 1 1
Github used by in points 1 2 4 1 1 2 3 1 2 1 1 1
Downloads in points 1 3 2 1 2 2 2 1 1 1 2 1
Responsible authority in points 1 3 2 1 3 4 4 2 2 3 3 1
Age in points 1 4 2 3 3 1 1 2 2 1 3 1
Support in points 2 2 2 1 1 2 2 2 2 1 2 1
Sum 9 21 18 9 15 15 19 11 13 9 14
4.9 Integration
Integration with other tools is a valuable perk for an automation tool. It involves posting a
notification about a completed test run to a Slack channel or Microsoft Teams. Automatically
create a Jira test execution report after the test run is finished. Running in a Docker container
and integrating well with popular CI/CD tools like GitLab and Jenkins.
This is why the tools are rated on how well they integrate with other devices in this section.
The tools were rated for the existence of integration. It was either non-existent (or not found),
so it got 0 points, or it existed, but it required usage of third-party libraries to get 1 point, or
the creators of the tool officially supported the integration, then it got 2 points.
The important cloud and CI/CD tools like AWS, Azure pipelines, and GitLab got the point
per found integration. Other CI tools were counted into a CI category, and the tool got 1 point
per supported CI tool.
All tools can be used in testing that can be reported to Jira using its API, but some offer a
more advanced integration, so they got an additional point.
All tools are usable with the Cucumber framework.
All tools can be run in a Docker container though SikuliX needs a virtual display configuration
to function.
For someone testing, clouds are an essential service to satisfy ones testing needs. Nevertheless,
for the default configuration of the table, the weights for these parameters were lowered because
it does not go well with the open-source theme.
The results can be seen in the table 4.8.
Tool Karate Selenium Cypress Sikuli and Appium Playwright Puppeteer TestCafe Nightwatch.js TestProject WebdriverIO Weight
SikuliX
Slack 0 0 2 0 0 1 1 1 1 2 1 1
Microsoft teams 0 0 1 0 0 0 0 0 0 2 1 1
Github actions 1 1 2 1 2 2 1 2 2 2 2 2
GitLab 1 2 2 1 2 2 2 2 2 2 2 2
CI (Circle CI, Jenkins, Bitbucket...) 3 6 12 6 6 3 6 6 1 4 2 0.1
Testing clouds 0 8 7 1 15 9 6 3 5 2 6 0.1
Cucumber 1 1 1 1 1 1 1 1 1 1 1 2
Jira 0 1 1 0 1 1 1 1 0 0 1 1
Docker 1 1 1 1 1 1 1 1 1 1 1 3
Mocking 2 1 2 1 1 2 1 2 1 1 2 1
AWS 1 1 1 1 1 1 1 1 0 1 1 1
IDE plugins or extensions 2 2 1 1 1 2 1 2 1 2 2 1
Azure pipelines 1 1 1 0 1 1 1 1 1 1 1 1
Sum 15.3 18.4 23.9 12.7 20.1 22.2 18.2 21.9 17.6 22.6 22.8
4.10 Summary
The values found in Sum row of tables from previous sections are used as values in the rows
corresponding to the names of previous sections. This decision was made to lower the number
of rows in the final table and split relative parameters into relevant tables. The final table 4.9
contains all parameters in one table.
In the row labelled Total one can see the sum of all points multiplied by their weights. The
tool with the most points is TestProject and can be seen as a winner and the best tool in the
bunch. However, that is not necessarily the truth.
The table is designed with weights in order for individuals to emphasise what they value or
want from their tool more. Better integration, mobile support, multifunctionality? The emphasis
can be changed by adjusting the weight. The result might end up entirely differently. Moreover,
some of the parameters are purely subjective, so the grades given to them by the author might
differ from grades given by someone else. There is also a possibility that the grading system for
some of the parameters is not good or the parameter itself is useless. Alternatively, there might
be a possibility that there are not enough grades or parameters. This is why an editable version
of the Google sheet is available.2 Anyone interested can modify it according to their own needs
and rate it by the parameters suitable to their needs.
Regarding the results using the normalised version where the max score is 100, it is apparent
that tools like Cypress, TestProject and Playwright are presentably not far from each other in
the score. All of them are popular tools and could be an excellent choice for the right team.
TestProject is likely the winner because it is free and can work in the cloud or offline. It can
be managed from a browser, and the default capabilities of the tool are excellent. Writing cross-
browser tests without code only using UI is great because beginners can do so it can cut costs.
The add-ons add great functionality in a few clicks. The reports look great and if having it in the
cloud is bothersome, running it on other servers is possible while adding personal integrations
and configurations.
In other bulk of close results, we can see Karate, Selenium, Cypress, Appium and WebdriverIO.
Each could have gotten its most significant share of points from different parameters.
Nightwatch.js and TestCafe seem not on the same level of JS testing frameworks as Playwright
and Cypress, as this analysis showed.
Puppeteer proved to be a helpful tool mainly when combined with other tools. SikuliX might
come off as a loser here, but it is still an excellent tool for automating UI without a need to know
the structure of the application.
The Google sheet made available even has a quality list where one can see tools asses according
to some of their qualities. Using a link,3 one can go to the Google Drive folder with editable
unsorted material used to create this thesis.
2 https:
//docs.google.com/spreadsheets/d/1C_r5Bwvej2QhFhL0OQ4hrdZTy8iNv0dbnnCovvWrzqw/edit#gid=699299515
3 https://drive.google.com/drive/folders/1CWG_o-luwJAgWFsJxKpsEDqEXV5z4hDL?usp=sharing
Summary
Capability Karate Selenium Cypress Sikuli and Appium Playwright Puppeteer TestCafe Nightwatch.js TestProject WebdriverIO Weight
SikuliX
Browser support 6.00 6.00 4.00 6.00 6.00 6.00 4.00 7.00 6.00 6.00 6.00 1.00
Test recording tool 0.00 3.00 1.00 1.00 2.00 3.00 1.00 1.00 1.00 3.00 1.00 2.00
Required technical knowledge 2.00 1.00 2.00 3.00 1.00 2.00 1.00 2.00 1.00 3.00 2.00 2.00
Supported data formats 9.00 5.00 8.00 5.00 5.00 6.00 6.00 6.00 6.00 10.00 6.00 1.50
Reporting 6.00 5.00 5.00 4.00 5.00 6.00 4.00 5.00 4.00 8.00 7.00 2.00
Language support 3.00 7.00 2.00 3.00 7.00 5.00 2.00 2.00 1.00 4.00 1.00 1.00
Parallel testing 2.00 1.00 1.00 0.00 1.00 2.00 1.00 1.00 1.00 2.00 2.00 2.00
Web UI automation 24.00 21.00 22.00 16.00 22.00 24.00 18.00 20.00 19.00 25.00 21.00 1.50
API testing 3.00 1.00 3.00 1.00 1.00 3.00 2.00 1.00 1.00 3.00 1.00 1.00
Performance testing 2.00 0.00 1.00 0.00 0.00 1.00 1.00 1.00 0.00 0.00 1.00 1.00
Development platform variability 3.00 3.00 3.00 3.00 3.00 3.00 3.00 3.00 3.00 3.00 3.00 1.00
Environment configuration 2.00 2.00 2.00 1.00 2.00 2.00 2.00 2.00 2.00 2.00 2.00 1.00
Set up difficulty 0.00 0.00 1.00 0.00 0.00 1.00 1.00 1.00 0.00 1.00 1.00 1.00
Maintenance 1.00 1.00 2.00 0.00 0.00 2.00 0.00 1.00 1.00 2.00 2.00 1.00
Integration with other useful dev tools 15.30 18.40 23.90 12.70 20.10 22.20 18.20 21.90 17.60 22.60 22.80 1.00
Community/Support 9.00 21.00 18.00 9.00 15.00 15.00 19.00 11.00 13.00 9.00 14.00 1.50
Screenshots and Video recordings of tests 1.00 1.00 2.00 1.00 2.00 3.00 2.00 2.00 2.00 2.00 3.00 1.00
Multifunctionality 2.00 0.00 1.00 0.00 0.00 1.00 1.00 1.00 0.00 1.00 0.00 3.00
Documentation and test examples 3.00 4.00 4.00 2.00 4.00 3.00 2.00 3.00 2.00 3.00 3.00 2.00
Selectors 7.00 4.00 5.00 3.00 7.00 5.00 3.00 3.00 4.00 6.00 6.00 1.50
Total 141.80 143.90 152.40 97.20 140.60 158.20 114.60 128.90 114.60 161.60 143.30
Normalised 87.75 89.05 94.31 60.15 87.00 97.90 70.92 79.76 70.92 100.00 88.68
Table 4.9 Complete table with all of the parameters.
53
54 Quantitative analysis
Chapter 5
Test implementation
In this chapter, the analysed tools will be put under practical use.
The introduced demo application will be tested using tools analysed in the previous chapters.
The implementations will be commented on and compared.
55
56 Test implementation
5.1.1 Functionality
All requests from the frontend component are sent to the API component. API component
then sends the requests further to the backend component via Kafka or HTTP. The backend
component can send a notification request via Kafka to the mail sender application. [120]
The front end was changed from the original to provide a file upload functionality for testing
purposes and is hosted on a free Vercel website,1 and can be seen in the figure 5.2. Vercel is a
free deployment platform for JS applications. The front end is connected to the backend hosted
on the Stratox Cloud Native servers.
1 https://demo-app-fe.vercel.app/
Introduction of the demo application 57
5.2.1 Scenario 1
Scenario 1 is shown in the example 4, and it describes a user visiting the front end of the
application, filling in all of the details, and sending the reservation. After which, the user should
be notified with an alert acknowledging the success of creating the reservation.
Test plan 59
Scenario: Create a new reservation using the front end of the demo application.
Given the user opens a browser
When the user enters the demo application
Then the user should see the reservation details
When the user enters all of the necessary information
And clicks the Submit button
Then the user should see an alert with a message:
Reservation created successfully
And the user closes the browser
5.2.2 Scenario 2
Scenario 2 is shown in the example 5, and it describes a user visiting the front end of the
application after creating the reservation in Scenario 1. The views the created reservations and
cancels the first one shown in the reservations table. After dealing with alerts presented by the
browser, the user should see that status of the reservation has changed.
5.2.3 Scenario 3
This scenario describes a user visiting the front end of the application, filling in all the details
correctly except for the email address by not adding the @ character. The user will not be able
to create a reservation after submitting the reservation and will be hit with a temporary message
box from the email input informing him that the email is not in the correct format. The scenario
can be seen in the example 6.
60 Test implementation
Scenario: Try to create a new reservation but enter the invalid email address.
Given the user opens a browser
When the user enters the demo application
Then the user should see the reservation details
When enters the email address without the @ symbol
And clicks the Submit button
Then the user should see not see an alert with a message:
Reservation created successfully
And the user closes the browser
5.3.1 Selenium
In the file located in the folder with code implementation SeleniumDemo/src/test/java/com/se-
leniumdemo/DemoAppTest.java one can see an implementation of the test scenarios using Java
and JUnit library with Selenium WebDriver commands.
As shown in the example 7 before each test, objects are initialised, and parameters can be set
to change the properties of the web drivers. It is possible to initialise different drivers for different
browsers used during the testing. For this implementation, the Chrome driver was chosen. At
the end of each test, the driver is shut down.
2 https://github.com/oslaksam/CodenowDemoAppTestExamples
3 https://github.com/DiUS/java-faker
4 https://github.com/faker-js/fakerprojects
Implementation of the test plan 61
@BeforeEach
public void setUp() {
System.setProperty("webdriver.chrome.driver",
"src/test/resources/chromedriver.exe");
driver = new ChromeDriver();
js = (JavascriptExecutor) driver;
vars = new HashMap<String, Object>();
faker = new Faker();
}
@AfterEach
public void tearDown() {
driver.quit();
}
Most of the code was generated using the Selenium IDE, which records the scenarios. The
project in which scenarios are recorded can be found in SeleniumDemo/DemoSelenium.side and
can be imported into Selenium IDE.
As shown in the example 8, the syntax of the WebDriver API is straightforward, and com-
mands are understandable, handling alerts is intuitive. Selenium IDE generated the comments
in the code. All implemented scenarios can be found in the above mentioned Java code file. To
run the tests, the project can be loaded into an IDE, favourably IntelliJ IDEA and run from
there or can be compiled using Maven (mvn clean install). In the created target directory, there
will be an executable JAR that will run the tests.
5.3.1.1 Cucumber
To show how an implementation of the Cucumber framework could look like, it was decided
to use the Selenium implementation. The scenarios written in Gherkin syntax can be found in
SeleniumDemo/src/test/resources/features/demoapp.feature.
The difference between the implementation with and without the Cucumber framework is
that in the Cucumber framework, there is a different runner to use. It is specified where the
feature file is and where the glue is. This runner is located in SeleniumDemo/src/test/java/-
com/cucumberselenium/DemoAppCucumberTest.java. How the runner looks like in code can be
seen in the example 9.
62 Test implementation
@Test
@Order(1)
public void createReservation() {
// Generated by Selenium IDE
// Test name: Create a reservation
// Step # | name | target | value
// 1 | open | / |
// Open the website
driver.get(URL);
// 2 | setWindowSize | max |
// Resolution
driver.manage().window().maximize();
// 3 | click | css=.rs-picker-toggle-value |
// Click on date selector
driver.findElement(By.cssSelector(".rs-picker-toggle-value")).click();
...
// 10 | type | name=firstName | Sony
// Type in the name
driver.findElement(By.name("firstName")).sendKeys(faker.name().firstName());
...
// 15 | type | name=file | C:\fakepath\file.random
// Type in the path to the selected file
driver.findElement(By.name("file")).sendKeys("C:\\file.random");
// 16 | click | xpath=//button[contains(.,'Submit')] |
// Click on the submit button
driver.findElement(By.xpath("//button[contains(.,'Submit')]")).click();
// 17 | assertAlert | Reservation created successfully |
// Wait for an alert and assert that the reservation was created successfully
Alert alert = new WebDriverWait(driver, Duration.ofSeconds(3))
.until(driver -> driver.switchTo().alert());
assertEquals(alert.getText(), "Reservation created successfully");
alert.accept();
}
@RunWith(Cucumber.class)
@CucumberOptions(
features = {"classpath:features/demoapp.feature"},
glue = {"com.cucumberselenium"},
plugin = {"pretty", "html:target/cucumber-reports"})
public class DemoAppCucumberTest {
}
The glue is the code used in implementation, but it is redistributed into methods that cor-
respond to steps in the feature file. The glue can be found in SeleniumDemo/src/test/java/-
com/cucumberselenium/ReservationSteps.java.
As shown in the example 10, Cucumber makes it a bit more complicated to write tests as the
mapping required for the scenario steps. It is up to the team that decides to use the Cucumber
framework if it seems beneficial to them or not. It is possible to generate the functions mapped
Implementation of the test plan 63
to feature file steps using an IDE with some Cucumber plugins, but the rest of the code must be
written by someone.
@Then("the user should see an alert with a message: Reservation created successfully")
public void theUserShouldSeeAnAlertWithAMessageReservationCreatedSuccessfully() {
// 17 | assertAlert | Reservation created successfully |
// Wait for an alert and assert that the reservation was created successfully
alert = new WebDriverWait(driver, Duration.ofSeconds(3))
.until(driver -> driver.switchTo().alert());
assertEquals(alert.getText(), "Reservation created successfully");
}
5.3.2 Appium
The implementation for Appium was almost the same as the implementation for Selenium, as it
used the WebDriver API. The significant difference was in the configuration of the device. For
this example, an emulated Android Device was used.
The Android Studio needed to be installed for its Virtual device management capabilities.
The virtual device had to be selected configured in terms of virtual size and the Android version
and emulator API. A Google Pixel phone with android version code name Tiramisu was used for
this implementation. The emulated phone can be seen in the figure 5.3.
64 Test implementation
To get the tests running, Appium Server needs to be configured and run. For this implemen-
tation, Appium Server GUI for Windows was chosen, and an example of a running server can be
seen in the figure 5.4.
The difference in code can be seen in the example 11. The difference is in the driver con-
figuration. Instead of using a Selenium WebDriver, the Appiums AndroidDriver is used. The
pathway to the Chrome driver is set in the capabilities, and the Chrome driver will be used to
execute the tests in the Chrome installed on the emulated device.
@BeforeEach
public void before() throws MalformedURLException {
DesiredCapabilities caps = new DesiredCapabilities();
//caps.setCapability("VERSION", "10.0");
caps.setCapability("deviceName", "emulator-5554");
caps.setCapability("platformName", "Android");
caps.setCapability("browserName", "chrome");
//Replace withou your path to chromedriver.exe
caps.setCapability("chromedriverExecutable", "C:\\chromedriver.exe");
driver = new AndroidDriver(new URL("http://0.0.0.0:4723/wd/hub"), caps);
}
5.3.3 Karate
It was previously stated that the syntax of Karate is based on the Gherkin syntax from Cucumber.
There are IDE extensions available that can help with syntax highlighting, and there is also an
excellent Karate extension for Visual Studio Code that allows code generation.5
For this example, the OpenAPI specification of the demo application was used and converted
to a YAML file available in KarateDemo/src/test/java/demoapp/openapi.yaml the generated
tests are working well if the specification is well defined. The example data in OpenAPI is often
used as testing data. The generated test and data can be seen in the folder KarateDemo/sr-
c/test/java/demoapp. Test data is stored in the test-data folder and the generated tests are in the
cancelReservationUsingPUT.feature, createReservationUsingPOST.feature and getViewOfReser-
vationsUsingGET.feature files. The generated code example can be seen in the example 12.
5 https://marketplace.visualstudio.com/items?itemName=KarateIDE.karate-ide
66 Test implementation
@operationId=createReservationUsingPOST
Scenario Outline: Test createReservationUsingPOST for <status> status code
@operationId=createReservationUsingPOST
Scenario: explore createReservationUsingPOST inline
You can use this test to quickly explore your API.
* def payload =
"""
{
"statusCode": 200,
"headers": {},
"params": {},
"body": {
"date": "2019-08-24T14:15:22Z",
"email": "string",
"firstName": "string",
"lastName": "string",
"seatId": "string",
"trainId": "string"
},
"matchResponse": true
}
"""
* call read('createReservationUsingPOST.feature@operation') payload
Karate UI testing, it is possible to combine the Gherkin keywords to one’s liking. The code is
concise and simple, and helpful locators like {}Select are useful. Managing alerts and asserting
is also uncomplicated and convenient.
Background:
# this section is optional !
# steps here are executed before each Scenario in this file
# variables defined here will be 'global' to all scenarios
# and will be reinitialised before every scenario
* def Faker = Java.type('com.github.javafaker.Faker') #loading a Java library
* def fakerObj = new Faker()
* def fName = fakerObj.name().firstName()
* def lName = fakerObj.name().lastName()
* def mailId = fName+'.'+lName+'@test.com'
* def feUrl = 'https://demo-app-fe.vercel.app/'
The first main functionality of Karate was API testing and it can be done in a few lines of
code, as shown in the example 14 or in the example 2. Karate offers advanced asserting abilities
for requests and responses. Karate offers advanced asserting abilities for requests and responses.
Using the interoperability with Java, it is even possible to pass a variable to a JSON as shown
in the example 14.
68 Test implementation
5.3.4 SikuliX
SikuliX tests can be implemented using SikuliX IDE, which helps writing simple Jython scripts
for SikuliX, or it is often used as a library for Java.
The SikuliDemo/SikuliDemo.sikuli folder can be opened as a project in SikuliXIDE, and it
is an implementation of the Scenario 1. Other folders that end with .sikuli in the SikuliDemo
folder are implementations of the remaining scenarios. The scripts were written for the Google
Chrome browser.
The SikuliX IDE offers the ability to insert images and configure the region, location and
offset to describe where exactly should SikuliX click on an image that matches with a predefined
image in the script when executing the scripts. The IDE also offers the ability to take screenshots.
When the picture is inserted, it can be used as an object that can be passed to the script functions.
SikuliX can run the scripts and export them as runnable JAR files. When running the scripts,
it is required to have an environment ready or fail because it will not be able to find the required
GUI elements. It is possible to configure a virtual desktop for the cloud and other environments.
Implementation of Scenario 1 is shown in the figure 5.5. Before running the script, it is
required to open the front end of the demo application in the browser.
Implementation of the test plan 69
The better way to use SikuliX is using it in a Java program combined with other tools like
JUnit, Selenium or Appium to automate the GUI using image recognition.
5.3.5 Cypress
Implementing tests in Cypress is remarkably developer-friendly. Upon opening Cypress for the
first time, numerous examples can be seen to navigate through the functions of Cypress. There
are also numerous extensions for Cypress available for IDEs. In the figure 5.6 one can see the
main menu after running Cypress. The tests can be found in the CypressIODemo/cypress/inte-
gration/demoapp folder.
70 Test implementation
A test recording tool is available in the premium version of Cypress, but free test recording
extensions are available, though they are not as sophisticated as the premium tool. For this
implementation, a free extension called Cypress Recorder 6 was used.
When creating or opening a spec file, Cypress launches a selected browser and starts executing
the commands in the test file. It works in developer mode. When the test code is changed,
Cypress starts executing the code in the spec file. This feature can swiftly notify the developer
whether his code works properly or breaks somewhere.
After all of the commands in a test are executed, it is marked as passed. If an error happens
along the way, the test is marked as failed. The developer can see the cause of the error in the
browser. The test steps are displayed on the left side of the window, and it is possible to go step
by step before and after every action because Cypress can snapshot the DOM of the website,
making debugging easy and by default. In the step where the test fails, a detailed description
can be found explaining the error. Image in the figure 5.7 shows an example of the development
mode in Cypress.
6 https://chrome.google.com/webstore/detail/cypress-recorder/glcapdcacdfkokcmicllhcjigeodacab
Implementation of the test plan 71
Cypress can be seamlessly integrated with CI tools. An account can be created on the
company website7 allowing users to connect their projects to a dashboard with details about the
test execution and other reporting capabilities. The dashboard also offers parallelization and
load balancing, but the free version has only three users and 500 test results per project.
The menu of Cypress after running it In the folder, CypressIODemo/cypress/support one can
find a global configuration file for tests in index.js and commands.js for storing custom utility
functions. Users write functions to be reused across different tests by importing them into the
code file.
File uploading and downloading is not a functionality built-in by default, but they are sup-
ported using plugins.
Mocha and Chai keywords can be seen in the example 15, they are used in the structure and
assertions of the test. Flow of the implementation is straightforward and understandable though
it requires basic knowledge of JS. The way the alerts are handled is acceptable. The auto wait
function is not ideal, so it had to be supported using the cy.wait(500) function, so the DOM has
time to change its state before the following command is executed. Without the wait, the test
often failed.
7 https://dashboard.cypress.io/signup
72 Test implementation
It is also possible to write API tests in Cypress. Writing them and asserting them is not
complicated, as can be seen in the example 16. The variables created by the Faker library can
be set to a body of the request, which is convenient.
Implementation of the test plan 73
Code listing 16 Example showing the test for a POST request to the
demo app in Cypress
5.3.6 Puppeteer
Implementing tests using Puppeteer was an unpleasant experience. The tests are located in the
PuppeteerDemo folder.
Puppeteer is a Node.js library which provides an API to control Chrome over the DevTools
Protocol. The information shows that Puppeteer is not a testing framework, so it should be
integrated with a testing framework like Mocha to use it properly for testing purposes.
For this implementation, it was decided that the test will be marked as passed when running
the JS test file with Puppeteer code will not throw an error, which means that all of the commands
in the script will be executed successfully. Alternatively, when running the file returns an error,
the test will be classified as a failure. The expect function from the Chai asserting library was
imported to run asserts.
Most of the code was recorded using an extension from Google Webstore called Headless
recorder.8
Part of the implementation of Scenario 1 can be seen in the example 17. In default settings,
the scripts are run in headless mode. The headless mode was turned off to ensure that the
commands were executed.
CSS selectors are handled intuitively in Puppeteer but selecting and interacting with elements
using XPath is unintuitive. File uploading and input typing are part of the API as they should.
Alert handling is handled as an event as it can be problematic to have one listener for multiple
alerts.
8 https://chrome.google.com/webstore/detail/headless-recorder/djeegiggegleadkkbgopoonhjimgehda
74 Test implementation
(async () => {
const browser = await puppeteer.launch({
headless: false,
});
const page = await browser.newPage();
await page.goto(url);
await page.setViewport({ width: 1920, height: 1080 });
await page.waitForSelector(
".rs-form > .rs-form-group > .rs-picker-date > .rs-btn > .rs-picker-toggle-value"
);
await page.click(
".rs-form > .rs-form-group > .rs-picker-date > .rs-btn > .rs-picker-toggle-value"
);
...
await page.waitForXPath("//a[@name='seatId']");
let elHandle = await page.$x("//a[@name='seatId']");
await elHandle[0].click();
...
await page.click(
".rs-container > .rs-content > .rs-form > .rs-form-group:nth-child(5) > .rs-input"
);
await page.focus(
".rs-container > .rs-content > .rs-form > .rs-form-group:nth-child(5) > .rs-input"
);
await page.keyboard.type(faker.name.firstName());
...
const elementHandle = await page.$(
".rs-container > .rs-content > .rs-form > .rs-form-group:nth-child(8) > .rs-input"
);
await elementHandle.uploadFile(
"C:\\random.file"
);
page.on("dialog", async (dialog) => {
console.log(dialog.message());
await expect(dialog.message()).to.equal("Reservation created successfully");
await dialog.accept();
});
await page.click(
".rs-content > .rs-form > .rs-form-group > .rs-btn-toolbar > .rs-btn-primary"
);
await browser.close();
})();
API testing is also possible using Puppeteer though it was probably not designed. The way
it works is when the command page.goto(url) is executed, an HTTP GET request is sent to a
target server but because the page.setRequestInterception(true) command was executed, and an
event listener for requests was added. The GET request was intercepted and handled by the
event listener, which can be modified to be another type of request. As shown in the example 18,
the GET request was changed into a POST request with a JSON body added to it. The POST
request is then sent to the server. The response from the server can then be further handled.
Implementation of the test plan 75
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
const POST_JSON = {
date: "2022-03-21T02:24:59.815Z",
email: faker.internet.email(),
firstName: faker.name.firstName(),
lastName: faker.name.lastName(),
seatId: "1-21",
trainId: "ICE-575",
};
await page.setRequestInterception(true);
page.on("request", (request) => {
let data = {
method: "POST",
postData: JSON.stringify(POST_JSON),
};
// Request modified... finish sending!
request.continue(data);
});
const res = await page.goto(TARGET_URL);
const content = await res.text();
console.log(content);
await expect(content).to.include("Reservation accepted.");
await browser.close();
})();
5.3.7 Playwright
Playwright is a testing framework created mainly by the same people who worked on Puppeteer,
so there is a significant possibility that similar concepts occur in Playwright as it utilises Pup-
peteer. Being a testing framework, Playwright has a configuration file where it is possible to
configure devices, drivers, outputs, reports, timeouts, CI, workers and other test-related param-
eters.
For this implementation, the configuration file is located in PlaywrightDemo/playwright.config.js,
and the tests are located in this folder PlaywrightDemo/tests.
Setting up Playwright was the least problematic task in comparison with other js tools. It
performs well and runs tests in parallel out of the box.
The implementation of the scenarios was generated using the test generator functionality. It
is even possible to preserve an authenticated state while recording tests using cookies. There is
even geolocation, language and timezone emulation available. Test generator can generate code
in multiple programming languages supported by the Playwright API. However, the tool is not
as advanced as Selenium IDE because it allows choosing between multiple selectors and offers
numerous additional features.
It offers good extensions for VSC for executing and debugging.
By default, reports are generated onto an HTML page. The reports are detailed and contain
screenshots of the application before and after each step in the test to make debugging easier.
The code shown in the example 19, shows the similarity between the Puppeteer and Play-
wright because they are both run in “async” mode, and both use the page object. Playwright
uses some useful custom selectors like placeholder and role. Uploading files is done very unintu-
itively, using events. Alert handling is done in the same spirit as Puppeteer and Cypress, using
76 Test implementation
Playwright can also be used for API testing. In the example 20, a test for POST request
is shown. In the first part, a correct body is sent, and the response is asserted to have an OK
status. Then a request with an empty body is sent, following the assertion that the result was
not OK. The implementation looks similar to Cypress.
Implementation of the test plan 77
5.3.8 TestCafe
TestCafe is a JS E2E testing framework. TestCafe claims that it has a concise syntax without
cumbersome boilerplate expressions and manual timeouts. TestCafe does not require WebDriver
and uses browsers installed on the device.
The premium version offers a test recording tool and other useful features, but the license is
expensive.
In the example 21, part of the implementation of Scenario 1 can be found. Tests implementing
the scenarios are located in TestCafeDemo/demoapp.js. TestCafe was disappointing because to
use XPath selectors, a custom function found on GitHub of TestCafe had to be imported into
the test for XPath selectors to work. The same goes for other valuable functionalities that could
have been integrated into TestCafe but instead are available as JS files on GitHub.
Handling alerts is done by configuring a native dialogue handler. The dialogue handler should
return true when the alert is OK. Otherwise, it should return false. The designed solution is not
ideal, but it works. The file upload method is designed well.
Some selectors have practical methods like withAttribute().
TestCafe uses a CLI reporter by default.
TestCafe allows API mocking, but it is not a suitable tool for API testing.
78 Test implementation
5.3.9 Nightwatch.js
Implementations of the scenarios in Nightwish.js are stored in the NightwatchJsDemo/tests folder.
The configuration file is located in NightwatchJsDemo/nightwatch.conf.js. It can configure test
sources, reporting, drivers, devices, connection to BrowserStack, connection to Selenium Server,
plugins, custom commands, environment configuration, etc.
A test recording extension from GitHub9 was used to generate some of the code in the script.
Due to poorly generated selectors, a large part of the code needed to be rewritten.
However, the tool is not as advanced as Selenium IDE because it allows choosing between
multiple selectors and offers numerous additional features.
In the example 22, part of the implementation of Scenario 1 is shown. TestCafe and Night-
watch.js have similar chaining properties. It is possible to write a test only using methods invoked
on the isolated occurrence of the driving object in the test code.
Nightwatch.js supports XPath and CSS selectors but it is required to call methods useXpath()
and useCss() to switch between them which is burdensome. Nevertheless, it is possible to use
other selectors provided by Nightwatch.js.
At first it was tricky to understand what parameter to pass into the waitForElementVisible()
and setValue() methods instead of XPath and CSS selectors but after reading the documentation
it was no longer a problem.
File uploading and alert handling work are similar to Selenium, which is intuitive. It is also
9 https://github.com/vvscode/js--nightwatch-recorder
Implementation of the test plan 79
convenient that the await keyword is not used, unlike in Playwright and Puppeteer.
Nightwatch.js uses a CLI reporter by default.
5.3.10 TestProject
Implementing the scenarios in TestProject was a great experience. Tests can be developed and
run from a browser. An account is needed to use TestProject.
TestProject Agent needs to be installed on the device to execute the tests. After installing
the agent, it needs to be linked with the project. The agent is responsible for test execution and
80 Test implementation
communication with TestProject. The agent uses browsers installed on the device, so when a
user decides to run the tests, he is presented with a list of browsers available for running the
tests on. The agent can run on Windows, macOS and Linux or as a Docker container.
In the figure 5.8, a menu of the project for testing the demo application is shown. UI elements
on the left side of the menu allow users to switch between projects, create folders, and move tests
between the folders. Next, they allow users to add a new application that they want to test.
Adding data sources is possible if external data is needed for the tests. Parameters can be
configured for a project, and for individual tests, they essentially work as variables.
When creating a project, a user is presented with three options: mobile, web and code. Mobile
tests use Appium and AI. Selenium and AI are used in web tests.
These tests can be developed in the browser by combining the regular functionality of Test-
Project and add-ons. Instead of coding, a developer defines the test by searching and applying
commands step by step using the TestProject platform on his browser. The commands can be
further configured.
If the default commands are insufficient, many add-ons can be added using a click. The
add-ons often solve common problems or do practical operations that simplify a tester’s life.
Code tests give the user the ability to use TestProjects SDK to develop tests in their way.
Creating useful add-ons for TestProject is very welcomed by the community.
TestProject offers a fantastic tool for recording tests. In the figure 5.9 is a screenshot of
the demo application launched in recording mode by the agent. The test editing tool is also on
the screenshot. After the user interacts with the app, a command is added to the test script.
Recording can be stopped to configure the commands in the test script and can be resumed.
While configuring the commands, selectors of web elements can be chosen from the list similar
to Selenium IDE. However, the tool used by TestProject is more sophisticated.
Implementation of the test plan 81
Test execution can be started manually or using a job. Jobs can be configured to execute
tests at the specified time, serially or parallelly. Webhooks, email notifications, browsers and
desired capabilities are configured in the job specification. It is possible to see the progress of
the execution during the execution.
After a test is executed, the report can be seen in the reports section. Reports contain useful
statistics about test runs. When a user selects a finished test execution, he is presented with
information about the step by step execution from each browser. By clicking on a step, the user
might find additional helpful information. The test execution can be exported to pdf as a full or
summary report.
A report of test execution can be seen in the figure 5.10.
82 Test implementation
By default, TestProject is run in the cloud hybrid mode. That means that data and tests of the
project are stored in the cloud. It could be problematic when TestProject is under maintenance
because the users cannot access their projects. For this reason, it is possible to use TestProject
offline and store files and tests locally. However, it requires some effort to configure but, in the
end, is still worth the effort.
5.3.11 WebdriverIO
WebdriverIO is a progressive automation framework that offers a lot of different integrations and
third-party services and libraries. WebdriverIO can run on the W3C WebDriver protocol or a
solution based on the Chrome DevTools protocol.
WebdriverIO does not offer a test recording tool, but Katalon Recoreder10 was used with an
extension for exporting test recordings into WebdriverIO scripts.11
The code for the implementation can be found in WebdriverIODemo/test/specs/demoapp.js.
The configuration file is located in WebdriverIODemo/wdio.conf.js.
The await keyword is present in the code, similar to Playwright and Puppeteer. WebdriverIO
uses a CLI reporter by default.
In the example 23, a part of the implementation of Scenario 1 is shown. The link text
and name selectors can be seen in the example. File uploading and Alert handling are made
intuitively.
10 https://chrome.google.com/webstore/detail/katalon-recorder-selenium/ljdobmomdgdljniojadhoplhkpialdid
11 https://chrome.google.com/webstore/detail/webdriverio-exporter-for/kccnpljpbgjkbjoncfpbmkobhacfekko
Summary 83
5.4 Summary
In conclusion, the demo app and the test plan for it were described in detail.
The three scenarios described earlier in this chapter were successfully automated for every
analysed tool. Furthermore, API tests were developed using Cypress, Karate, Puppeteer, Play-
wright and TestProject. In total 51 tests were implemented for this project (3 scenarios, 3 types
of API requests) to summarise the outputs.
Selenium is usually the first option people think of for automating browsers. It requires
downloading drivers for the browsers and configuring them in code to run correctly. Users
should be skilled enough to understand the configuration, testing and basic programming. The
WebDriver is designed well, and the syntax is intuitive.
Cucumber was combined with the done Selenium code. Commands were mapped onto the
test steps functions generated from the feature file into Java. Sometimes it was hard to find a
piece of code that could be mapped to a line from the emphfeature file, so it was left empty.
Cucumber and BDD are not often the best approach to testing and development. It highly varies
on the team and the approach on BDD.
Appium works well, and it is often used in mobile application testing. Configuring and
managing actual and emulated mobile devices can be challenging. Drivers and the Appium
Server also need to be configured to run. Users should have a comparable technical level, as
conveyed in the suggestion for Selenium users. Its API is designed well.
Karate is a great beginner-friendly multipurpose tool to suit most of the web application
automated testing needs. Great for small projects and in cases where minimising the number of
tools is optimal.
SikuliX is a decent tool when it is used as a Java library. SikuliX IDE is a bit interesting, but it
cannot effectively export the recorded projects into code that could be used in other applications.
That significantly limits environment configuration and access to crucial functionalities other
tools provide, concluding that it is most useful as a Java library.
84 Test implementation
The process of writing tests in Cypress is enjoyable. The IDE snapshots and the development
mode make it easy to fix bugs while writing the code. It is widespread and a good choice for
many JS projects. It requires basic JS knowledge that can be also said about the rest of the
analysed JS tools.
Puppeteer is just a library and needs to be combined with many other tools to be usable.
The natural thing to do is to use Playwright as it is based on Puppeteer and functions as an
E2E testing framework.
Working with Playwright was enjoyable, and the code gen functionality works nicely. The
design of some of the aspects of the API was subjectively unintuitive. Nonetheless, the tool is
still a great choice due to its ease of configuration, functionalities and integrations.
TestCafe is not a good choice when compared to other JS testing frameworks. TestCafe uses
its way to manipulate the browsers instead of using the standard W3C WebDriver. Important
functionalities are either added by importing JS files from GitHub or buying a premium version.
Nightwatch.js is probably best used for integrating with the BrowserStack cloud testing ser-
vice. Some API aspects are not as satisfactory as in other JS testing frameworks.
TestProject is an outstanding cross-platform E2E automation testing tool. The default con-
figuration is much better than in other analysed tools. Even a non-programmer can quickly start
automating web applications. It can be operated effectively from the browser. It works as a
hybrid cloud but offers the ability to work offline.
WebdriverIO is a likeable JS automation framework. The API is good, and it offers a lot of
different integrations.
Chapter 6
Academic papers discussing automation software testing from economic and utility perspectives
are the primary resources to evaluate the risks and benefits of automated testing.
6.1 Benefits
The results from a research paper “Benefits and Limitations of Automated Software Testing:
Systematic Literature Review and Practitioner Survey” published in 2012 showed that the main
benefits of test automation are:
Reusability
Repeatability
Effort saved in test executions [121]
The results also indicated that automation improves test coverage, even in cases where excessive
regression testing was not needed.
Other benefits are:
Improved product quality
Reduced testing time
Reduction in cost
Effort saved in test executions [122]
Increased fault detection was considered as a valid benefit by 58% of the respondents. One
of them noted that the tester facilitates high defect detection and that one can get high defect
detection with both manual and automated testing depending on how they are used. [121]
85
86 Benefits and risks of automated testing
False expectations
Inappropriate test automation strategy
Lack of skilled people [122]
3. Efficient creation of test cases. Test recording tools already allow the efficient production of
test code, but the generated code can be unmaintainable and fragile.
4. Ease of configuration and integration with DevOps components
5. Support an incremental delivery of test automation. To lower the risk. [121]
Topics mentioned in the list, excluding the fifth point, were discussed in the analysis part of the
thesis, which indicates that the thesis is not irrelevant.
Conclusion
In conclusion, the aims set at the begging of this thesis were achieved.
Twelve tools used in automated testing of web applications were qualitatively analysed in
detail and compared.
List of analysed tools:
Karate
Selenium
Cypress
SikuliX
Appium
Playwright
Puppeteer
TestCafe
Nightwatch.js
TestProject
WebdriverIO
Beyond the terms of assignment, a qualitative analysis was also done. The method behind
qualitative analysis was to use weighed parameters to categorise tools tool using objective and
subjective metrics on which were the tools graded. Grades of the parameters were summed into
total, and the tool with the highest amount of points was considered the most recommended for
usage.
According to the results of the quantitative analysis, the most suitable tool to pick is the
TestProject, as it is free and can work in the cloud or offline. It can be managed from a browser,
and the default capabilities of the tool are excellent. Writing cross-browser tests without code
only using UI is great because beginners can do so it can cut costs.
The quantitative analysis results are not final because the weights and the grading setup con-
tain a mix of subjective and objective parametrised criteria. So anyone who wants to prefer some
parameter of the tools over the others can change the weights or grades to get a recommended
tool that better suits one’s needs. The Google sheet is made publicly available for anyone to
copy it, change values, and add or delete parameters and tools. The links can be found at the
end of chapter 4.
87
88 Conclusion
A test plan was designed to test the demo application provided by the supervisor. The
functionality of the demo application and the test plan are described in chapter 5.
The test plan was implemented using the analysed tools. In total 51 tests were implemented
for this project (3 scenarios, 3 types of API requests). API tests were developed using Cypress,
Karate, Puppeteer, Playwright and TestProject. The development of the UI test involved all of
the tools. The tools were also compared in their implementations of the tests.
The benefits and liabilities of test automation were also discussed from an economic stand-
point.
While writing this thesis, I gained much practical knowledge of testing tools and their capa-
bilities.
The results of this thesis can be a great benefit for developers or other responsible individuals
in selecting the right tools for the testing automation needs for a project.
Further work could optimise the quantitative analysis’s parameters and grading scale. Also,
adding new tools would be beneficial. Other research could compare the tools set up in a
professional testing environment with different integrations. The tools could also be compared
on other parameters like performance, etc.
Bibliography
89
90 Bibliography
14. KARATELABS. Karate UI [online]. 2022 [visited on 2022-04-26]. Available from: https:
//karatelabs.github.io/karate/karate-core/.
15. GATLING. Open Source Load Testing - Gatling [online]. 2022 [visited on 2022-04-27].
Available from: https://gatling.io/open-source/.
16. KARATELABS. karate/karate-gatling at Master — karatelabs/karate [online]. 2021 [vis-
ited on 2022-04-27]. Available from: https://github.com/karatelabs/karate/tree/
master/karate-gatling.
17. KARATELABS. IDE Support — KarateLabs/Karate Wiki [online]. 2021 [visited on 2022-
04-26]. Available from: https://github.com/karatelabs/karate/wiki/IDE-Support.
18. STACK OVERFLOW. Newest ’karate’ Questions [online]. 2022 [visited on 2022-04-26].
Available from: https://stackoverflow.com/questions/tagged/karate.
19. BERGA, Mariana. Top 7 Automation Testing Tools (2021) [online]. Blog — Imaginary
Cloud, 2021 [visited on 2022-04-24]. Available from: https://www.imaginarycloud.com/
blog/top-automation-testing-tools/.
20. SOFTWARE FREEDOM CONSERVANCY. WebDriver [online]. 2021 [visited on 2022-
04-28]. Available from: https://www.selenium.dev/documentation/webdriver/.
21. SOFTWARE FREEDOM CONSERVANCY. Selenium components [online]. 2021 [visited
on 2022-04-28]. Available from: https://www.selenium.dev/documentation/overview/
components/.
22. SHETH, Himanshu. Selenium 4 New Features and Improvements — What’s New in Sele-
nium 4 [online]. LambdaTest, 2020 [visited on 2022-04-28]. Available from: https://www.
lambdatest.com/blog/selenium4-w3c-webdriver-protocol/.
23. SOFTWARE FREEDOM CONSERVANCY. Selenium components [online]. 2021 [visited
on 2022-04-28]. Available from: https://www.selenium.dev/documentation/overview/
components/.
24. SOFTWARE FREEDOM CONSERVANCY. Selenium Grid 4 [online]. 2021 [visited on
2022-04-28]. Available from: https://www.selenium.dev/documentation/grid/.
25. SOFTWARE FREEDOM CONSERVANCY. History [online]. 2012 [visited on 2022-04-29].
Available from: https://www.selenium.dev/history/.
26. STACK OVERFLOW. Newest ’selenium’ Questions [online]. 2022 [visited on 2022-04-29].
Available from: https://stackoverflow.com/questions/tagged/selenium.
27. SELENIUMHQ. Selenium [online]. 2022 [visited on 2022-04-29]. Available from: https:
//github.com/SeleniumHQ.
28. JS FOUNDATION. Introduction - Appium [online]. 2022 [visited on 2022-04-24]. Available
from: https://appium.io/docs/en/about-appium/intro/.
29. JS FOUNDATION. Setup for Parallel Testing - Appium [online]. 2022 [visited on 2022-
05-01]. Available from: https://appium.io/docs/en/advanced-concepts/parallel-
tests/.
30. JS FOUNDATION. Find Elements - Appium [online]. 2022 [visited on 2022-05-01]. Avail-
able from: https://appium.io/docs/en/commands/element/find-elements/.
31. JS FOUNDATION. Screenshot - Appium [online]. 2022 [visited on 2022-05-01]. Available
from: http://appium.io/docs/en/commands/session/screenshot/.
32. JS FOUNDATION. Start Screen Recording - Appium [online]. 2022 [visited on 2022-05-
01]. Available from: https : / / appium . io / docs / en / commands / device / recording -
screen/start-recording-screen/.
33. JS FOUNDATION. Appium: Mobile App Automation Made Awesome. [Online]. 2022 [vis-
ited on 2022-05-02]. Available from: https://appium.io/history.html?lang=en.
Bibliography 91
34. STACK OVERFLOW. Newest ’appium’ Questions [online]. 2022 [visited on 2022-05-02].
Available from: https://stackoverflow.com/questions/tagged/appium.
35. JS FOUNDATION. appium/appium: Automation for iOS, Android, and Windows Apps.
[Online]. 2022 [visited on 2022-05-02]. Available from: https : / / github . com / appium /
appium.
36. HOCKE, Raimund. RaiMan’s SikuliX [online]. 2012 [visited on 2022-04-24]. Available from:
http://sikulix.com/.
37. ESWARI, Anitha. Introduction to Sikuli (GUI Automation Tool) - Sikuli Tutorial Part 1
[online]. 2014 [visited on 2022-05-08]. Available from: https://www.softwaretestinghelp.
com/sikuli-tutorial-part-1/.
38. STACK OVERFLOW. Newest ’sikuli’ Questions [online]. 2022 [visited on 2022-05-09].
Available from: https://stackoverflow.com/questions/tagged/sikuli.
39. HOCKE, Raimund. RaiMan/SikuliX1: SikuliX Version 2.0.0+ (2019+) [online]. 2022 [vis-
ited on 2022-05-09]. Available from: https://github.com/RaiMan/SikuliX1.
40. CYPRESS.IO. Why Cypress? — Cypress Documentation [online]. 2022 [visited on 2022-
04-24]. Available from: https://docs.cypress.io/guides/overview/why- cypress#
Features.
41. CYPRESS.IO. Bundled Tools — Cypress Documentation [online]. 2022 [visited on 2022-
05-09]. Available from: https : / / docs . cypress . io / guides / references / bundled -
tools#Mocha.
42. CYPRESS.IO. Bundled Tools — Cypress Documentation [online]. 2022 [visited on 2022-
05-09]. Available from: https : / / docs . cypress . io / guides / references / bundled -
tools#Chai.
43. CYPRESS.IO. Reporters — Cypress Documentation [online]. 2022 [visited on 2022-05-09].
Available from: https://docs.cypress.io/guides/tooling/reporters.
44. CYPRESS.IO. Dashboard — Cypress Documentation [online]. 2022 [visited on 2022-05-
09]. Available from: https : / / docs . cypress . io / guides / dashboard / introduction #
Features.
45. CYPRESS.IO. Parallelization — Cypress Documentation [online]. 2022 [visited on 2022-
05-09]. Available from: https://docs.cypress.io/guides/guides/parallelization.
46. CYPRESS.IO. Get — Cypress Documentation [online]. 2022 [visited on 2022-05-10]. Avail-
able from: https://docs.cypress.io/api/commands/get.
47. CYPRESS.IO. Variables and Aliases — Cypress Documentation [online]. 2022 [visited
on 2022-05-10]. Available from: https://docs.cypress.io/guides/core- concepts/
variables-and-aliases.
48. CYPRESS.IO. Catalog of Events — Cypress Documentation [online]. 2022 [visited on 2022-
05-10]. Available from: https://docs.cypress.io/api/events/catalog-of-events.
49. CYPRESS.IO. Environment Variables — Cypress Documentation [online]. 2022 [visited on
2022-05-09]. Available from: https://docs.cypress.io/guides/guides/environment-
variables.
50. CYPRESS.IO. Screenshots and Videos — Cypress Documentation [online]. 2022 [visited on
2022-05-09]. Available from: https://docs.cypress.io/guides/guides/screenshots-
and-videos.
51. CYPRESS.IO. Installing Cypress — Cypress Documentation [online]. 2022 [visited on
2022-05-09]. Available from: https : / / docs . cypress . io / guides / getting - started /
installing-cypress.
92 Bibliography
52. CYPRESS.IO. IDE Integration — Cypress Documentation [online]. 2022 [visited on 2022-
05-09]. Available from: https://docs.cypress.io/guides/tooling/IDE-integration.
53. CYPRESS.IO. Jira Integration — Cypress Documentation [online]. 2022 [visited on 2022-
05-09]. Available from: https://docs.cypress.io/guides/dashboard/jira-integration.
54. CYPRESS.IO. Slack Integration — Cypress Documentation [online]. 2022 [visited on 2022-
05-09]. Available from: https://docs.cypress.io/guides/dashboard/slack-integration.
55. CYPRESS.IO. CI Provider Examples — Cypress Documentation [online]. 2022 [visited
on 2022-05-09]. Available from: https : / / docs . cypress . io / guides / continuous -
integration/ci-provider-examples#Guides.
56. MANN, Brian. Cypress Is Now Public Beta [online]. 2017 [visited on 2022-05-09]. Available
from: https://www.cypress.io/blog/2017/10/10/cypress-is-now-public-beta/.
57. STACK OVERFLOW. Newest ’cypress’ Questions [online]. 2022 [visited on 2022-05-09].
Available from: https://stackoverflow.com/questions/tagged/cypress.
58. CYPRESS.IO. cypress-io/cypress: Fast, Easy and Reliable Testing for Anything That Runs
in a browser. [Online]. 2022 [visited on 2022-05-09]. Available from: https://github.com/
cypress-io/cypress.
59. PUPPETEER. puppeteer/puppeteer: Headless Chrome Node.js API [online]. 2022 [visited
on 2022-04-24]. Available from: https://github.com/puppeteer/puppeteer.
60. MANJUNATHA, Manu. Selectors in Puppeteer - tools4testing [online]. 2019 [visited on
2022-05-10]. Available from: https://www.tools4testing.com/contents/puppeteer/
selectors-in-puppeteer.
61. COPES, Flavio. Introduction to Puppeteer [online]. flaviocopes.com, 2019 [visited on 2022-
05-10]. Available from: https://flaviocopes.com/puppeteer/.
62. OVERFLOW, Stack. Newest ’puppeteer’ Questions [online]. 2022 [visited on 2022-05-10].
Available from: https://stackoverflow.com/questions/tagged/puppeteer.
63. MICROSOFT CORPORATION. Fast and Reliable End-to-end Testing for Modern Web
Apps — Playwright [online]. 2022 [visited on 2022-04-24]. Available from: https : / /
playwright.dev/.
64. MICROSOFT CORPORATION. Parallelism and Sharding — Playwright [online]. 2022
[visited on 2022-05-10]. Available from: https://playwright.dev/docs/test-parallel.
65. MICROSOFT CORPORATION. Selectors — Playwright [online]. 2022 [visited on 2022-
05-10]. Available from: https://playwright.dev/docs/selectors.
66. MICROSOFT CORPORATION. Assertions — Playwright [online]. 2022 [visited on 2022-
05-10]. Available from: https://playwright.dev/docs/test-assertions.
67. MICROSOFT CORPORATION. Configuration — Playwright. Playwright, [n.d.].
68. MICROSOFT CORPORATION. Continuous Integration — Playwright [online]. Play-
wright, 2022 [visited on 2022-05-10]. Available from: https://playwright.dev/docs/ci.
69. HEGDE, Ganesh. Playwright Framework: Tutorial on Getting Started — BrowserStack
[online]. 2022 [visited on 2022-05-10]. Available from: https://www.browserstack.com/
guide/playwright-tutorial.
70. STACK OVERFLOW. Newest ’playwright’ Questions [online]. 2022 [visited on 2022-05-
10]. Available from: https://stackoverflow.com/questions/tagged/playwright.
71. MICROSOFT CORPORATION. microsoft/playwright: Playwright Is a Framework for
Web Testing and Automation. It Allows Testing Chromium, Firefox and WebKit with a
Single API. [Online]. 2022 [visited on 2022-05-10]. Available from: https://github.com/
microsoft/playwright.
Bibliography 93
97