使用来自同一行的 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);
}
希望对您有所帮助
我目前正在使用 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);
}
希望对您有所帮助