硒中的xPath,在多个节点层中有多个前提

时间:2015-07-09 14:39:02

标签: javascript xml selenium xpath

我在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是所有者元素的名称,如果我删除它,它不会有任何区别,但在给我举例时请记住它。

1 个答案:

答案 0 :(得分:0)

最后,在文本关键字之前,它确实是一个语法问题。

我正在尝试这个

//div[./text()='Zero']//div[./text()='Number']
相反,我需要这样的东西。

//div[.//text()='Zero']/div[.//text()='Number']

显然第一个人确实在寻找' Number'无论第一个约束的值是多少,只要每个约束都在我的文件中定义(不必在其向上的xnode路径中。)

作为最后一点,我建议不要使用chrome xpath helper,因为它的行为几乎是随机的,它在删除和替换相同的表达式后会给出不同的结果。啊。 Chrome中唯一的另一个是广告软件...我通过firefox xpath检查工具试错了我的结果。

1,我最后还需要为角度选择ui工具向上添加一个节点向上(我们使用selectize.js,一个可搜索的选择框),否则它很混淆要返回什么,但这与原始问题,因为我之前用原始表达式尝试过。

2,我还必须在第一个和第二个文本搜索之间添加一个节点,否则它也会在第一个文本中查找第二个表达式,例如。在零中寻找数字,并将其视为有效值(如果找到)。问题仍然以相反的方式发生,这也可以通过在第一个中应用其他类型/名称约束来修复(在最后的示例中不是为了节省空间)。

所以这就是我最终的结果:

.//div[@name='typeList']//div/div[.//text()='Zero']/div/div/div[.//text()='Number']