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");
}
我正在将 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"); }