selenium - 无法使用 selenium webdriver 访问下拉列表的元素
问题描述
我正在尝试访问下拉列表的元素,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();
}
}
问题是它一直从下拉菜单中选择“银行”而不是“购物/零售”
解决方案
好的,我想我明白你在问什么。首先单击该 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
用您需要的文本更改文本,它会为您工作。
推荐阅读
- laravel - 在 Laravel 更新功能中,更新图像时它也会在文件夹中更新,但是当我不更新图像并更新其他文本字段时,也会删除图片
- javascript - 无效数字汇总 mkdirp JavaScript
- python - Python 中的逗号正在我的 CSV 中移动我的数据。我该如何阻止这个?
- java - 在 java 而不是 pom.xml 中以编程方式使用 Swagger codegen maven 插件
- python - 无法在 Python 中使用超级初始化访问父属性
- discord - 如何在 discord.js 中为斜线命令创建选项列表
- spring - Java返回错误:期望一个int但得到一个字符串
- vuejs3 - 如何将子内容放在父级中而不在Vue JS上导入
- go - go get -u -v 中的 -v 开关是什么
- javascript - 如何使用 HTML 和 Javascript 中的 ID 显示已点击的视频?