I. Introduction
The advancement of the internet never halts and a plethora of web applications tied with their corresponding set of usages are continuously expanding. Anything that is reachable using the web and that can perform an either simple or complex set of tasks is called a web service [1]. Static HTML documents, videos, image files or even programs that run on Web servers are normally stored in a database server. Of course, a set of protocols is to be defined in order to access the database when needed and JDBC is an example of a database access interface [2]. On the opposite side, all requests produced by the web browser are passed on to the web server (after being triggered on the front end) and hypertext documents rendered there are passed back via HTTP to the web browser [3]. Not so long ago, web browsers introduced the ability to embed JavaScript interpreters to execute compatible applets or embedded JS code snippets [4]. Hence, JS can be rendered on the browser and the server based on the context in which it is presented. Because of the situation that we mentioned earlier, testing web applications is considered an essential action to compete against other similar software and gain client satisfaction for future endeavors. Moreover, it can greatly reduce the risk of detecting errors at a late stage of the development process; and thus, can significantly reduce the costs of debugging and resolving issues [5]. Yet, due to the spacious extent of functionalities, features and frameworks that define our current web applications, testing has become a tougher job for all parties. Let us consider a web application that is written with a myriad of languages and is required to work properly between a set of heterogeneous execution environments and operating systems, and is accounted to respond properly upon instant dynamic state changes. It could be noted that such requirements are quite common to all web-applications nowadays but constructing one might be inherently difficult. Therefore, testing a web-application as a whole is a challenging job as well, and one needs to make sure that the prior listed features are met and successfully covered during the testing phase in order to guarantee high quality up-to-date services. Various tools are currently available in the market for web application testing. Using such tools, web developers, designers, and engineers tend to perform their tasks easily and more efficiently; thus, improving the overall performance and quality of the application [6]. Knowing that these tools serve the same purpose, i.e. testing, each one has its own characteristics and features pertaining to factors such as the level of usability, the degree of interoperability, the response time, the throughput, and many more. Testing in general can be executed using different models and techniques. The basic testing methods consist of static (without program execution) and dynamic (with program execution) testing, white-box (the code is tested) and black-box (only the output is tested) testing, and finally, manual (performed by humans) and automated (performed by scripts) testing [7]. Rather than performing manual testing that might cause some undesired results and that is costly and slow, companies tend to use either open source or commercial testing tools which make life easier and better for them [8]. Testing tools automate the process of testing; thus, saving cost and manpower, gaining more time, achieving higher precision, and reaching better conclusions. Several studies have been conducted to compare the different functionalities, performance, features, and popularity of a limited number of web testing tools [9]–[11]. In this paper however, we decided to go over more than 20 different testing tools and compare their features using several disjoint studies, in order to achieve a well-organized comparison between the most famous web testing tools developed.