使用来自同一行的 id 单击带有 XPath 的按钮

Click a button with XPath using an id from the same row

我目前正在使用 PHPUnit 进行测试,我需要创建和删除相同的内容。所以我创建了一个叫做测试的东西,我希望能够找到它并删除它。我在页面上有多个删除按钮,它可以通过做这样的事情来工作 -

    $this->click("xpath=(//img[@title='Delete'])[11]");

但是通过选择 [11] 例如,它只使用第 11 行的删除按钮。如果 Test 不是第 11 行,我将删除我不想删除的内容。

我想尝试通过查找附加了特定 ID 的行来删除特定行。

该行可能包含 "Test" 字样,后跟列中的更多信息。然后是标题为 'Delete' 的末尾的删除按钮。我希望找到带有 ID 或单词 'Test' 的行,然后在该行上找到并使用 'Delete' 标题。

有什么帮助吗?

编辑 - 一行的示例图像。我想抓住第一个文本,然后使用右边最后一个标题为 'Delete'

的按钮

http://i.stack.imgur.com/S4BNE.png

第二次编辑 - 这是整个 table,它包含所有行,并且在包含 td 的行中(很明显,如您所知)。 这是我找不到我试图找到的文本的地方。这个 tr 将算作 6 个中的第 4 个。

这显示了包含删除的 td、包含 'Test Profile' 的 td 和整个 table 本身。 http://i.imgur.com/4r1tsJe.png

TL;DR 本质上,我正在尝试做,其中 td 包含 'Test',使用同一行中的 'Delete'。

如果要在第一个 <td> 元素中找到包含 Test 的第一行,或者在 <tr> 元素上具有 "Test" id 属性的第一行;并且您想从该行中单击删除 img 元素,您可以尝试

$this->click("xpath=(//tr[@id='Test' or contains(td[1], 'Test')]//img[@title='Delete'])[1]");

但这有点靠猜测,因为我看不到你正在使用的HTML。

由于看起来 'Test' 可能是全大写或混合大小写,您可能必须在某些情况下不区分大小写:

$this->click("xpath=(//tr[@id='Test' or
  contains(translate(td[1], 'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'),
             'TEST')]//img[@title='Delete'])[1]");

是的,它很笨拙,但 AFAIK PHP 仅支持 XPath 1.0。

不太清楚,但我会尝试根据您的评论进行猜测。

忘记行,但让我们找到所有 td 与 "Test"(或您想要的一些文本)

descendant::td[contains(.,'Test')]/

从这里 select 包含删除图像的以下同级 td

following-sibling::td//img[@title='Delete']

现在你有一组图像节点可以点击,对于每一行。

当然,如果你的函数

$this->click("xpath=.....");

一次只接受一个节点,一种可能是把括号和select总是第一个节点(假设你的测试会删除它)

(descendant::td[contains(.,'Test')]/following-sibling::td//img[@title='Delete'])[1]

即使点击节点被删除,在接下来的测试中这个表达式也会一直匹配,直到页面上剩下任何节点

这与 for 循环相似(不完全相同)?

buttons = "xpath=....."

for each b in buttons do {

$this->click(b);
}

希望对您有所帮助