gpt4 book ai didi

xpath - Selenium 中的后代关系 + 索引

转载 作者:行者123 更新时间:2023-12-03 16:08:01 24 4
gpt4 key购买 nike

我正在使用 selenium 测试网页。我想获取所有“包含文本的叶子元素和元素”。我使用以下工作 XPath。

//*[. != '' or  not(*)]

这很好用。

但现在我想遍历这些元素中的每一个并在它们上运行一些命令。我实际上想获得他们的位置,但我通过使用 GetXpathCount 来说明我的问题。
int elementCount = this.selenium.GetXpathCount("//*[. != '' or  not(*)]");
for (int i = 1; i <= elementCount; ++i)
{
Console.WriteLine(this.selenium.GetXpathCount("//*[. != '' or not(*)][" + i + "]"));
}

elementCount 的值为 242。
控制台输出为 142 45 30 13 4 4 1 1 1 1 0 0 0 0 0 0 ... [200 个其他零]
控制台上的数字总和为 elementCount,但在 ~10 之后总是为零。

对我来说很明显我的 XPath
//*[. != '' or  not(*)][1] 

没有我的本意。而是返回“所有叶元素和所有包含文本的元素,它们是其父元素的第一个子元素”,相当于
//*[(. != '' or  not(*)) and position() = 1]

所以,我用括号来纠正这个错误:
(//*[(. != '' or  not(*))])[1]

耶。对于所有元素,控制台输出现在是 1 1 1 1 1 1 1 1 1 1 1 1 1 1。但是让我们更新我的循环代码以实际对元素@path 执行操作。
int elementCount = this.selenium.GetXpathCount("//*[. != '' or  not(*)]");
for (int i = 1; i <= elementCount; ++i)
{
Console.WriteLine(this.selenium.GetElementPositionLeft("(//*[. != '' or not(*)])[" + i + "]"));
}

不!!! GetXpathCount 有效,但 GetElementPositionLeft (和其他)都失败了。是什么赋予了?我该如何解决这个问题?

这是 Selenium 异常(exception):
{"错误:元素 (//[.!= '' or not()])[1] 未找到"}
[Selenium.SeleniumException]: {"ERROR: Element (//[.!= '' or not()])[1] not found"}
数据:{System.Collections.ListDictionaryInternal}
帮助链接:空
内部异常:空
消息:“错误:元素 (//[.!= '' or not()])[1] not found”
资料来源:“ThoughtWorks.Selenium.Core”

最佳答案

Selenium 不知道对 (//*[. != '' or not(*)])[1] 使用什么定位策略.尝试在它前面加上 xpath=
作为替代定位器,我让它与以下(在 Java 中)一起使用:

int elementCount = selenium.getXpathCount("/descendant::*[. != '' or  not(*)]").intValue();
for (int i = 1; i <= elementCount; ++i) {
System.out.println(i + ": " + selenium.getElementPositionLeft("xpath=/descendant::*[. != '' or not(*)][" + i + "]"));
}

关于xpath - Selenium 中的后代关系 + 索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1665053/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com