(使用Selenium Server)我试图检查xpath中的特定元素节点是否具有某个字符串值,例如
<table>
<thead></thead>
<tbody>
<tr>
<th>1</th>
<td>value 1</td>
<td>value 2</td>
<td>value c</td>
</tr>
<tr>
<th>2</th>
<td> </td>
<td> </td>
<td> </td>
</tr>
</tbody>
使用上面的代码,使用xpath
isElementPresent('//table/tbody/tr[last()-0]/td[last()-1]');
它会返回true,如果我将tr[last()-0]
更改为tr[last()-1]
它仍会返回true,
当然,isElementPresent
也会在循环中生成xpath(用$i
和$j
替换for()
中使用的整数isElementPresent('//table/tbody/tr[last()-$i]/td[last()-1 and text()="${nbsp}"]');
虽然它很好,但是,我想要检查的是它里面没有任何内容
使用上面相同的html代码,如果我改变了xpath
//table/tbody/tr[last()-0]/td[last()-1 and text()="${nbsp}"]
你认为它会在//table/tbody/tr[last()-1]/td[last()-1 and text()="${nbsp}"]
返回true而在//table/tbody/tr[last()-0]/td[last()-1 and text()="${nbsp}"]
返回false但是这里是踢球者
使用Selenium IDE 1.10.0插件进行Firefox检查xpath,将其放入目标框并点击查找(检查它是否会找到xpath,td
不突出显示第2个最后tr
中的最后td
,它会突出显示上一个tr
中的第一个//table/tbody/tr[last()-0]/td[last()-2]
,就像xpath是//table/tbody/tr[last()-0]/td[text()="${nbsp}"]
从我的实验中看来,它似乎是像 <tr>
<th>2</th>
<td>cows are my friends</td>
<td>let's go to my room pig!</td>
<td> </td>
</tr>
那样处理xapth,它只是文本是空格的第一个实例,如果第二个tr就像是
isElementPresent('//table/tbody/tr[last()-0]/td[last()-1 and text()="${nbsp}"]');
我想使用last()-1
它仍然会返回true,因为它不是last()-0
而是last()-#
所以我的问题是,如何检查特定元素节点是否具有某个字符串
注意1:我在此页http://www.w3schools.com/xpath/xpath_syntax.asp上使用last()
原因它说IE5后来说[0]是第一个没有,而不是[1]像Firefox或Chrome在某种意义上是有意义的因为这是数组索引的工作原理,为了完全兼容,我从最后一个节点开始向后工作{{1}}可以与IE5及更高版本一起工作,并且通过节点向后移动的逻辑应该是相同的(除非微软需要重新定义那个逻辑)
注意2:我很清楚一个简单的修复方法是向表中添加title或id属性,但是我正在进行测试的页面是由其他人完成的,我想避免修改页面只是为了适合测试用例
注意3:我正在测试的表是使用JSON字符串填充的,所以我的测试是在没有表的数据的情况下,如果不是,那么它是空白的,而不是JSON字符串在表中添加数据时不应该
编辑1:似乎$ {nbsp}在php中不起作用,只在Selenium IDE 1.10.0插件中似乎能识别它但是通过按住Alt并在0160中输入就可以正常工作
编辑2:目前我已经为标签添加了id属性以使其正常工作,并且检查@ id = [VALUE]和text()= [VALUE]时效果非常好,但它仍然可以得到这个问题的答案,当我向所有我的html标签添加id,title和/或class属性时,我最初制作表格的人显然没有,正如我在注2中所说,'我想避免修改该页面只是为了适合测试用例