CustomWebResolver – Combo boxes
Combo boxes mostly consist of text fields or buttons. If the user clicks that component, a list of items is shown. The user can then select an item. To resolve a combo box correctly, you need to map the combo box with the text field and the components for the list and its items.
HTML SELECT
nodes will be mapped to combo boxes automatically.
The selection of the list item will be recorded as a Selection node.
Class | Required components and sub-items |
---|---|
ComboBox | Container component which contains a text field and the button. |
List:ComboBoxList | Represents the List component, contains all list entries. |
Item:ComboBoxListItem | Represents the individual list entry. |
Optional sub-items | |
Button:ComboBoxButton | (Optional) Represents the button opening the selection list. |
TextField:ComboBoxTextField | (Optional) Represents the text field receiving text input and showing the selected item. |
CheckBox:ComboBoxListItemCheckBox | (Optional) Represents a checkbox inside the list entry. |
Icon:ComboBoxListItemIcon | (Optional) Represents an icon inside the list entry. |
It is sufficient to use the standard mappings for list items for the selection list. See subsection 51.1.6.
Sample:
HTML code for a combo box:
<div class="combobox-wrapper"> <div role="combobox" aria-expanded="true" aria-owns="ex1-listbox" aria-haspopup="listbox" id="ex1-combobox"> <input type="text" aria-autocomplete="list" aria-controls="ex1-listbox" id="ex1-input" aria-activedescendant=""> </div> <ul aria-labelledby="ex1-label" role="listbox" id="ex1-listbox" class="listbox"> <li class="result" role="option" id="result-item-0">Leek</li> <li class="result" role="option" id="result-item-1">Lemon</li> </ul> </div>
A ComboBox
consists of a container element showing the current
selection and a list of the selectable items. In the example the DIV
object
contains the list plus the ComboBox
itself. Often the list is
defined somewhere completely different in the DOM. You can find it by opening
the list and checking the developer tool of the browser. Alternatively, you can get
the CSS classes of the list object and the list entries by recording a click
to a list item and checking the qfs:class
entry of the Extra features
table of the recorded components.
genericClasses: - List:ComboBoxList: listbox - Item:ComboBoxListItem: class: result ancestor: List:ComboBoxList - ComboBox: role=combobox
With this ComboBox
we have several options for the mapping.
When you have contact to the developers of the application it is best to
ask them which attributes define a certain component class. If not,
you have to decide which attributes best represent a certain
class. You should check this with other GUI elements of the same type.
Also, you should check similar GUI elements for the same
attributes. In this case maybe there is another, hopefully unique, attribute,
or you need to make it more specific by adding ancestor:
...
In the example above, role=combobox
should be precise enough for the ComboBox
itself, just as role=listbox
or alternatively
css: listbox
for the list. It probably will not make a big
difference which one you choose. If normal lists use the same attribute you
can omit the class type, i.e. you would just map
List: listbox
and Item:ListItem:
.
This does not affect the functionality the combo box within QF-Test.
However, css: result
and role=option
, used for
the list items, could very well be used with other elements, too.
Therefore, we will add ancestor: List:ComboBoxList
to be sure.