Selenium 跳过具有隐藏属性的 html 元素

Selenium skip html element with hidden attribute

我正在将 selenium 与 java 结合使用,我正在尝试测试搜索场景。在我执行搜索后,不符合搜索关键字的 html 元素被 hidden 属性隐藏(参见下面的示例,第一个元素与搜索条件不匹配并且第二个做):

<ion-item-sliding class="item-wrapper" hidden="">
  <button class="item item-block item-md" ion-item="">
    <p>I am hidden</p>
  </button>
</ion-item-sliding>

<ion-item-sliding class="item-wrapper">
  <button class="item item-block item-md" ion-item="">
    <p>I am not</p>
  </button>
</ion-item-sliding>

我的目标是在可见元素(示例中的第二个)中找到文本。当我使用简单选择器时

//button[@class='item item-block item-md']

找到隐藏元素,所以我使用这样的选择器

//ion-item-sliding[@class='item-wrapper' and not @type='hidden']//button[@class='item item-block item-md']...

但运气不好。请就选择器提出任何 ideas/documentation 的建议。

您在这里需要的是利用 getAttribute 函数。此调用的作用是它 return 是一个属性值(如果已设置),否则为 null。

您可以使用 FindElements 传递您的选择器,并迭代找到的元素,并且仅 return

所在的元素
getAttribute("hidden") != null

希望对您有所帮助。

在获取文本之前使用 isDisplayed() 方法查看元素在浏览器上是否可见,像这样

List <WebElement> elements = driver.findElements(By.cssSelector(".item.item-block.item-md"));
      for(WebElement e:elements)
      { 
        if(e.isDisplayed())
          String text = e.getAttribute("innerText");
      }