编辑按钮的 XPath 是 //*[@id="edit_1088"]

XPath of the edit button is //*[@id="edit_1088"]

我的查询是我需要点击 table 上的第一个编辑 link。 table 有 7 列,行将动态递增。 HTML 第一行代码:

<tr role="row" class="odd">
<td>
<form method="GET" target="_blank" action>...</form>
<td> ALLOCATION CHANGE</td>
<td class="right"></td>
<td> SATTER, KRAIG</td>
<td> CAFEMANAGER1</td>
<td class="sorting_1">03/08/2016 17:00</td>
<td class="edit_icon" id="edit_1088" onclick="on EditClick(1088)">
<span class="view_icon" style="margin-left: 40%;"></span>
</td>
</tr>

注意:编辑按钮的 ID 随着行的增加而不断变化。

黄瓜中的Mycode -ruby -capybara

 And /^I click on the Expresso image$/ do
 find(:xpath, '//*[@id="l1row"]/span').click
 find('tr:odd > td:edit_icon [id="edit_"] match: first').click
 sleep 10
 end

错误消息:无效的选择器:指定了无效或非法的选择器

根据发布的更新 HTML -

注意:您的第一个 没有关闭,我假设那只是您在问题中添加 HTML 时的一个错误。

所以从 HTML 发布你实际上没有编辑 link 你只有一个 td 你需要点击 - 第一行中的那个 id 以 "edit_" 所以

find('tr:first-child > td[id^="edit_"]').click

您在问题中发布的尝试将不起作用,因为不存在 oddedit_icon 这样的 CSS 选择器,并且 find 需要有效的 CSS 选择器(或 XPath(如果您指定 XPath 或将其设置为默认值)

上一个答案基于问题的措辞:

如果这是一个 table 那么你可以用 CSS 做你想做的事而不用担心 XPath。

find('tr:first-child > td:last-child [id^="edit_"]')

会在第一行的最后一个td中找到id以"edit_"开头的元素。如果您的行和列实际上不是 table,您需要提供一些示例 HTML 来说明您所谈论的内容。