为什么 XPath 计算的子串数量错误?
Why is XPath counting the wrong number of substrings?
我正在尝试计算部分文本为 "25516.B1-"
的元素出现在页面上的次数。
现在我正在尝试这个。然而它 returns 17 即使页面上只有 3 个元素实例。
Count 3 basiskerntaken
${count}= Get Element Count //*[contains(.,"25516.B1-")]
Log To Console ${count}
将通用的 xpath 更新为更具体的 xpath 如下:
${count}= Get Element Count //tag_name[contains(.,"25516.B1-")]
更规范:
${count}= Get Element Count //tag_name[contains(.,"25516") and contains(.,"B1-")]
我将使用通用的 XPath 和 XML 为了将来的读者的利益,但概念是相同的并且可以应用于任何使用 XPath 的框架,包括 robotframework。但是,请参阅有关 selenium 限制的附录。
计算 元素的数量 其中 string value 包含一个子字符串,
count(//*[contains(.,"substring")])
由于元素的嵌套, 将多计算 "substring"
的出现次数。例如,e
和 r
的字符串值都包含 "substring"
:
<r>
<e>substring</e>
</r>
相反,计算包含子字符串的文本节点的数量:
count(//text()[contains(.,"substring")])
上例中只有一个这样的文本节点。
请注意,这假定文本未跨子元素分区:
<r>
<e><b>subs</b>tring</e>
</r>
另见
Selenium 特定的附录
@Trapli that "selenium insists to return webelements only, it won't return text nodes",这是一个变通方法,它将 return 硒可以计数的元素:
//*[text()[contains(.,"substring")]]
此 return 是具有包含提供的 "substring"
的文本节点子节点的所有元素。不幸的是,selenium 在承载 XPath 方面受到限制——大多数主机并没有那么严格。
如果你知道你有包含部分文本的元素,我会说使用 FindElements 方法来查找该方法的所有出现,它 returns 一个元素列表,你可以简单地调用 List.count ();
List<WebElement> elementName = driver.findElements(By.LocatorStrategy("LocatorValue"));
elementname.count
就是你的答案。
我通过执行以下操作修复了它
${count}= Get Element Count //td[contains(text(),'25516.B1-')]
Should Be Equal As Integers ${count} 3
这returns 3个要素并通过了测试。
感谢大家的回答!
我正在尝试计算部分文本为 "25516.B1-"
的元素出现在页面上的次数。
现在我正在尝试这个。然而它 returns 17 即使页面上只有 3 个元素实例。
Count 3 basiskerntaken
${count}= Get Element Count //*[contains(.,"25516.B1-")]
Log To Console ${count}
将通用的 xpath 更新为更具体的 xpath 如下:
${count}= Get Element Count //tag_name[contains(.,"25516.B1-")]
更规范:
${count}= Get Element Count //tag_name[contains(.,"25516") and contains(.,"B1-")]
我将使用通用的 XPath 和 XML 为了将来的读者的利益,但概念是相同的并且可以应用于任何使用 XPath 的框架,包括 robotframework。但是,请参阅有关 selenium 限制的附录。
计算 元素的数量 其中 string value 包含一个子字符串,
count(//*[contains(.,"substring")])
由于元素的嵌套, 将多计算 "substring"
的出现次数。例如,e
和 r
的字符串值都包含 "substring"
:
<r>
<e>substring</e>
</r>
相反,计算包含子字符串的文本节点的数量:
count(//text()[contains(.,"substring")])
上例中只有一个这样的文本节点。
请注意,这假定文本未跨子元素分区:
<r>
<e><b>subs</b>tring</e>
</r>
另见
Selenium 特定的附录
@Trapli
//*[text()[contains(.,"substring")]]
此 return 是具有包含提供的 "substring"
的文本节点子节点的所有元素。不幸的是,selenium 在承载 XPath 方面受到限制——大多数主机并没有那么严格。
如果你知道你有包含部分文本的元素,我会说使用 FindElements 方法来查找该方法的所有出现,它 returns 一个元素列表,你可以简单地调用 List.count ();
List<WebElement> elementName = driver.findElements(By.LocatorStrategy("LocatorValue"));
elementname.count
就是你的答案。
我通过执行以下操作修复了它
${count}= Get Element Count //td[contains(text(),'25516.B1-')]
Should Be Equal As Integers ${count} 3
这returns 3个要素并通过了测试。
感谢大家的回答!