Javascript selenium中的xPath在多个节点层中具有多个前提

Javascript selenium中的xPath在多个节点层中具有多个前提,javascript,xml,selenium,xpath,Javascript,Xml,Selenium,Xpath,我对seleniumdriver中的xpath有点问题 我希望xpath定位器通过在节点层次结构的不同点使用精确匹配的两个变量来缩小其选择范围。这部分已经完成 您可以将我的案例想象为使用xPath在xml中寻址一个二维数组,每个维度都作为其中的两个变量(它们是通过js变量进行的标准文本搜索,而不是xPath变量) 我正在努力解决的是,结果的构造并不能区分第一维度的元素之间的差异,所以只要给定的变量值是维度之一,它就会很好地处理第二维度中的每个元素。我不能假设它们是唯一的,或者它们是以任何顺序排列

我对seleniumdriver中的xpath有点问题

我希望xpath定位器通过在节点层次结构的不同点使用精确匹配的两个变量来缩小其选择范围。这部分已经完成

您可以将我的案例想象为使用xPath在xml中寻址一个二维数组,每个维度都作为其中的两个变量(它们是通过js变量进行的标准文本搜索,而不是xPath变量)

我正在努力解决的是,结果的构造并不能区分第一维度的元素之间的差异,所以只要给定的变量值是维度之一,它就会很好地处理第二维度中的每个元素。我不能假设它们是唯一的,或者它们是以任何顺序排列的。我使用它进行测试,所以这是不可接受的

我怎样才能形成一个不会犯同样错误的表达式? 我尝试了“and”表达式,但selenium和xpath工具都说“found”的值为“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
如果不应该,定位器会在此处找到y值(y值位于节点树的不同叶子上)。我需要帮助

这是有问题的定位器:

return element(by.xpath(".//div[@name='typeList']//div[.//text()='" + moduleName + "']//div[./text()='" + typeName + "']")).getText();

TypeList是所有者元素的名称,如果我删除它,它不会有任何区别,但请在给我举例时记住它。

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

我在试这个

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

//div[.//text()='Zero']/div[.//text()='Number']
显然,只要在我的文件中定义了each(不必在其向上的xnode路径中),第一个约束就会查找“Number”,而不考虑第一个约束的值

最后,我建议不要使用chrome,因为它的行为几乎是随机的,在删除和替换相同的表达式后,它会给出不同的结果。啊。chrome唯一的另一个选择是广告软件。。。我用棋盘格工具反复试验得出了结果

1,我最终需要为angular select ui工具的元素向上添加一个节点(我们使用selectize.js,一个可搜索的选择框),否则它会对返回的内容感到困惑,但这与原始问题无关,因为我之前尝试过使用原始表达式

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

这就是我的结局:

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

你的结构把我弄糊涂了。我最初认为x和y是标记的位置,但在XPath中,您要查找的是文本。你知道它找到了哪一个吗?让我换一种说法。我正在测试以验证“文件”是否位于正确的“目录”中。示例中的x值是目录,y是文件。我通过文本值和变量找到正确的元素。x和y本身只是例子。它们不是标签,它们代表我的文本搜索变量的可能值。是的,我知道找到了哪个元素。是否可能提供网页链接或提供htmlNot可能,这是一个正在开发的公司内部页面。几个小时后,我将用一个简单的html示例重写并再次提问,因为它看起来比实际情况更令人困惑。这都是关于表达式的第一个文本搜索部分,而不是将过滤器应用到后面的节点。