我有一个像这样的 html 片段:
<div class="hb-felt">
<ul class="hb-feltlist">
<li data-selector="refusal_alt" class="ng-star-inserted">
<input class="hb-checkbox ng-untouched ng-pristine ng-valid"
disableelementilesemodus="" type="checkbox"
id="refusalTooExpensive">
<label class="hb-label" for="refusalTooExpensive">Too
expensive
</label>
</li>
<li data-selector="refusal_alt" class="ng-star-inserted">
<input class="hb-checkbox ng-untouched ng-pristine ng-valid"
disableelementilesemodus="" type="checkbox"
id="refusalInvalid">
<label class="hb-label" for="refusalInvalid">Invalid</label>
</li>
<li data-selector="refusal_alt" class="ng-star-inserted">
<input class="hb-checkbox ng-untouched ng-pristine ng-valid"
disableelementilesemodus="" type="checkbox"
id="refusalEconomy">
<label class="hb-label" for="refusalEconomy">Economy-related
refusal</label>
</li>
<li data-selector="refusal_alt" class="ng-star-inserted">
<input class="hb-checkbox ng-untouched ng-pristine ng-valid"
disableelementilesemodus="" type="checkbox"
id="refusalLackingPrimaryFunds">
<label class="hb-label" for="refusalLackingPrimaryFunds">Lacking
primary funds</label>
</li>
<li data-selector="refusal_alt" class="ng-star-inserted">
<input class="hb-checkbox ng-untouched ng-pristine ng-valid"
disableelementilesemodus="" type="checkbox"
id="refusalSecondaryFunds">
<label class="hb-label" for="refusalSecondaryFunds">Lacking
secondary funds</label>
</li>
<li data-selector="refusal_alt" class="ng-star-inserted">
<input class="hb-checkbox ng-valid ng-dirty ng-touched"
disableelementilesemodus="" type="checkbox" id="refusalOther">
<label class="hb-label" for="refusalOther">Other</label>
</li>
</ul>
</div>
如您所见,每个列表元素都包含标签 data-selector="refusal_alt"
。这对于所有元素都是相同的。
这是一个动态创建的列表,id 标签和标签文本会有所不同(但数据选择器始终相同)。
Selenium 完成此操作并列出所有 id 标签或标签文本的最佳方法是什么?
最佳答案
这应该选择所有 label
具有 li
的元素带有 data-selector
的父元素属性设置为 refusal_alt
。然后,您迭代匹配的元素,对于每个匹配的元素,您确定它的文本并将结果放入结果列表中:
List<WebElement> matchedElements = driver.findElement(By.cssSelector("li[data-selector='refusal_alt'] > label"));
List<String> labels = matchedElements.stream().map(element -> element.getText()).collect(Collectors.toList());
或更短(标签):
List<String> labels = driver.findElement(By.cssSelector("li[data-selector='refusal_alt'] > label")).stream().map(element->element.getText()).collect(Collectors.toList());
(ID):
List<String> ids= driver.findElement(By.cssSelector("li[data-selector='refusal_alt'] > label")).stream().map(element->element.getAttribute("for")).collect(Collectors.toList());
关于java - Selenium (Java) - 根据其他属性获取列表 id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52442498/