我正在尝试访问下拉列表的元素,html如下:
<ul class="select2-results" role="listbox" id="select2-results-3">
<li class="select2-results-dept-0 select2-result select2-result-selectable select2-highlighted" role="presentation">
<div class="select2-result-label" id="select2-result-label-5" role="option">
<span class="select2-match"></span>Select the category of your business.
</div>
</li>
<li class="select2-results-dept-0 select2-result select2-result-selectable" role="presentation">
<div class="select2-result-label" id="select2-result-label-6" role="option">
<span class="select2-match"></span>Attractions/Things To Do
</div>
</li>
<li class="select2-results-dept-0 select2-result select2-result-selectable" role="presentation">
<div class="select2-result-label" id="select2-result-label-7" role="option">
<span class="select2-match"></span>Bank
</div>
</li>
<li class="select2-results-dept-0 select2-result select2-result-selectable" role="presentation">
<div class="select2-result-label" id="select2-result-label-8" role="option">
<span class="select2-match"></span>Bar
</div>
</li>
<li class="select2-results-dept-0 select2-result select2-result-selectable" role="presentation">
<div class="select2-result-label" id="select2-result-label-9" role="option">
<span class="select2-match"></span>Book Store
</div>
</li>
<li class="select2-results-dept-0 select2-result select2-result-selectable" role="presentation">
<div class="select2-result-label" id="select2-result-label-10" role="option">
<span class="select2-match"></span>Concert Venue
</div>
</li>
<li class="select2-results-dept-0 select2-result select2-result-selectable" role="presentation">
<div class="select2-result-label" id="select2-result-label-11" role="option">
<span class="select2-match"></span>Food/Grocery
</div>
</li>
<li class="select2-results-dept-0 select2-result select2-result-selectable" role="presentation">
<div class="select2-result-label" id="select2-result-label-12" role="option">
<span class="select2-match"></span>Hotel
</div>
</li>
<li class="select2-results-dept-0 select2-result select2-result-selectable" role="presentation">
<div class="select2-result-label" id="select2-result-label-13" role="option">
<span class="select2-match"></span>Local Business
</div>
</li>
<li class="select2-results-dept-0 select2-result select2-result-selectable" role="presentation">
<div class="select2-result-label" id="select2-result-label-14" role="option">
<span class="select2-match"></span>Movie Theatre
</div>
</li>
<li class="select2-results-dept-0 select2-result select2-result-selectable" role="presentation">
<div class="select2-result-label" id="select2-result-label-15" role="option">
<span class="select2-match"></span>Museum/Art Gallery
</div>
</li>
<li class="select2-results-dept-0 select2-result select2-result-selectable" role="presentation">
<div class="select2-result-label" id="select2-result-label-16" role="option">
<span class="select2-match"></span>Outdoor Gear/Sporting Goods
</div>
</li>
<li class="select2-results-dept-0 select2-result select2-result-selectable" role="presentation">
<div class="select2-result-label" id="select2-result-label-17" role="option">
<span class="select2-match"></span>Real Estate
</div>
</li>
<li class="select2-results-dept-0 select2-result select2-result-selectable" role="presentation">
<div class="select2-result-label" id="select2-result-label-18" role="option">
<span class="select2-match"></span>Restaurant/Cafe
</div>
</li>
<li class="select2-results-dept-0 select2-result select2-result-selectable" role="presentation">
<div class="select2-result-label" id="select2-result-label-19" role="option">
<span class="select2-match"></span>School
</div>
</li>
<li class="select2-results-dept-0 select2-result select2-result-selectable" role="presentation">
<div class="select2-result-label" id="select2-result-label-20" role="option">
<span class="select2-match"></span>Shopping/Retail
</div>
</li>
<li class="select2-results-dept-0 select2-result select2-result-selectable" role="presentation">
<div class="select2-result-label" id="select2-result-label-21" role="option">
<span class="select2-match"></span>Spas/Beauty/Personal Care and many more.
</div>
</li>
</ul>
我正在使用的代码是:
WebElement dr = driver.findElement(By.xpath("//*[@id =\"select2-chosen-3\"]"));
dr.click();
List<WebElement> options = driver.findElements(By.xpath("//*[@id=\"category\"]"));
for(WebElement option : options) {
if(option.getText().trim().contains("Shopping/Retail")) {
option.click();
}
}
问题在于它一直从下拉列表中选择“银行”,而不是“购物/零售”
答案 0 :(得分:1)
好的,我想我明白您的要求。首先单击该select_list,现在将弹出带有选项集的下拉列表,现在您单击select_list后立即编写此代码。
driver.findElement(By.xpath("//ul[@id='select2-results-3']/li/div/span[normalize-space()='Attractions/Things To Do']")).click();
如果您想更改元素,然后用所需的文本更改文本Attractions/Things To Do
,则对您有用。
答案 1 :(得分:1)
尝试下面的代码来选择所需的元素:
driver.findElement(By.id("select2-results-3")).click();
driver.findElement(By.xpath("//ul[@id='select2-results-3']//div[contains(.,'Shopping/Retail')]")).click();
您还可以遍历all元素,并在找到该元素后点击一下:
List<WebElement> all = driver.findElements(By.cssSelector('#select2-results-3 li .select2-result-label'));
for(int i=0;i<all.size();i++){
if(all.get(i).getText().contains("Shopping/Retail")){
all.get(i).click();
break;
}
}
让我知道那里是否有东西。
答案 2 :(得分:1)
根据您共享的HTML和代码试用,一旦访问下拉菜单,便会在文本为购物/零售的元素上调用click()
,则可以使用以下解决方案:
List<WebElement> options = driver.findElements(By.xpath("//ul[@class='select2-results' and @id='select2-results-3']//li[contains(@class,'select2-result-selectable')]/div[@class='select2-result-label'][contains(@id,'select2-result-label-')]"));
for(WebElement option : options) {
if(option.getText().contains("Shopping/Retail")) {
option.click();
break;
}
}
答案 3 :(得分:1)
您可以使用以下方法从下拉列表中选择一个值:
1)通过使用sendkeys()方法直接传递值“购物/零售”
2)如果上述方法不起作用,请使用选择类:
首先检查下拉框并存储在webElement中:
WebElement business=driver.findElementby*("");
Select dropDown=new Select(business);
然后您可以使用三种方法:
dd.selectByIndex(14); //seems to be the 15th value in drop down
dd.selectByText("Shopping/Retail");
3)。使用动作类
如果这些都没有锻炼,请发布您的查询。