如何计数只显示在网页上的元素.硒

本文关键字:元素 网页 何计数 显示 | 更新日期: 2023-09-27 17:53:26

我有一个有两个选项卡的网页。

当我得到一个标签上的元素计数时,它会给我两个标签的计数,而不是我点击的那个标签的计数。

因此,如果我想检查Tab1中存在的元素而不是Tab2中存在的元素,我不能这样做,因为我在两个选项卡上得到相同的结果。

if (driver.FindElements(By.XPath("//div[contains(text(), 'Dummy Text')]")).Count != 0)
{
    // Failed Test message ;
}

在Tab1上,我期望计数应该是0,因为这个文本不显示,在Tab2上计数应该是8,但在两个选项卡上计数都是8。

我怎么能得到元素的计数显示在我的页面上,而不是在后台?

我确信这是因为网页上的选项卡和硒考虑这两个选项卡作为相同的网页内容。

如何计数只显示在网页上的元素.硒

Selenium将返回DOM中的所有对象,而不仅仅是那些对用户可见的对象。

我不相信有任何XPath或CSS选择器允许您只选择可见的元素。我可以想到一个潜在的令人讨厌的XPath,它可以确保没有父元素有显示:没有,但不知道这是否真的有效,而且听起来太可怕和复杂,甚至无法考虑。

您需要遍历每个返回的元素,并检查"显示"是否返回false。我很想扩展Driver类,让它有一个FindDisplayedElements方法,它会为你包装这个功能。

然而,如果你使用RemoteWebDriver,这种方法在API调用方面可能会很昂贵。另一种方法是确保父对象是隐藏的,因为所有子对象也将继承该行为