首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java和Selenium:当id和选择器编写得不好时获取列表内容

Java和Selenium:当id和选择器编写得不好时获取列表内容
EN

Stack Overflow用户
提问于 2020-11-05 08:59:38
回答 1查看 78关注 0票数 0

我有一个,IMO,写得不好的标记,上面有一个不能修改的标记。我试图从li元素中获取文本和特定的选择器,但我遇到了麻烦。

代码语言:javascript
运行
复制
<hb-felt-radio id="residenceChoice" data-e2e-selector="residence-choice">
 <hb-felt>
  <div translate="">
   <fieldset>
    <div>
     <span translate="" id="residence-legend" data-e2e-selector="residence-question"> 
      How do you live today? 
     </span>
    </div>
    <ul class="hb-feltliste">
     <li>
      <input type="radio" id="residence-RENT_GOV" data-e2e-selector="residence-RENT_GOV">
       <div class="hb-label">
        <label class="hb-label-tekst" for="residence-RENT_GOV">
         Renting governmental
        </label>
       </div>
     </li>
     <li>
      <input type="radio" id="residence-RENT_PRIVATE" data-e2e-selector="residence-RENT_PRIVATE">
      <div class="hb-label">
       <label class="hb-label-tekst" for="residence-RENT_PRIVATE">Renting private</label>
      </div>
     </li>
    </ul>
   </fieldset>
  </div>
 </hb-felt>
</hb-felt-radio>

我试图从每个li中的标签中获取标签文本和for=,以及从select获取ID。但是,由于我对XPath的理解非常有限(因为我通常可以强制执行更好的选择器),我不知道如何获得它们。

我试过这样的事情

代码语言:javascript
运行
复制
driver.findElements(By.cssSelector("hb-felt-radio[data-e2e-selector='bosted-valg'] div/fieldset/ul/li")).stream().map(WebElement::getText).collect(Collectors.toList());

代码语言:javascript
运行
复制
driver.findElements(By.xpath("\"//hb-felt-radio[id='bosituasjonValg']//div//fieldset//ul//li")).stream().map(WebElement::getText).collect(Collectors.toList());

但我还没破解。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-05 09:13:54

你把xPath和CSS混为一谈。下面是如何使用CSS获取所需内容的示例:

代码语言:javascript
运行
复制
List<WebElement> labels = driver.findElements(
        new ByChained(By.cssSelector("#residenceChoice"),
                      By.cssSelector(".hb-label-tekst")
        ));
labels.forEach(webElement -> {
    System.out.println("Label text: " + webElement.getText());
    System.out.println("Label 'for': " + webElement.getAttribute("for"));
});

这是xPath的考试

代码语言:javascript
运行
复制
List<WebElement> labels = driver.findElements(By.xpath("//*[@id='residenceChoice']//label[@class='hb-label-tekst']"));
labels.forEach(webElement -> {
    System.out.println("Label text: " + webElement.getText());
    System.out.println("Label 'for': " + webElement.getAttribute("for"));
});
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64694015

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档