java - Selenium (Java) - 根据其他属性获取列表 id

标签 java list selenium selenium-webdriver webdriver

我有一个像这样的 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/

相关文章:

java - 更新android支持库依赖项后的问题

python - 测试列表列表以根据约束删除不需要的列表

list - 从嵌套列表中提取有序(根据值)集合,基于列表的最后一项,Java

python - selenium.common.exceptions.InvalidSelectorException : Message: An invalid or illegal selector was specified

java - 在 Selenium 的负面测试之间关闭和打开新的 WebDriver session 是否是正确的方法?

Python Selenium : How to close the tab that gets open automatically along with the tab that selenium opens

Java使用绝对路径时显示 "file does not exist"

java - 默认的@Transactional在底层是如何工作的?

java - 如何使用 Gradle 运行/部署 Google AppEngine 托管虚拟机

r - 交错存储在 R 中的列表中的矩阵行