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 查找具有:specific属性和具有特定文本的子元素_Xpath_Watir Webdriver - Fatal编程技术网

Xpath 查找具有:specific属性和具有特定文本的子元素

Xpath 查找具有:specific属性和具有特定文本的子元素,xpath,watir-webdriver,Xpath,Watir Webdriver,对于空闲的代码示例,我需要检查是否存在一个tr,type=“a”,并且该tr的子级为td,文本为“3”: <table> <tr type="a"> <td>1</td> </tr> <tr type="b"> <td>1</td> </tr> <tr type="a"> <td>3</td

对于空闲的代码示例,我需要检查是否存在一个tr,type=“a”,并且该tr的子级为td,文本为“3”:

<table>
    <tr type="a">
     <td>1</td>
    </tr>
    <tr type="b">
     <td>1</td>
    </tr>
    <tr type="a">
     <td>3</td>
    </tr>
</table>
但是它不起作用(xpath表达式只返回2个现有tr中的第一个tr)

有什么想法吗? 如果我需要的
tr
存在,是否有一个xpath表达式将返回true

b.tr(:xpath =>"//tr[@type='a']", :index => 1).td(:text =>'3').exists?


我不确定这是否有帮助,但这段代码返回xpath表达式返回的元素数,因此您可以检查计数是否为0,然后检查是否没有匹配项,否则它将返回匹配数:

var doc = document.evaluate("//table/tbody/tr[@type='a']/td[text()=1]",document,null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null);
doc.snapshotLength

如果你有你的桌子的id

希望这对您有所帮助。

使用:

boolean(/*/tr[@type='a']/td[. = 3])
当存在一个字符串值等于数字3的
td
且其父
tr
type
属性的字符串值为“a”,并且该属性(该
tr
)是XML文档顶部元素的子元素时,此XPath表达式的计算结果正好为
true()


否则XPath表达式的计算结果为
false()

或者,也可以在不使用XPath的情况下执行此操作:

b.trs.count{ |tr|
  tr.attribute_value('type') == 'a' and tr.td(:text, '3').present? 
} > 0

更详细一点,但我认为它比XPath更容易阅读。

不知道为什么要使用索引。。?这只是一个代码示例,我不确定我要找的索引2是否能完美工作!非常感谢。
var doc = document.evaluate("//table[@id='tableId']/tbody/tr[@type='a']/td[text()=1]",document,null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null);
doc.snapshotLength
boolean(/*/tr[@type='a']/td[. = 3])
b.trs.count{ |tr|
  tr.attribute_value('type') == 'a' and tr.td(:text, '3').present? 
} > 0