Php 在特定元素节点中测试字符串
例如,在PHP单元(使用Selenium服务器)中,我试图检查xpath中的特定元素节点是否具有特定的字符串值Php 在特定元素节点中测试字符串,php,html,xpath,selenium,phpunit,Php,Html,Xpath,Selenium,Phpunit,例如,在PHP单元(使用Selenium服务器)中,我试图检查xpath中的特定元素节点是否具有特定的字符串值 <table> <thead></thead> <tbody> <tr> <th>1</th> <td>value 1</td> <td>value 2</td> <td>
<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>
它将返回true,如果我将tr[last()-0]
更改为tr[last()-1]
它仍将返回true
自然地,isElementPresent
也将在循环中生成xpath(用整数替换for()
循环中使用的$i
和$j
),这就可以了,但是,我想检查的是,循环中没有任何内容
使用上面相同的html代码,如果我更改xpath
isElementPresent('//table/tbody/tr[last()-0]/td[last()-1]');
isElementPresent('//table/tbody/tr[last()-$i]/td[last()-1 and text()="${nbsp}"]');
你可能认为它在//table/tbody/tr[last()-0]/td[last()-1和text()=“${nbsp}”]
处返回true,在//table/tbody/tr[last()-1]/td[last()-1和text()=“${nbsp}”]
处返回false,但问题出在这里
使用Selenium IDE 1.10.0插件for Firefox检查xpath,方法是将xpath放入目标框并点击find(检查它是否会在应该的时候找到xpath,//table/tbody/tr[last()-0]/td[last()-1和text()=“${nbsp}”]
不会突出显示最后一个tr
中的倒数第二个td
,而是突出显示最后一个tr
中的第一个td
,就好像xpath是//table/tbody/tr[last()-0]/td[last()-2]
从我的实验来看,它似乎像对待xapth一样对待//table/tbody/tr[last()-0]/td[text()=“${nbsp}”]
,这只是第一个文本是空白的实例,如果第二个tr是
<tr>
<th>2</th>
<td>cows are my friends</td>
<td>let's go to my room pig!</td>
<td> </td>
</tr>
2.
牛是我的朋友
我们去我的房间吧,猪!
我要使用isElementPresent('//table/tbody/tr[last()-0]/td[last()-1和text()=“${nbsp}”]);
它仍然会返回true,因为它没有查看last()-1
而是last()-0
所以我的问题是,如何检查特定元素节点是否具有特定字符串
注1:我使用last()-#
因为在这一页上它说IE5,后来说[0]是第一个,不像Firefox或Chrome那样[1],这在某种意义上是有意义的,因为数组的索引就是这样工作的,为了完全兼容,我从最后一个节点开始向后工作,这last()
适用于IE5及更高版本,尽管节点向后移动的逻辑应该相同(除非微软想重新定义该逻辑)
注2:我很清楚,一个简单的修复方法是将title或id属性添加到表中。然而,我正在测试的页面是由其他人完成的,我希望避免仅仅为了适应测试用例而修改页面
注3:我正在测试的表是使用JSON字符串填充的,因此我的测试是在表中没有数据的情况下进行的,如果不是,那么JSON字符串是否会在不应该向表中添加数据的情况下将数据添加到表中
编辑1:似乎${nbsp}在php中不起作用,只有在Selenium IDE 1.10.0插件中似乎可以识别它,但是通过按住Alt插入空格并在0160中键入同样有效
编辑2:目前我已经在标签中添加了id属性以使其正常工作,通过检查@id=[VALUE]和text()=[VALUE]可以很好地工作但是,回答这个问题仍然很好,因为当我将id、title和/或class属性添加到我所有的html标记时,最初制作我正在测试的表的人显然没有添加id、title和/或class属性,正如我在注释2中所说,“我希望避免仅仅为了适应测试用例而修改页面”@Memor-X用于加载xmly在phpunit中测试。如果我是你,我会在测试内容之前构建依赖性测试来验证xml结构。我会看看Chrome的开发工具是否返回相同的问题。你可以通过运行
$x(“XPathQueryHere”)在Chrome的开发人员控制台中运行XPath查询
…如果运行它,它会返回什么吗?好奇地想知道Selenium的解析器或实际的XPath是否有问题。@Arran我在Chrome中做了这件事,必须将${nbsp}更改为一个空格,当您按住Alt并键入0160以创建一个空格时插入该空格(但这在Firefox中也适用)它的功能与Firefox稍有相同,当我将鼠标悬停在结果上时,它与我想要的结果并不完全匹配,而且它似乎时不时地发生变化。我想如果我能让xpath在Selenium IDE 1.10.0插件中工作,那么它就可以在其他浏览器中工作(我不知道Chrome的开发者控制台)因为我在IDE中使用的所有功能都是根据元素的属性查找元素xpath@Arran我的错误是,它看起来是随机切换的,因为Chrome返回了所有结果,而它看起来是随机的,因为我将鼠标悬停在哪里,但是它只返回与text()=“部分”匹配的所有字段