JOURNAL OF APPLIED COMPUTER SCIENCE Vol. 22 No. 1 (2014), pp. 137-153

Integrating Web Site Services into Application through User Interface

Artur Opalinski´ Gdansk University of Technology Faculty of Power and Control Engineering Narutowicza 11/12, 80-233 Gdansk Artur.Opalinski-at-pg-gda-pl

Abstract. The issue of integrating applications which are only accessible through visual user interface is not thoroughly researched. Integration of web applications running remotely and controlled by separate organizations becomes even more complicated, as their user interface can display differ- ently in different browsers or change without prior notification as a result of application maintenance. While possible, it is generally not common for web sites to provide web services through standard mechanisms like SOAP, RPC, or REST, due to administrative, and especially security reasons. Program- matic use of the capabilities of numerous public sites which only provide web user interface to their services is very appealing, as they may signifi- cantly extend the functionality of other applications. This paper presents the research on employing existing of various purpose to integrating web sites using their user interface. With selected method, some capabili- ties of Moodle are expanded by integrating remote Moodle server with local application, to create team-work support tools. Keywords: browser automation, web user interface, application integration, web extraction. 138 Integrating Web Site Services into Application through User Interface

1. Introduction

Companies and organizations are building information systems by integrating previously independent applications, together with new developments. This inte- gration process has to deal with existing applications, which can only be used through their specific interfaces, and often cannot be modified. In many cases, the cost of rewriting an application would be prohibitive. The problem discussed in this paper arose from the work to extend web-based e-Learning Moodle environment into a collaboration tool [1]. There are free Moo- dle installations [2] as well as installations available locally at the universities [1], which allow to use an existing, external Moodle installation in administration-free model. It provides easy access to real data and users and avoids administrative burden associated with maintaining the web site. The work aims at adapting Moodle to support programming teamwork, by allowing programmers eg.:

• to self-enroll to the team,

• to make choices regarding work, concerning eg. assignment to sub-groups, or selecting programming goal,

• to upload the code on deadlines, and to get automatic correctness checks.

Moodle [3] offers already most of the components needed for the above pro- grammers’ tasks (Fig.1), i.e. users database, choice results data, course activities and user file store. It does not, however, integrate the necessary information and does not run correctness checks on files uploaded. Batch processing of uploaded source code files depicted in Fig.2, is much in- dependent of the interactive Moodle functionality so it can be handled by a sepa- rate application, running remotely and completely out of Moodle environment and only loosely coupled with Moodle for initial and final data transfer (Fig.1). In the administration-free model, the only available coupling to Moodle is its Web user interface (WebUI). This refines the issue of extending current Moodle capability, to the issue of integrating web site services into another batch processing application, through the web user interface of the former one. It should be noted, that it is not about integrat- ing user interface into the batch-processing application; the integration goes in the opposite direction rather. The issue is therefore different from integrating through A. Opali´nski 139

Figure 1. General idea of application integration, showing Moodle components used for programmers collaboration portals [4]. Equipping an application with interface to web sites opens access to a tremendous amount of online services, including online compilers [5], online code duplication or software plagiarism detection tools [6], online file format converters [7], etc. The issue can not be solved with web services, which aim at interoperable machine-to-machine interaction by providing interface described in a machine- processable format, as Moodle does not offer them. Web user interface is not easily processed by machine and moreover its for- mat in public web sites is generally unstable - relatively frequently unannounced changes are introduced, which are easy to accommodate by humans, but constitute an issue for automated processing. Therefore proper tools are needed to provide for flexible interfacing application to a web site through that site’s WebUI. This paper reviews tools and methods to make such interfacing possible, and presents the final solution chosen.

2. State of the Art

The issue of integrating applications through web user interface (WebUI) has very little published research. Making software a commodity by developing an industry of reusable components was set as a goal in the early days of software engineering [8]. The term middleware circulates in similar meanings at least since the famous Garmisch NATO Conference in 1968 [9]. 140 Integrating Web Site Services into Application through User Interface

Figure 2. Information sources, steps of data preparation and processing of up- loaded source code files in integrated programmers collaboration tool

Middleware in its various forms is preferred over the point-to-point architec- ture for modern Enterprise Application Integration [10][11][12], but its focal point remains on application interaction and logical data integration rather than on inter- facing, so it is far from solutions to the problem considered here. Web mashups pursuit a similar goal of integrating increasingly tremendous amount of information and services available on the Web, distributed across differ- ent platforms, to provide together unified services, even ad hoc [13]. Web mashups are not assumed to access components over WebUI, but instead rely on established through existing lightweight (RSS/Atom, REST) and future specialized Web Services [14][15] for data and service acquisition. Research concentrates on com- bined use of such disjoint information [16][17][18] rather than on its acquisition interface. A. Opali´nski 141

Web scraping is an umbrella term for various extraction techniques of web data. Web scrapping can be described as collecting target structured data from in- formation presented in human-readable . The challenge is to locate informa- tion in static HTML documents, rather than to control the remote site to generate a specific report or do requested service. To find information on the , either regular expression search, or web page information coordinates utilizing DOM tree and Xpath [19], or a combination thereof is used in wrappers [20]. To account for changes in web page structure over time or to make the solutions more universal, self-adapting wrappers [21], detecting similar page elements [22] [19], or methods for selecting essential content [23][24] are researched. The survey [25] summarizes the many aspects of web data extraction. While extracting information from static web pages is a crucial element of application integration over WebUI, web pages are increasingly dynamic and build on a mixture of languages, including HTML, but also JavaScript, Java Applets, etc. Thus it is often not possible to extract information without some form of interaction with the active page components [26]. [27] explores the visual regularity of the data records and data items on the web page to automatically extract structured results (database records) from deep web pages, and thus avoids analysis of complex web page source files. [28] regards ele- ments in the rendered page as 2D space objects, as humans do. But these solutions, while more user interface-oriented, still do not pursue WebUI interactivity. Few approaches take advantage of the interactivity of user interface at some degree: to automate frequent tasks in the web-browser WebVCR [29] and Chick- enfoot [30] record and reply user actions, or record shortcuts to web content in smart bookmarks for later replay. Commmercial Lixto [31] supports scripting lan- guages and dynamic content. It can be used to extract web data based on visu- ally generated wrappers, coded in its internal Elog language. SIKULI [32] is a vi- sual technology to automate and test graphical user interfaces (GUI) using images (screenshots), but requires running a browser locally and displaying its window on a graphical screen, which may not always be present. Similarly AutoIT [33] is a freeware BASIC-like scripting language designed for automating the Windows GUI and general scripting. [34] introduced a flexible integration framework to ease the GUI-oriented integration of COTS applications. None of the described approaches, while close to the problem, offers solutions ready for integrating applications over WebUI. 142 Integrating Web Site Services into Application through User Interface

3. Tools available

Some widespread tools can be adapted to to integrate the services provided by Moodle site into a local batch-processing application. These tools are wget (or similar software: curl), , and . The GNU wget [35] is a software package for retrieving files using HTTP, HTTPS and FTP. It is a non-interactive command line tool, so it may easily be called from scripts. It accepts an initial URL which it sends to the web server and can then automatically navigate to other web pages by following the found in the page received in response. It can only follow HREF links, and is not able to take advantage of dynamically generated links, embedded eg. in . Therefore this tool is mostly useful for downloading data to the batch-processing application, after that data has been requested and generated in other ways and has gotten a predictable URL. This software supports cookies, which are used by Moodle to ensure session continuity. Moodle requires authentication through web forms, sets three session cookies, and relies on in a number of features since version 2.0 [36]. wget also supports two authentication methods: with a ’realm’ window, and through web forms. Text-based lynx [37] has both an impressive set of command line parameters and also accepts keystrokes record stored in a text file. It may be therefore applied where wget is insufficient: to automate data entry, or to ensure more complex page navigation. It still lacks support for JavaScript though, making it unusable for accessing many crucial Moodle features. Unfortunately, no text- based web browser listed on Wikipedia pages [38] offers significant support for JavaScript; the only one which does is Elinks [39], but its documentation admits that it is in an early stage of implementation. Recently the open source Rhino JavaScript engine [40] has been released, which allows to run JavaScript scripts out of any web browser environment. Un- fortunately extracting the script for Rhino from the web page takes the code out of its context. Therefore Rhino alone can not be reasonably used to complement the aforementioned tools. The tool most suited to interfacing a batch-processing application seems to be Selenium [41], a tool which primary goal is automating browsers for web applica- tion testing. Also Windmill [42] testing framework offers seemingly very similar functionality. Selenium exists currently in two flavors: Selenium IDE is a add-on for simple script recording and playback of interactions with the browser. In contrast, Selenium WebDriver is a collection of language-specific bindings to A. Opali´nski 143 drive the browser. Selenium WebDriver makes direct calls to the browser using each browser’s native support for automation. How these direct calls are made, and the features they support depends on the browser driver used. WebDriver uses soft- ware components provided by specific browsers, eg. COM components in or XPCOM components in Firefox. Driver for Firefox is largely writ- ten in the form of a browser extensions [43]. The extension written in JavaScript makes use of the XPCOM primitives offered by Firefox in order to do its work. This bypasses the security model pertaining to the HTML-embedded JavaScript, which requires JavaScript code to run in a common sandbox with other scripts originating from the same site (same origin policy). Driver for Internet Explorer is mainly using the built-in IE Automation APIs in C++ [44]. Selenium WebDriver architecture is presented in Fig. 3. All implementations of WebDriver that communicate with the browser use a common wire protocol. This wire protocol [45] defines a RESTful web service using JSON over HTTP. Language bindings control the driver by connecting over a socket and sending commands. A binding from a programming language to a library or OS service is an API providing that service in the language. Bindings exists currently for Java, Python, Ruby, Perl, PHP and C#. Browser drivers include a generic HtmlUnit_Driver, which is used thorough this paper, as well as drivers for many current web browsers provided for cross- browser behavior testing. HtmlUnit_Driver is currently the fastest and most light- weight implementation of WebDriver. As the name suggests, it is based on Html- Unit [46], which is a java based implementation of a web browser without a GUI. HtmlUnit uses the aforementioned Rhino as its JavaScript engine. The HtmlU- nit_Driver is the simplest driver from the architectural point of view (Fig.4), as it does not involve creating any separate process. Instead it provides the applica- tion with an API that allows to load HTML pages, fill out forms, click links, etc. like in a typical web browser, just without rendering onscreen. This is the part of Selenium which fits best the requirements of equipping the batch-processing application with access to web sites WebUI. All the three before mentioned tools have been used to provide for integra- tion between batch-processing application and Moodle web site. Selenium, being the most complete, is heavyweight and therefore not well suited for simple, fre- quent web accesses, where lynx is preferred instead. On the other hand wget is the most straightforward tool for scripted file download, so it is preferred for isolated downloads. 144 Integrating Web Site Services into Application through User Interface

Figure 3. Selenium WebDriver high-level architecture

4. Verification

To verify the applicability of Selenium to the needs of integrating applications over WebUI, four tasks have been defined, which are pivotal in the construction of programmer collaboration tool based on Moodle:

• task A: logging into the site through web form, with reusable password;

• task B: permanent storing selected cookies in disk files, and restoring cook- ies, to avoid repetitious logging-in during multiple accesses;

• task C: parallelizing operations by use of separate virtual browser windows to speed up processing multiple users’ data; A. Opali´nski 145

Figure 4. Application architecture with HtmlUnit for WebUI integration

• task D: requesting Moodle to create a ZIP archive from a selected user file directory.

A proof-of-concept Java application has been written for the sake of verifica- tion [48]. For task A, the solution was based on commands in Listing 1. Two fields need to be located and filled with values. Then the ’submit’ button must be clicked. These command are part of authentication() method contained in [48].

1 d r i v e r = new HtmlUnitDriver( true ); // create WebDriver instance 2 driver.get(url); // load the login page 3 WebElement element = driver .findElement(By.name("username")); // locate user name field 4 element.sendKeys(user); // Enter username 5 elem ent = driver .findElement(By.name("password")); // locate password field 6 element.sendKeys(pw); // Enter password 7 driver.findElement(By.(" // input [@value =’Login’]")).click(); // Locate&press ’submit’ button Listing 8. Locating and filling fields with data, clicking buttons 146 Integrating Web Site Services into Application through User Interface

For task B, the commands in Listing 2 for adding and accessing loaded cookies were central. Selenium provides these for ease of testing stateful web applications, but the general Java capabilities easily allow to store the selected cookie infor- mation in files between sessions. These command are used in saveCookies() and restoreCookies() methods in [48].

1 Cookie cookie = new Cookie(cookieName , cookieValue); // set cookie name and value using S t r i n g 2 driver.manage() .addCookie(cookie); // add cookie to the active set 3 Set a l l C o o k i e s = driver .manage() .getCookies() ; // get set of existing cookies 4 f o r (Cookie loadedCookie : allCookies) 5 System.out.println(String.format("%s \ t −> %s " , 6 loadedCookie.getName(), loadedCookie.getValue())); // access cookie information Listing 9. Cookie management

Task C required to use browser’s native language, i.e. JavaScript to open new browser window. In the test no real window opened as the GUI-less HtmlUnit_Driver was used, but the abstraction still allows to process separate web pages in parallel. Selenium does not offer natively the capability of creating a new window, as it is not needed for testing. Selenium allows to run asynchronous Javascript in the web browser though and this was used to inject the necessary code. Method switchWin- dow() [48] was used to proof this case. The rest of the code in switchWindow() required to accomplish this is provided by native Selenium. Basic commands to run the script and to switch between windows are presented in Listing 3.

1 ((JavascriptExecutor)driver) 2 .executeScript("window.open(’http : // www.google .com’,’new ’)"); // Open new window using JS; 3 // set windowID to ’new’ 4 driver .switchTo() .window("new"); // switch to window ’new’ 5 System.out.println("New page title is: " + driver.getTitle()); // get title of current page 6 driver.switchTo().window(""); // switch to main window 7 System.out.println("Main page title is still: " + driver.getTitle()); // get title of current page Listing 10. Browser window management

Task D consisted of locating the right check box for the directory to be archived, and then toggling it, and finally running the JavaScript contained in the page. Lo- cating the check box was done by means of driver.findElement(By.xpath()) as in task A, and toggling the check box itself was achieved by commands in Listing 4. Running the JavaScript required just pressing the button, as user usually does, a task that has already been presented for task A. This task has been implemented as method zip() [48].

1 f o r ( i =0; i

To sum up, all the pivotal tasks proved fully feasible with Selenium. This demonstrates that using this testing tool may be very fruitful for integrating ap- plications over WebUI in the wide scope assumed. No other, better matching tool has been found, which would support interaction with JavaScript embedded in the web pages.

5. Conclusion

As the literature survey reveals, integrating applications over user interface never belonged to mainstream technology, and most probably never will. Never- theless there remain corner cases like the one described in this paper, where such sort of integration seems the only viable solution. Also cases can happen where equipping a local application with the capabilities to use the rich Internet web sites services will be highly desirable and hard to resist. Emerging mashups may or may not cause a shift to more component-based and standard-interface services. Selenium, despite being conceived for testing, proved to be the most complete tool useful for integrating applications over WebUI. It allows to use the whole capabilities of the language, which the programmer selected to write his browser driving application. Integrating over WebUI opens a lot of new functionality in application. It can be regarded as a quick, easy and cheap way to integrate the state-of-the-art features, if only available anywhere online publicly. It offers very quick results as compared to developing the new features from scratch. The resulting integrated application features high modularity. It must be remembered, that reliable results and relative high performance also belong to the positive outcomes, as compared to error-prone, manual, human operations which would be otherwise required to bind the applications together. Such solution poses significant potential for redundancy, as there are usually many sites with similar services available to choose from in case of eg. failure of one of them. The work described here concentrates on interfacing only, therefore it fits in all the current application integration trends found in cited works. Of course integrating over WebUI brings performance and reliability costs, as is typical in any distributed processing. Interfacing to sites out of administrative control may result in problems, eg. unexpected changes in function or interface. Interfacing to public sites may also cause unplanned load on sites not intended 148 Integrating Web Site Services into Application through User Interface for automated load, and may be against their policies. This has already raised le- gal controversies surrounding screen-scraping and web-scraping as unauthorized access by bots. Tools used for integration introduce their own limitations. Future research could concentrate on performance, or on limitations on number of browser win- dows. Most browsers also support tabs, which HtmlUnit does not. Interaction with web forms and JavaScript covers a significant part of func- tionality of today’s Internet sites. The Internet content is more rich, however. The environment described it not powerful enough to support eg. Flash or JavaAp- plets. While this limitation does not constitute a show stopper for the application described in this paper, other technologies need to be addressed to exploit the In- ternet capabilities in their entirety.

References

[1] Artur Opalinski, Rozwiniecie MOODLE jako narzedzia do pracy grupowej, Materialy pokonferencyjne II Konferencji TEWI - Technologia Edukacja Wiedza Innowacja, Lodz, 27-28.06.2011

[2] Free Moodle services for the e-learning community, available online, URLs: http://www.mdl2.com/ , and http://www.gnomio.com/ (DOA: 1.06.2013)

[3] Tim Hunt, Moodle, in The Architecture of Open Source Applications. El- egance, Evolution and a Few Fearless Hacks, ed. Grady Booch, available online, URL: http://www.aosabook.org/en/moodle.html (DOA: 1.06.2013)

[4] Xiaorong Xiang, Madey, G., A semantic Web services enabled Web portal ar- chitecture, Proc. of IEEE International Conference on Web Services, pp.834- 835, 2004

[5] Example online C/C++ compilers, available online, URLs: http://www.onlinecompiler.net and http://codepad.org (DOA: 1.06.2013)

[6] MOSS (Measure Of Software Similarity) plagiarism detection ser- vice, available online, URL: http://wwww.cs.berkeley.edu/ãiken/moss.html (DOA:1.06.2013) A. Opali´nski 149

[7] Example online file conversion web sites: Zamzar, Free online file conversion, URL: http://www.zamzar.com/ and Convert.Files, URL: http://www.convertfiles.com/ (DOA: 1.06.2013)

[8] Stal Michael, Web Services - Beyond Component-Based Computing - Seek- ing a better solution to the application integration problem, Comm. of the ACM, Vol. 45, Issue 10, 2002

[9] Naur Peter, Randell Brian (eds.), Software Engineering, Report on NATO SCIENCE COMMITTEE conference, 7th to 11th October 1968, Garmisch, 1969

[10] Chunhua Gu, Xueqin Zhang, An SOA Based Enterprise Application Inte- gration Approach, In proc. of Third International Symposium on Electronic Commerce and Security, 2010

[11] Xudong Song, Xueping Wang, Xiaobing Liu, Research on Enterprise Ap- plication Integration Architecture and Development Approach, In proc. of IITAW’08, International Symposium on Intelligent Information Technology Application Workshops, pp.215-218, 2008

[12] Yan Du, Wuliang Peng, Li Zhou, Enterprise Application Integration: an Overview, In proc. of IITAW’08, International Symposium on Intelligent In- formation Technology Application Workshops, pp.953-957, 2008

[13] Jian Meng, Jinlong Chen , A Mashup Model for Distributed Data Integration, Proc. of ICMECG ’09 , Int. Conference on Management of e-Commerce and e-Government, 2009

[14] Roy, M., Towards end-user enabled web service consumption for Mashups, 2010 ACM/IEEE 32nd Int. Conference on Software Engineering, 2010

[15] Google Maps API, URL: ://developers.google.com/maps/, Google Weather API, Google Gadgets API, URL: https://developers.google.com/gadgets/ (DOA: 1.06.2013)

[16] Hasan, R., Winslett, M., Conlan, R., Slesinsky, B., Ramani, N., Please Permit Me: Stateless Delegated Authorization in Mashups, Proc. of ACSAC 2008, Annual Computer Security Applications Conference, 2008 150 Integrating Web Site Services into Application through User Interface

[17] Mata, F. Pimentel, A., Zepeda, S., Integration of Heterogeneous Data Mod- els: A Mashup for Electronic Commerce, Proc. of CERMA: Electronics, Robotics and Automotive Mechanics Conference, 2010 [18] Cappiello, C., Daniel, F., Matera, M., Pautasso, C., Information Quality in Mashups, IEEE Internet Computing, Vol.14, Issue 4, pp.14-22, 2010 [19] Hua Wang, Yang Zhang, Web Data Extraction Based on Simple Tree Match- ing, Proc. of 2010 WASE Int. Conference on Information Engineering (ICIE), pp.15-18, 2010 [20] Min Huang, Jian-Qing Xi, Bo Sun, A new web information extracting method based on multi-coordinate, Proc. of 2009 Int. Conference on Ma- chine Learning and Cybernetics, pp.1488-1492, 2009 [21] Tak-Lam Wong, Wai Lam, Learning to Adapt Web Information Extraction Knowledge and Discovering New Attributes via a Bayesian Approach, IEEE Transactions on Knowledge and Data Engineering, Vol.22, Issue: 4, pp. 523- 536, 2010 [22] Qu Jubao, The Research of Automatic Extraction Dynamic Web Data, Proc. of IFITA ’09 Int. Forum on Information Technology and Applications, Vol.2, pp. 143-146, 2009 [23] Yang Liu, Li Chunping, Gu Ming, Extracting Content from Web Pages Using the Sliding Window, Proc. of CSA ’09. 2nd Int. Conference on Computer Science and its Applications, 2009 [24] Nakajima, D. Mitsui, Y., Samejima, M., Akiyoshi, M., An Information Ex- traction Method from Different Structural Web Sites by Word Distances be- tween a User Instantiated Label and Similar Entity, Proc. of 2011 IEEE 11th Int. Conference on Data Mining Workshops (ICDMW), pp.1177-1182, 2011 [25] Emilio Ferrara, Giacomo Fiumara, Robert Baumgartner, Web Data Extrac- tion, Applications and Techniques: A Survey, Technical report, available online: http://www.emilio.ferrara.name/wp-content/uploads/2011/07/survey- csur. (DOA: 1.06.2013) [26] Zhang Hengru, Cui Chun, Web Information Extraction Technology Research Based on Ajax, BCGIN 2011, Int. Conference on Business Computing and Global Informatization, pp.208-211, 2011 A. Opali´nski 151

[27] Wei Liu, Xiaofeng Meng, Weiyi Meng, ViDE: A Vision-Based Approach for Deep Web Data Extraction, IEEE Trans. on Knowledge and Data Engineer- ing, Vol.22, No.3, 2010 [28] Wook-Shin Han, Wooseong Kwak, Hwanjo Yu, On supporting effective web extraction, In Proc. of 2010 IEEE 26th ICDE, International Conference on Data Engineering, pp.773-775 , 2010 [29] Vinod Anupam, Juliana Freire, Bharat Kumar, Daniel Lieuwen, Automating Web navigation with the WebVCR, Computer Networks: The International Journal of Computer and Telecommunications Networking, Elsevier, Vol.33 Issue 1-6, pp.503-517, 2000 [30] Michael Bolin, Matthew Webber, Philip Rha, Tom Wilson, Robert C. Miller, Automation and customization of rendered web pages, Proc. of UIST ’05 18th annual ACM symposium on User interface software and technology, pp.163-172 , 2005 [31] Baumgartner, R., Ledermiiller, G., DeepWeb Navigation in Web Data Ex- traction, Proc. of Computational Intelligence for Modelling, Control and Au- tomation, and Int. Conference on Intelligent Agents, Web Technologies and Internet Commerce, Vol.2, pp.698-703, 2005 [32] MIT open source SIKULI project web page, available online, URL: http://sikuli.org/ (DOA: 1.06.2013) [33] AutoIt. Automation and scripting lanuage home page, available online, URL: http://www.autoitscript.com/site/autoit/ (DOA: 1.06.2013) [34] Yimin Bao, Ellis Horowitz, Integrating Through User Interface:A Flexible Integration Framework for Third-party Software, In proc. of COMPSAC ’96, 20th Computer Software and Applications Conference, ISBN: 0-8186-7579- 9, pp.336-342, 1996 [35] GNU wget package home page, available online, URL: http://www.gnu.org/software/wget/ (DOA: 1.06.2013) [36] Managing a Moodle Site. AJAX and Javascript set- tings. Moodle documentation, available online, URL: http://docs.moodle.org/22/en/AJAX_and_Javascript_settings (DOA: 1.06.2013) 152 Integrating Web Site Services into Application through User Interface

[37] Lynx software distribution site hosted by ISC, available online, URL: http://lynx.isc.org/ (DOA: 1.06.2013)

[38] Wikipedia Comparison of web Browsers page, available online, URL: http://en.wikipedia.org/wiki/Comparison_of_web_browsers (DOA: 1.06.2013)

[39] ELinks - Full-Featured Text WWW Browser home page, available online, URL: http://elinks.or.cz/ or http://www.elinks.cz/ (DOA: 1.06.2013)

[40] Rhino project home page, available online, URL: http://www.mozilla.org/rhino/ (DOA: 1.06.2013)

[41] Selenium - Web Browser Automation home page, available online, URL: http://seleniumhq.org/ (DOA: 1.06.2013)

[42] Windmill Testing Framework home page, available online, URL: http://www.getwindmill.com/ (DOA: 1.06.2013)

[43] Selenium browser automation framework. Architectural Overview. An overview of the WebDriver architecture. How the FirefoxDriver works, available online, URL: http://code.google.com/p/selenium/wiki/FirefoxDriverInternals (DOA: 1.06.2013)

[44] Selenium browser automation framework. Architectural Overview. An overview of the WebDriver architecture. How the InternetEx- plorerDriver works, and how to work on it , available online, URL: http://code.google.com/p/selenium/wiki/InternetExplorerDriverInternals (DOA: 1.06.2013)

[45] Selenium browser automation framework. Architectural Overview. A description of the protocol used by WebDriver to com- municate with remote instances, available online, URL: http://code.google.com/p/selenium/wiki/JsonWireProtocol (DOA: 1.06.2013)

[46] HtmlUnit project web page, available online, URL: http://htmlunit.sourceforge.net/ (DOA: 1.06.2013) A. Opali´nski 153

[47] John Sayce, Browsers, processes, cookies and session state, in Author’s blog: Thoughts on development - SQL Server, .NET, Visual Studio and beyond, available online, URL: http://sqlblogcasts.com/blogs/jonsayce/archive/2007/11/06/Browsers_2C00_- processes_2C00_-cookies-and-session-state.aspx (DOA: 1.06.2013)

[48] Java proof-of-concept application source code used for verification, available online, URL: https://sites.google.com/site/flecabinet/downloads/login.java (DOA: 1.06.2013)