Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xpath 使用节点选择祖辈以选择其子代之一_Xpath_Selenium - Fatal编程技术网

Xpath 使用节点选择祖辈以选择其子代之一

Xpath 使用节点选择祖辈以选择其子代之一,xpath,selenium,Xpath,Selenium,我有一棵类似的树: tr _|_ td td _| |_ div div _| |_ input "foobar" 我使用以下方法选择了节点foobar: //*[normalize-space(text())='foobar'] 但我无法选择曾祖父母tr和曾孙子女输入。有什么建议吗?此XPath表达式选择在空白规范化后具有等于foobar的后代文本节点的每个元素: /

我有一棵类似的树:

         tr
        _|_
       td  td
      _|    |_
     div     div
     _|       |_ 
 input       "foobar"
我使用以下方法选择了节点foobar:

//*[normalize-space(text())='foobar']

但我无法选择曾祖父母tr和曾孙子女输入。有什么建议吗?

此XPath表达式选择在空白规范化后具有等于foobar的后代文本节点的每个元素:

//*[.//text()[normalize-space()='foobar']]
我已选择节点foobar 使用:

但我无法选择伟大的 祖父母tr和选择伟大的祖父 孩子们用它做食物吧

我想您应该选择一个元素,该元素在规范化后的字符串值是foobar,从顶部元素tr开始

下面是一个XPath表达式,它从最上面的elemet tr开始,并选择所需的元素:

/tr//*[normalize-space()='foobar']
如果需要选择文本节点本身而不是其元素父节点:

/tr//text()[normalize-space()='foobar']
如果由于您了解文档结构,因此希望避免对//缩写进行昂贵且缓慢的计算,请使用以下表达式:

/tr/td/div[normalize-space()='foobar']
甚至:

/tr/td[2]/div
更新:

现在OP改变了他的问题,希望从具有标准化字符串值“foobar”的div中选择输入元素

下面是一个XPath表达式,正好选择了以下内容:


注意:如果这些表达式没有选择任何节点,文档很可能有一个默认名称空间-搜索XPath默认名称空间-这个问题有很多很好的答案-在SO和internet上。

好问题,+1。请参阅我的答案,以了解您可以使用的一组详尽的XPath表达式:这正是我要找的+1.实际上我一开始就写错了。我有foobar文本节点,我想访问位于同一tr父节点中的输入。我编辑了上面的问题。迪米特解释得很好。这有帮助+1.
/tr/td[2]/div
../..//input
../../td[1]/div/input