2

在 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>

使用上面的代码,使用 xpath

isElementPresent('//table/tbody/tr[last()-0]/td[last()-1]');

它会返回真,如果我改成它仍然会返回真tr[last()-0]tr[last()-1]

自然地,isElementPresent将在循环中生成的 xpath 也将在循环中(用整数替换循环中使用的$i和),这很好,但是,我要检查的是里面什么都没有$jfor()

使用上面相同的 html 代码,如果我更改 xpath

isElementPresent('//table/tbody/tr[last()-$i]/td[last()-1 and text()="${nbsp}"]');

你会认为它会返回 true//table/tbody/tr[last()-0]/td[last()-1 and text()="${nbsp}"]和 false//table/tbody/tr[last()-1]/td[last()-1 and text()="${nbsp}"]但是这里是踢球者

使用 Selenium IDE 1.10.0 Plugin for Firefox 通过将 xpath 放入 Target Box 并点击 find 来检查 xpath(检查它是否会在应该找到 xpath 时,//table/tbody/tr[last()-0]/td[last()-1 and text()="${nbsp}"]不会突出显示倒数第二个tdtr它突出显示td在最后一个,tr就好像 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>

我要使用isElementPresent('//table/tbody/tr[last()-0]/td[last()-1 and text()="${nbsp}"]');它仍然会返回true,因为它没有看last()-1但是last()-0

所以我的问题是,我如何检查特定元素节点是否具有特定字符串

注意 1:我last()-#在此页面上使用原因http://www.w3schools.com/xpath/xpath_syntax.asp它说 IE5,后来说 [0] 是第一个不是,而不是 [1],就像 Firefox 或 Chrome 一样,在某种意义上这是有道理的,因为这就是数组索引的工作方式,为了完全兼容,我从最后一个节点开始并向后工作,这last()将适用于 IE5 及更高版本,并且虽然节点应该相同,但向后移动的逻辑应该是相同的(除非微软想要重新定义它逻辑)

注意 2:我很清楚,一个简单的解决方法是向表中添加标题或 id 属性,但是我正在对其进行测试的页面是由其他人完成的,我想避免为了适应测试用例而修改页面

注意 3:我正在测试的表是使用 JSON 字符串填充的,所以我的测试是当表没有数据时,它是否为空白,如果不是,那么 JSON 字符串在不应该向表中添加数据时


编辑 1: 似乎 ${nbsp} 在 php 中不起作用,仅在 Selenium IDE 1.10.0 插件中似乎可以识别它,但是通过按住 Alt 并输入 0160 插入空格也可以正常工作

编辑 2:目前我已经在标签中添加了 id 属性以使其正常工作,并且通过检查 @id=[VALUE] 和 text()=[VALUE] 可以很好地工作,但得到这个问题仍然很好回答为当我将 id、title 和/或 class 属性添加到我的所有 html 标签时,最初制作我正在测试的表格的人显然没有,正如我在注释 2 中所说,'我想避免修改页面只是以适应测试用例'

4

1 回答 1

0

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

于 2013-02-18T04:47:07.077 回答