当前位置: 首页 > 知识库问答 >
问题:

Selenium(Java)-基于其他属性获取列表ID

闾丘坚诚
2023-03-14

我有一个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-tag和label文本将有所不同(但数据选择器将始终相同)。

对于Selenium来说,最好的方法是什么来完成这些操作,并列出所有的id标签或标签文本?

共有1个答案

龙欣德
2023-03-14

这将选择具有li父元素的所有label元素,父元素的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());
 类似资料:
  • 问题内容: 我目前有一张看起来像这样的表: 我需要做的是获得“ 费率”列的信息,但每个名称仅获得一次。例如,我有三行John Doe,每行的比率为8。我需要将这些行的比率设为8,而不是24,因此它为每组名称都对比率进行一次计数。 当然是行不通的,因为我试图对比率列而不是名称求和。我知道在对单个记录进行计数时,我可以使用,这就是我试图从中得到的行为类型。 我怎样才能为每个名字获得一个比率? 提前致谢

  • 我正在使用pyspark下面是我的数据

  • 我有一个名为Trade的实体,它可以映射到包含属性的表。这个实体也有一个字段,存储来自另一个表的值。我的贸易表包含第二个表的主键。我知道如何获得整个第二个表作为实体在我的贸易实体,但我只想要1列。 如你所见,我尝试了,但是连接是在贸易实体的主密钥上执行的。我如何使用注释从贸易表中选择外键,将其连接到第二/第三表,并直接只从col2/col3中获取值?任何建议都很感激 餐桌贸易: 表2: 表3: 现

  • 问题内容: 当存在时,是否有可能获得全部列表?是否为此准备了电话,还是我必须编写一个foreach循环,如: 问题答案: Java 8及更高版本: 如果需要确保得到结果,则必须将最后一行更改为: Java 7及以下版本: Java 8之前的标准集合API不支持这种转换。您必须编写一个循环(或将其包装在您自己的“地图”函数中),除非您使用一些更高级的集合API /扩展。 (您的Java代码段中的行正

  • 我正在尝试使用Java8流来组合列表。如何从两个现有列表中获得“对称差异列表”(只存在于一个列表中的所有对象)。我知道如何获取intersect列表,也知道如何获取union列表。 示例代码:

  • 问题内容: 请查看下面的html代码段: 当td [1]包含“ Single”时,我试图声明td [2]的值。我试过以下的各种变体: //td[2][(contains(text(),’£14.00’))]/../td[1][(contains(text(),’Single’))]] 我已经在其他地方成功使用了类似的符号-但在这里无济于事…我认为这取决于td [1]具有嵌套元素,但不确定。 有人能