【问题标题】:Unable to select a dropdown by value, visible text or index using selenium select command无法使用 selenium 选择命令按值、可见文本或索引选择下拉列表
【发布时间】:2016-08-03 19:04:29
【问题描述】:

我无法使用按值、可见文本或索引的选择命令动态选择选项,解决方法是我可以使用操作单击选择并选择特定选项或发送键 ArrowDown 这不是最佳实现方式,因为我想在全球范围内使用相同的选择功能来自动化整个网站的 UI,就像关键字功能一样。

下面的示例脚本:

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 代码:

<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 and 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 and Saba</option>
<option value="BA">Bosnia and 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>

更新脚本:

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 i = 0; i < 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")));

更清晰的 HTML 屏幕截图:

【问题讨论】:

  • 为什么不能使用Select??有没有例外???还需要共享下拉 HTML...

标签: selenium drop-down-menu


【解决方案1】:

似乎您在By.xpath 中找到了不正确的元素By.xpath,您的下拉ID 看起来像XYZPopUpForm:j_idt90:country_input,但您在By.xpath 中找到了idXYZPopUpForm:j_idt90:country_label,这可能是问题所在。尝试使用Select 和正确的下拉id 如下:-

WebElement selectElement = driver.findElement(By.id("XYZPopUpForm:j_idt90:country_input"));

//Now use select
Select select = new Select(selectElement);
select.selectByVisibleText("Afghanistan");

sel.selectByIndex(1);

sel.selectByValue("AF");

已编辑:- 如果由于元素的可见性导致上述操作无效,您应该尝试使用JavascriptExecutor,如下所示:-

WebElement selectElement = driver.findElement(By.id("XYZPopUpForm:j_idt90:country_input"));

((JavascriptExecutor)driver).executeScript("var select = arguments[0]; for(var i = 0; i < select.options.length; i++){ if(select.options[i].text == arguments[1]){ select.options[i].selected = true; } }", selectElement, "Afghanistan");

希望它有效...:)

【讨论】:

  • @Saurabh....辛苦了!!但它不起作用我得到“无法选择元素---元素不可见:元素当前不可见并且可能无法被操纵”。
  • @Camreyjones 如果以上由于元素的可见性而不起作用,您应该尝试使用 JavascriptExecutor..查看更新的答案...:)
  • 又一次辉煌的努力!!它看起来像是在后台工作,因为我在日志文件中没有收到任何错误,但是 UI 没有显示此更改,当我单击下拉菜单两次然后选择值“阿富汗”时。请问你在这里等一下吗?
  • @Camreyjones 是的,你需要在这里实现 WebDriverWait 直到元素出现...
  • 再次感谢我从昨天开始就离开了,我只是再次尝试等待,但它似乎没有更新 UI 可能我给错了,请与我裸露,因为我是这些复杂事物的新手.我在上面提到了我的脚本作为“更新的脚本”。谢谢
猜你喜欢
  • 2016-11-21
  • 2019-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-19
  • 1970-01-01
相关资源
最近更新 更多