【发布时间】:2015-09-28 00:30:07
【问题描述】:
我在 seleniumdriver 中的 xpath 有一点问题。
我希望 xpath 定位器通过两个变量在节点层次结构的不同点使用精确匹配来缩小其选择范围。这部分完成了。
您可以将我的情况想象为使用 xPath 在 xml 中寻址一个二维数组,每个维度都作为我在其中的两个变量给出(它们是通过 js 变量而不是 xpath 变量进行的标准文本搜索)。
我正在努力解决的是生成的构造并不能区分第一维元素之间的差异,因此只要给定的变量值是其中一个维度,它将很好地处理第二维中的每个元素.我不能假设它们是独一无二的,或者它们是按任何顺序排列的。我正在使用它进行测试,所以这是不可接受的。
我怎样才能形成一个不会犯同样错误的表达式? 我已经尝试过“和”表达式,但 selenium 和 xpath 工具都说“找到”的值为“1”,但它没有给我一个可以使用的节点定位器。
例如,我的结构看起来很相似,因此例如通过 x1/y1 正确处理它看起来很好。
//x1//y1
//x1//y2
//x2//y3
//x2//y4
//x3//y5
//x3//y6
应该工作,工作正常。
//x1x//y1
//x1x//y2
//x2x//y3
//x2x//y4
//x3x//y5
//x3x//y6
(将不存在的输入作为第一个维度。)我的输入不是容错的,我会寻找确切的值,因此测试在这里应该失败。
//x2//y1
//x2//y2
//x3//y3
//x3//y4
//x1//y5
//x1//y6
DING,定位器在它不应该在这里找到 y 值(y 值在节点树的不同叶子上)。我需要这方面的帮助。
这是有问题的定位器:
return element(by.xpath(".//div[@name='typeList']//div[.//text()='" + moduleName + "']//div[./text()='" + typeName + "']")).getText();
TypeList 是所有者元素的名称,如果我删除它没有任何区别,但请在举例时记住它。
【问题讨论】:
-
你的结构让我很困惑。我首先想到的是 x 和 y where 标记,但是在您的 XPath 中您正在寻找文本。你知道它找到的是哪一个吗?
-
让我换一种说法。我正在测试以验证“文件”是否在正确的“目录”中。示例中的 x 值是目录,y 是文件。我通过变量的文本值找到正确的元素。 x 和 y 本身只是示例。它们不是标签,它们代表我的文本搜索变量的可能值。
-
是的,我知道找到了哪个元素。
-
是否可以给网页链接或提供html
-
不可能,这是一个正在开发的公司内部页面。几个小时后,我将使用一个简单的示例 html 重新编写并再次提出问题,因为它看起来比实际更令人困惑。这都是关于表达式的第一个文本搜索部分没有将过滤器应用于它应该的后续节点。
标签: javascript xml selenium xpath