【发布时间】:2022-01-11 03:10:45
【问题描述】:
HTML 代码:
<div id="ajax_listOfOptions" style="display: block; top: 243px; left: 373px; z-index: 10009;">
<div id="13020007" class="optionDivSelected">Infosys Ltd.</div>
<div id="14094980" class="optionDiv">India Infrastructure Trust</div>
<div id="13020033" class="optionDiv">Tata Consultancy Services Ltd.</div>
<div id="12150008" class="optionDiv">Reliance Industries Ltd.</div>
<div id="14030001" class="optionDiv">State Bank of India</div>
<div id="14030055" class="optionDiv">HDFC Bank Ltd.</div>
<div id="12520002" class="optionDiv">Hindustan Unilever Ltd.</div>
<div id="14080001" class="optionDiv">Housing Development Finance Corporation Ltd.</div>
<div id="14030056" class="optionDiv">ICICI Bank Ltd.</div>
<div id="14060023" class="optionDiv">Bajaj Finance Ltd.</div>
</div>
示例代码:
List<WebElement>li=driver.findElements(By.id("ajax_listOfOptions"));
for(WebElement wb:li)
{
if(wb.getText().contains("Tata"))
System.out.print(wb.getText());
}
这应该只打印包含“Tata”的字符串(即 Tata Consultancy Services),但代码正在打印列表中的所有字符串
注意:该列表包含填充有 ajax 自动建议的字符串。
输出:
Infosys Ltd.
India Infrastructure Trust
Tata Consultancy Services Ltd.
Reliance Industries Ltd.
State Bank of India
HDFC Bank Ltd.
Hindustan Unilever Ltd.
Housing Development Finance Corporation Ltd.
ICICI Bank Ltd.
Bajaj Finance Ltd.
【问题讨论】:
-
您需要遍历
driver.findElements(By.id("ajax_listOfOptions"));返回的列表中唯一项的子元素。 -
当我使用 List
li=driver.findElements(By.className("optionDiv"));那么它工作正常,但不是上面的代码。为什么? -
因为您上面的代码找到了
div id="ajax_listOfOptions"并对其执行了getText -
如果您使用
By.className("optionDiv"),则永远不会在列表中选择包含optionDivSelected的Infosys Ltd.。请参阅下面的answer。 -
是的,明白了。非常感谢
标签: java html selenium xpath css-selectors