user recording a script might not be interested in a particular inserted verification, which makes suggesting verifications, instead of immediate insertion, a more attractive solution. Arsenic’s implementation does exactly this: suggestions are shown in its recording interface (Figure 6.4), whenever a verification is assumed useful for insertion. Usefulness is deter- mined by monitoring DOM changes; whenever insertion or deletion of a Mango control is detected, an assertion checking this fact is suggested, and when an attribute belonging to a Mango control is modified, the control type definition (Figure 6.5, theattributes prop- erty) is consulted to check whether a particular attribute is deemed relevant within context of the control affected.
Figure 6.4: Suggestions generated by Arsenic IDE
6.3
In practice: TOPdesk
Implementation of a Mango testing tool requires a meta-testing platform, which in this case is the most well-known and used application using Mango code: the service management software it was designed for, TOPdesk. At the time of implementation, TOPdesk developers were in the process of converting some application modules to Mango, while the majority of the software core and other modules retained their legacy code. This limited practical testing opportunities to isolated module interfaces, as interaction between modules would require extensions to Arsenic unrelated to Mango. Some effort has been made to bridge these gaps in extension code, but focus has been on improving automated testing for the WebMango interfaces themselves.
The first few test runs revealed a practical solution to the problem of waiting for asyn- chronous requests to finish. WebMango includes a connection handler at the client side, written in JavaScript, to process requests and responses belonging to XMLHttpRequests. By hooking into these processing procedures, Arsenic is able to monitor the number of out- standing calls at any time. Requiring this number to be zero as a termination condition for each Mango-related operation defined in a test script ensured correct timing in execution of subsequent commands.
This solution functioned perfectly in all but one situation encountered in TOPdesk card testing: the list of options in the custom multiple choice selection control. While most interface updates in WebMango are executed directly from a call’s response, the so-called grids involved in the selection control are populated by JavaScript after the response has
6.3 In practice: TOPdesk Tool implementation for Mango var controlTypes = { "org.mangosdk.control.misc.Button": { attributes: ["disabled"], actions: ["click"] }, "org.mangosdk.control.image.ImageButton": { attributes: ["disabled"], actions: ["click"] }, "com.topdesk.mango.control.AbstractContextMenuControl": { children: { contextbutton: "org.mangosdk.control.image.ImageButton" } }, "org.mangosdk.control.text.TextBox": {
attributes: ["value", "readonly", "disabled"], supertype:
"com.topdesk.mango.control.AbstractContextMenuControl", actions: ["click", "keyPress"]
}, "org.mangosdk.control.selection.ComboBox": { attributes: ["disabled"], supertype: "com.topdesk.mango.control.AbstractContextMenuControl", children: { textbox: "org.mangosdk.control.text.TextBox", dropdownbutton: "org.mangosdk.control.misc.Button" } } };
Figure 6.5: An example control type definition, as used by Arsenic
Tool implementation for Mango 6.3 In practice: TOPdesk
been processed. This required a different termination condition for commands triggering the display of such a grid: to have all visible option values loaded on screen.
Figure 6.6: Typing text into the text-completing selection control
Figure 6.7: Opening the text-completing selection control option list
As mentioned earlier, TOPdesk’s user interface has not yet been completely converted to a Mango-based implementation. Among these non-Mango elements is its main navigational interface, consisting of an HTML frameset with a JavaScript-based menu structure and a window manager allowing several TOPdesk pages to be open within the same frameset at once. The existence of this window manager is required to be able to navigate between TOPdesk’s WebMango cards. Therefore, to be able to write test cases where navigation between cards is involved, support has been implemented for recognition of and interaction with TOPdesk’s window manager.
An issue with uniqueness of the identifiers generated by model and control inspection was discovered when testing a date selection control, which includes a calendar to allow the user to select the desired date. The clickable day labels generated by the calendar code were not discarded after the calendar itself had been removed from view, but instead kept hidden by setting their height and width to zero. However, when a user requested another instance of the calendar, these labels were not reused, but a new set of labels was generated, using identifiers made up of the date a particular label represented. This conflicted with the old labels still in existence, causing the new labels to be indistinguishable from the old by Arsenic. A particularly ungraceful solution to this problem was ultimately required, which made sure invisible calendar labels were ignored when searching for an identifier.
Controls using a complex set of event handlers were also troublesome to interact with. In particular, the autocompleting selection control required interaction methods different from those normally generated by Selenium. One of these methods was the ”type” action, inserted into a script whenever the user types some text into a text box, in this case the auto- completion box. Selenium’s implementation of this action involves setting the value of the text box and triggering itsonchangeevent. However, the autocompletion control expects to receive key press events for each key pressed by the user, in order to update displayed sug- gestions with each letter added to the text. This required replacement of recording whenever a text box value changed to recording of each key pressed, which fixed the autocompleter’s behavior on text input.
After this issue was fixed, another one popped up regarding the selection of a sugges- tion from the list displayed below the text box. Because not all available suggestions are prefetched when typing, instead loading them on demand while scrolling through the sug- gestion list, Arsenic is not able to select a suggestion without first triggering the scroll events