Java 如何在selenium中单击组合框搜索下拉列表?

Java 如何在selenium中单击组合框搜索下拉列表?,java,selenium,selenium-webdriver,combobox,dropdown,Java,Selenium,Selenium Webdriver,Combobox,Dropdown,我想从组合框搜索下拉列表中选择一个项目 网站的Html代码为: <div class="form-group"> <div class="row"> <div class="col-sm-6 margin-bottom"> <select id="CustomerCard_state" class="form-control m-b drop_state" tabindex="-1" name="

我想从组合框搜索下拉列表中选择一个项目

网站的Html代码为:

 <div class="form-group">
 <div class="row">
 <div class="col-sm-6 margin-bottom">
 <select id="CustomerCard_state" class="form-control m-b drop_state"                          tabindex="-1" name="CustomerCard.state" data-val-required="Please enter State"        data-val="true" style="display: none;">
 <option value="">Please select state</option>
 <option value="AK">Alaska</option>
 <option value="AL">Alabama</option>
 <option value="AZ">Arizona</option>
 <option value="AR">Arkansas</option>
 <option value="CA">California</option>
 <option value="CO">Colorado</option>
 <option value="CT">Connecticut</option>
 <option value="DE">Delaware</option>
 <option value="FL">Florida</option>
 <option value="GA">Georgia</option>
 <option value="HI">Hawaii</option>
 <option value="ID">Idaho</option>
 <option value="IL">Illinois</option>
 <option value="IN">Indiana</option>
 <option value="IA">Iowa</option>
 <option value="KS">Kansas</option>
 <option value="KY">Kentucky</option>
 <option value="LA">Louisiana</option>
 <option value="ME">Maine</option>
 <option value="MD">Maryland</option>
 <option value="MA">Massachusetts</option>
 <option value="MI">Michigan</option>
 <option value="MN">Minnesota</option>
 <option value="MS">Mississippi</option>
 <option value="MO">Missouri</option>
 <option value="MT">Montana</option>
 <option value="NE">Nebraska</option>
 <option value="NV">Nevada</option>
 <option value="NH">New Hampshire</option>
 <option value="NJ">New Jersey</option>
 <option value="NM">New Mexico</option>
 <option value="NY">New York</option>
 <option value="NC">North Carolina</option>
 <option value="ND">North Dakota</option>
 <option value="OH">Ohio</option>
 <option value="OK">Oklahoma</option>
 <option value="OR">Oregon</option>
 <option value="PA">Pennsylvania</option>
 <option value="RI">Rhode Island</option>
 <option value="SC">South Carolina</option>
 <option value="SD">South Dakota</option>
 <option value="TN">Tennessee</option>
 <option value="TX">Texas</option>
 <option value="UT">Utah</option>
 <option value="VT">Vermont</option>
 <option value="VA">Virginia</option>
 <option value="WA">Washington</option>
 <option value="WV">West Virginia</option>
 <option value="WI">Wisconsin</option>
 <option value="WY">Wyoming</option>
 </select>
 <div id="CustomerCard_state_chosen" class="chosen-container chosen-        container-single chosen-with-drop chosen-container-active" style="width: 100%;"   title="">
 <a class="chosen-single" tabindex="-1">
 <span>Please select state</span>
 <div>
 <b/>
 </div>
 </a>
 <div class="chosen-drop">
 <div class="chosen-search">
 <input type="text" autocomplete="off" tabindex="16"/>
 </div>
 <ul class="chosen-results">
 <li class="active-result result-selected" style="" data-option-array-       index="0">Please select state</li>
 <li class="active-result" style="" data-option-array-index="1">Alaska</li>
 <li class="active-result" style="" data-option-array-index="2">Alabama</li>
 <li class="active-result" style="" data-option-array-index="3">Arizona</li>
 <li class="active-result" style="" data-option-array- index="4">Arkansas</li>
 <li class="active-result" style="" data-option-array-index="5">California</li>
 <li class="active-result" style="" data-option-array-     index="6">Colorado</li>
 <li class="active-result" style="" data-option-array-     index="7">Connecticut</li>
 <li class="active-result" style="" data-option-array-index="8">Delaware</li>
 <li class="active-result" style="" data-option-array-index="9">Florida</li>
 <li class="active-result" style="" data-option-array-     index="10">Georgia</li>
 <li class="active-result" style="" data-option-array-index="11">Hawaii</li>
 <li class="active-result" style="" data-option-array-index="12">Idaho</li>
 <li class="active-result" style="" data-option-array-index="13">Illinois</li>
 <li class="active-result" style="" data-option-array-index="14">Indiana</li>
 <li class="active-result" style="" data-option-array-index="15">Iowa</li>
 <li class="active-result" style="" data-option-array-index="16">Kansas</li>
 <li class="active-result" style="" data-option-array-index="17">Kentucky</li>
 <li class="active-result" style="" data-option-array-index="18">Louisiana</li>
 <li class="active-result" style="" data-option-array-index="19">Maine</li>
 <li class="active-result" style="" data-option-array-index="20">Maryland</li>
 <li class="active-result" style="" data-option-array-index="21">Massachusetts</li>
 <li class="active-result" style="" data-option-array-index="22">Michigan</li>
 <li class="active-result" style="" data-option-array-index="23">Minnesota</li>
 <li class="active-result" style="" data-option-array-index="24">Mississippi</li>
 <li class="active-result" style="" data-option-array-index="25">Missouri</li>
 <li class="active-result" style="" data-option-array-index="26">Montana</li>
 <li class="active-result" style="" data-option-array-index="27">Nebraska</li>
 <li class="active-result" style="" data-option-array-index="28">Nevada</li>
 <li class="active-result" style="" data-option-array-index="29">New Hampshire</li>
 <li class="active-result" style="" data-option-array-index="30">New Jersey</li>
 <li class="active-result" style="" data-option-array-index="31">New Mexico</li>
 <li class="active-result" style="" data-option-array-index="32">New York</li>
 <li class="active-result" style="" data-option-array-index="33">North Carolina</li>
 <li class="active-result" style="" data-option-array-index="34">North Dakota</li>
 <li class="active-result" style="" data-option-array-index="35">Ohio</li>
 <li class="active-result" style="" data-option-array-index="36">Oklahoma</li>
 <li class="active-result" style="" data-option-array-index="37">Oregon</li>
 <li class="active-result" style="" data-option-array-index="38">Pennsylvania</li>
 <li class="active-result" style="" data-option-array-index="39">Rhode Island</li>
 <li class="active-result" style="" data-option-array-index="40">South Carolina</li>
 <li class="active-result" style="" data-option-array-index="41">South Dakota</li>
 <li class="active-result" style="" data-option-array-index="42">Tennessee</li>
 <li class="active-result" style="" data-option-array-index="43">Texas</li>
 <li class="active-result" style="" data-option-array-index="44">Utah</li>
 <li class="active-result" style="" data-option-array-index="45">Vermont</li>
 <li class="active-result" style="" data-option-array-index="46">Virginia</li>
 <li class="active-result" style="" data-option-array-index="47">Washington</li>
 <li class="active-result" style="" data-option-array-index="48">West Virginia</li>
 <li class="active-result" style="" data-option-array-index="49">Wisconsin</li>
 <li class="active-result" style="" data-option-array-index="50">Wyoming</li>
 </ul>
 </div>
 </div>
 <span class="text-danger drop_state-error " style="display:none;"/>
 </div> 

请选择州
阿拉斯加州
阿拉巴马州
亚利桑那州
阿肯色州
加利福尼亚
科罗拉多州
康涅狄格州
特拉华州
佛罗里达州
佐治亚州
夏威夷
爱达荷州
伊利诺伊州
印第安纳州
爱荷华州
堪萨斯州
肯塔基州
路易斯安那州
缅因州
马里兰
马萨诸塞州
密歇根
明尼苏达州
密西西比
密苏里州
蒙大拿
内布拉斯加州
内华达州
新罕布什尔州
新泽西州
新墨西哥州
纽约
北卡罗来纳州
北达科他州
俄亥俄州
奥克拉荷马
俄勒冈
宾夕法尼亚
罗德岛
南卡罗来纳州
南达科他州
田纳西州
得克萨斯州
犹他州
佛蒙特州
弗吉尼亚州
华盛顿
西弗吉尼亚州
威斯康星州
怀俄明州
请选择州
  • 请选择状态
  • 阿拉斯加 阿拉巴马州 亚利桑那州 阿肯色州 加利福尼亚州 科罗拉多州 康涅狄格州数据选项数组-index=“7”> 特拉华州 佛罗里达州 格鲁吉亚 夏威夷 爱达荷州 伊利诺伊州 印第安纳州 爱荷华州 堪萨斯州 肯塔基州 路易斯安那州 缅因州 马里兰州 马萨诸塞州 密歇根州 明尼苏达州 密西西比州 密苏里州 蒙大拿州 内布拉斯加州 内华达州 新罕布什尔州 新泽西州 新墨西哥州 纽约 北卡罗来纳州 北达科他州 俄亥俄州 俄克拉荷马州 俄勒冈州 宾夕法尼亚州 罗德岛州 南卡罗来纳州 南达科他州 田纳西州 德克萨斯州 犹他州
  • 佛蒙特州 弗吉尼亚州 华盛顿 西弗吉尼亚州 威斯康星州 怀俄明州
我的代码是:

    WebElement select = BrowserSetup.driver.findElement(By.xpath("//div[contains(@class,'chosen-container')]"));
    select.click();

    List<WebElement> dropDowns = BrowserSetup.driver.findElements(By.className("chosen-results"));

    WebElement dropDownOne = dropDowns.get(0); // perform further action
    dropDownOne.click();
WebElement select=BrowserSetup.driver.findElement(By.xpath(“//div[contains(@class,'selected-container')]”);
选择。单击();
列表下拉列表=BrowserSetup.driver.findElements(By.className(“所选结果”);
WebElement dropDownOne=dropDowns.get(0);//采取进一步行动
单击();
它正在引发一个异常: org.openqa.selenium.ElementNotVisibleException:元素在第行不可见: WebElement dropDownOne=dropDowns.get(0);单击()

我还厌倦了用下面的代码添加显式等待

    WebElement select =     BrowserSetup.driver.findElement(By.xpath("//div[contains(@class,'chosen-  container')]"));
    select.click();

    WebDriverWait wait = new WebDriverWait(BrowserSetup.driver, 20);
    wait.until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.className("chosen-results")));

    List<WebElement> dropDowns = BrowserSetup.driver.findElements(By.className("chosen-results"));

    WebElement dropDownOne = dropDowns.get(0); // perform further action
    dropDownOne.click();
WebElement select=BrowserSetup.driver.findElement(By.xpath(“//div[contains(@class,'selected-container')]);
选择。单击();
WebDriverWait wait=新的WebDriverWait(BrowserSetup.driver,20);
wait.until(通过(By.className(“所选结果”))查询的所有元素的预期条件、可见性);
列表下拉列表=BrowserSetup.driver.findElements(By.className(“所选结果”);
WebElement dropDownOne=dropDowns.get(0);//采取进一步行动
下拉菜单。
Actions actions = new Actions(BrowserSetup.driver);

WebElement select = BrowserSetup.driver.findElement(By.xpath("//div[contains(@class,'chosen-container')]"));
List<WebElement> dropDowns = BrowserSetup.driver.findElements(By.className("chosen-results"));

actions.moveToElement(select).click().moveToElement(dropDowns.get(0)).click().build().perform();
WebElement dropdown = BrowserSetup.driver.findElement(By.id("CustomerCard_state"));
Select select = new Select(dropdown);

// to choose Alaska
select.selectByValue("AK");
// or
select.selectByVisibleText("Alaska");
BrowserSetup.driver.findElements(By.xpath("//ul[@class='chos‌​en-results']/li"));
WebDriverWait wait = new WebDriverWait(BrowserSetup.driver, 20);
wait.until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.className("chosen-results")));
WebDriverWait wait = new WebDriverWait(BrowserSetup.driver, 20);
wait.until(ExpectedConditions.elementToBeClickable(By.className("chosen-results")));