我目前正在使用PHPUnit进行测试,我需要创建和删除相同的东西。所以我创建了一个名为test的东西,我希望能够找到并删除它。我在页面上有多个删除按钮,它可以通过这样的方式工作 -
$this->click("xpath=(//img[@title='Delete'])[11]");
但是通过选择[11],它只使用第11行的删除按钮。例如,如果Test不是第11行,我将删除我不想删除的内容。
我希望通过查找附加了特定ID的行来尝试删除特定行。
该行可能包含单词" Test"列后面有更多信息。然后是一个标题为“删除”的结尾的删除按钮。我希望找到带有id或单词的行'测试'然后找到并使用“删除”#39;那一行的标题。
任何帮助?
编辑 - 一行的示例图像。我想抓住第一个文本,然后使用右边最后一个按钮'删除'
http://i.stack.imgur.com/S4BNE.png
第二次编辑 - 这是整个表格,它包含所有行,并且在行中包含td' s(显然,正如您所知)。 这是找不到我试图找到的文本的地方。这个tr将算作6的第4个。
这显示td包含删除,td包含'测试配置文件'和整个桌子本身。 http://i.imgur.com/4r1tsJe.png
TL; DR从本质上讲,即时尝试,其中td包含'测试',使用'删除'来自同一行。
答案 0 :(得分:1)
不太清楚,但我会尝试从你的评论中猜出来。
忘记行,但让我们找到所有带有“Test”的td
(或者你想要的一些文字)
descendant::td[contains(.,'Test')]/
并从此处选择包含删除图片的以下同级td
following-sibling::td//img[@title='Delete']
现在,每行都有一组要点击的图像节点。
当然,如果你的功能
$this->click("xpath=.....");
当时只接受一个节点,一种可能是放括号并始终选择第一个节点(假设您的测试将删除它)
(descendant::td[contains(.,'Test')]/following-sibling::td//img[@title='Delete'])[1]
即使节点在您单击时被删除,在下一个测试中该表达式将始终匹配,直到页面上还有任何节点
这与for循环类似(不完全相同)?
buttons = "xpath=....."
for each b in buttons do {
$this->click(b);
}
希望有所帮助
答案 1 :(得分:0)
如果要在第一个<td>
元素中找到包含Test的第一行,或者在<tr>
元素上找到id属性为“Test”的行;并且您想要从该行单击“删除img”元素,您可以尝试
$this->click("xpath=(//tr[@id='Test' or contains(td[1], 'Test')]//img[@title='Delete'])[1]");
但这有点猜测,因为我看不到你正在使用的HTML。
由于看起来“测试”可能是全部大写或混合大小写,因此您可能需要构建一些不区分大小写的内容:
$this->click("xpath=(//tr[@id='Test' or
contains(translate(td[1], 'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'),
'TEST')]//img[@title='Delete'])[1]");
是的,它是kludgy,但AFAIK PHP仅支持XPath 1.0。