测试特定元素节点中的字符串

时间:2013-02-08 00:27:40

标签: php html xpath selenium phpunit

PHP单元中的

(使用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>&nbsp;</td>
        <td>&nbsp;</td>
        <td>&nbsp;</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>&nbsp;</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中所说,'我想避免修改该页面只是为了适合测试用例

1 个答案:

答案 0 :(得分:0)

@ Memor-X使用SimpleXML加载xml。然后它应该很容易在phpunit中测试。如果我是你,我会在测试内容之前构建依赖性测试来验证xml结构。