Selenium provides select method to select an item/option from drop-down lists and comboboxes. But this will work for simple listboxes only. For complex comboboxes like textbox with image, clicking the image will open drop-down list will not support normal methods. Here I am listing out different ways to handle select boxes. Thanks to bloggers as I read these from one and more blogs.
Exmaples:
Consider the following example where there are two drop-downs, one for the states and the other for counties.
The county drop-down is populated based on the state selection.
You can see in the site above, when the state is selected, a spinner shows up for a few seconds before the county drop-down is populated.
Here we are using waitForCondition as it allows to mention explicitly TIMEOUT whereas selenium provided waitFor allows only default TIMEOUT value.
1. Dependent drop-down Lists using waitForCondition
Using waitForCondition and some JavaScript, we wait until display style attribute changes to ‘none’ in the snippet below.
- selenium.open("myURL");
- selenium.selectFrame("mainFrame");
- selenium.select("state", "label=California");
- selenium.waitForCondition("var value = selenium.browserbot.findElementOrNull('loading_county_drop_down'); value.style.display == 'none'","10000");
- selenium.select("county", "label=Amador County");
2. Using waitForCondition for multiple Conditions
- selenium.waitForCondition("var value = selenium.browserbot.findElementOrNull('loading_county_drop_down'); value.style.display == 'none' || selenium.browserbot.getUserWindow().document.form.county.options[0].text == 'Select a county of California';", "10000");
3. Using waitForNotVisible and/or waitForSelectOptions
- selenium.waitForNotVisible("loading_county_drop_down");
- selenium.waitForSelectOptions("county","regexpi:Amador County");
4. Progress Messages:
You may have seen many AJAX intensive sites displaying a ‘Loading..’ or ‘Saving..’ or ‘Processing…’ message when a button or a link is clicked. In such cases you may find this to be helpful to wait for the status text to change or disappear.
Assuming that a ‘Saving’ message is displayed within a div tag when a fictional ‘Save’ button is clicked in the snippet below:
- selenium.waitForCondition("var value = selenium.getText(\"//div[@class='save-text']\");value != \"Saving\"", "20000");
- selenium.waitForCondition("selenium.browserbot.getUserWindow().Sys.WebForms.PageRequestManager.getInstance().get_isInAsyncPostBack() == false;","10000");
- selenium.waitForCondition("selenium.browserbot.getUserWindow().$.active == 0", "10000");
Comments
Post a Comment