drop down menu - Unable to select a dropdown by value, visible text or index using selenium select command -


i unable select option dynamically using select commands value, visible text or index, workaround can use actions click select , select particular option or sending keys arrowdown not best way implement because want use same select function globally automate ui on website keyword function.

sample script below:

webelement selectelement = driver.findelement(by.xpath(.//*[@id='xyzpopupform:j_idt90:country_label']));  actions selectitem = new actions(driver); selectitem.movetoelement(selectelement).click().perform();   selectitem.sendkeys(keys.arrow_down).sendkeys(keys.arrow_down).perform(); selectitem.sendkeys(keys.enter).perform(); 

html code :

<tr> <td> <label for="xyzpopupform:j_idt90:country">country</label> </td> <td> <div id="xyzpopupform:j_idt90:country" class="ui-selectonemenu ui-widget ui-state-default ui-corner-all"> <div class="ui-helper-hidden-accessible"> <div class="ui-helper-hidden-accessible"> <select id="xyzpopupform:j_idt90:country_input" tabindex="-1" name="xyzpopupform:j_idt90:country_input"> <option selected="selected" disabled="disabled">--select--</option> <option value="af">afghanistan</option> <option value="ax">Ă…land islands</option> <option value="al">albania</option> <option value="dz">algeria</option> <option value="as">american samoa</option> <option value="ad">andorra</option> <option value="ao">angola</option> <option value="ai">anguilla</option> <option value="aq">antarctica</option> <option value="ag">antigua , barbuda</option> <option value="ar">argentina</option> <option value="am">armenia</option> <option value="aw">aruba</option> <option value="au">australia</option> <option value="at">austria</option> <option value="az">azerbaijan</option> <option value="bs">bahamas</option> <option value="bh">bahrain</option> <option value="bd">bangladesh</option> <option value="bb">barbados</option> <option value="by">belarus</option> <option value="be">belgium</option> <option value="bz">belize</option> <option value="bj">benin</option> <option value="bm">bermuda</option> <option value="bt">bhutan</option> <option value="bo">bolivia, plurinational state of</option> <option value="bq">bonaire, sint eustatius , saba</option> <option value="ba">bosnia , herzegovina</option> <option value="bw">botswana</option> <option value="bv">bouvet island</option> <option value="br">brazil</option> <option value="io">british indian ocean territory</option> <option value="bn">brunei darussalam</option> <option value="bg">bulgaria</option> <option value="bf">burkina faso</option> <option value="bi">burundi</option> <option value="kh">cambodia</option> <option value="cm">cameroon</option> <option value="ca">canada</option> <option value="cv">cape verde</option> </select> </div> 

updated script:

webdriverwait wait = new webdriverwait(driver, 10); webelement selectelement = driver.findelement(by.id("xyzpopupform:j_idt90:country_input")); ((javascriptexecutor)driver).executescript("var select = arguments[0]; for(var = 0; < select.options.length; i++){ if(select.options[i].text == arguments[1]){ select.options[i].selected = true; } } ", selectelement, "afghanistan"); wait.until(expectedconditions.visibilityofelementlocated(by.id("xyzpopupform:j_idt90:country_input"))); 

screenshot of html more clear :

https

seems finding incorrect element by.xpath drop-down id looks xyzpopupform:j_idt90:country_input finding id xyzpopupform:j_idt90:country_label in by.xpath, may problem. try using select correct drop-down id below :-

webelement selectelement = driver.findelement(by.id("xyzpopupform:j_idt90:country_input"));  //now use select select select = new select(selectelement); select.selectbyvisibletext("afghanistan"); 

or

sel.selectbyindex(1); 

or

sel.selectbyvalue("af"); 

edited :- if above not work due visibility of element should try using javascriptexecutor below :-

webelement selectelement = driver.findelement(by.id("xyzpopupform:j_idt90:country_input"));  ((javascriptexecutor)driver).executescript("var select = arguments[0]; for(var = 0; < select.options.length; i++){ if(select.options[i].text == arguments[1]){ select.options[i].selected = true; } }", selectelement, "afghanistan"); 

hope works...:)


Comments