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

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>

例如,在PHP单元(使用Selenium服务器)中,我试图检查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>
它将返回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>&nbsp;</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()=“部分”匹配的所有字段