2010-05-10 5 views
1

Как использовать огурец, чтобы щелкнуть ссылку редактирования в списке элементов в таблице, используя xpath?Нажмите ссылку для редактирования в таблице с xpath и огурцом

У меня есть работающий селектор, который возвращает нужную мне ссылку, но это один из многих результатов .... как я могу вернуть только 1 результат?

Вот мой огурец шаг

When /^I click the "([^\"]*)" link for "([^\"]*)"$/ do |link, cell_value| 
    within "//*[.//td[contains(.,'#{cell_value}')] and .//a[text()='#{link}']]" do |scope| 
    scope.click_link link 
    end 
end 

Как вы можете видеть, что это будет работать, но просто нажмите на первую ссылку изменить в таблице, даже если он знает о других, что он совпавший ... так это не хорошо.

Вот таблица и селектор: http://pastie.textmate.org/private/9od335pmsj4hi9nbe9lbow

Спасибо!

Это источник этого файла, а также в случае отказа службы или ссылки на внешний код.

## HTML source table 

<table> 
    <tr> 
    <th> 
     Name 
    </th> 
    <th> 
     Enabled 
    </th> 
    <th> 
     Does Nicotine Testing 
    </th> 
    <th colspan='3'> 
     Actions 
    </th> 
    </tr> 
    <tr> 
    <td nowrap='nowrap'> 
     Microsoft 
    </td> 
    <td> 
     Yes 
    </td> 
    <td> 
     No 
    </td> 
    <td nowrap='nowrap'> 
     <a href="/employers/407">Show Portal</a> 
    </td> 
    <td> 
     <a href="/employers/407/edit">Edit</a> 
    </td> 
    <td> 
     <a href="/employers/407" onclick="if (confirm('Are you sure you want to delete the employer \'Microsoft\'? \n\nAll of this employer\'s locations will be deleted which include: \n \nAll users associations to those locations will also be removed. \n\nThere is NO UNDO. Proceed?')) { var f = document.createElement('form'); f.style.display = 'none'; this.parentNode.appendChild(f); f.method = 'POST'; f.action = this.href;var m = document.createElement('input'); m.setAttribute('type', 'hidden'); m.setAttribute('name', '_method'); m.setAttribute('value', 'delete'); f.appendChild(m);f.submit(); };return false;">Delete</a> 
    </td> 
    </tr> 
    <tr> 
    <td nowrap='nowrap'> 
     IBM 
    </td> 
    <td> 
     Yes 
    </td> 
    <td> 
     No 
    </td> 
    <td nowrap='nowrap'> 
     <a href="/employers/406">Show Portal</a> 
    </td> 
    <td> 
     <a href="/employers/406/edit">Edit</a> 
    </td> 
    <td> 
     <a href="/employers/406" onclick="if (confirm('Are you sure you want to delete the employer \'IBM\'? \n\nAll of this employer\'s locations will be deleted which include: \n &nbsp;&nbsp;&nbsp;1) appleton\n \nAll users associations to those locations will also be removed. \n\nThere is NO UNDO. Proceed?')) { var f = document.createElement('form'); f.style.display = 'none'; this.parentNode.appendChild(f); f.method = 'POST'; f.action = this.href;var m = document.createElement('input'); m.setAttribute('type', 'hidden'); m.setAttribute('name', '_method'); m.setAttribute('value', 'delete'); f.appendChild(m);f.submit(); };return false;">Delete</a> 
    </td> 
    </tr> 
</table> 

## XPath Selector (not working) trying to target this link: <a href="/employers/406/edit">Edit</a> (the 2nd edit link in the table) 

//*[.//text()='IBM' and .//a[text()='Edit']] 
+0

Что такое XML-документ и что именно в нем нужно выбрать? Пожалуйста, предоставьте достаточную информацию в своем вопросе. –

+0

Димитрий, ты посмотрел на ссылку пасты, которую я там? Он имеет полный список

, указанный здесь, с текущим селектором xpath, который я использую. Если вы посмотрите на него, вы увидите, что я пытаюсь выбрать ссылку «Изменить» в с текстом «IBM». Дайте мне знать, если мой вопрос все еще неясен. Благодаря! – jondkinney

+0

Там есть связанный с этим вопрос/ответ здесь: http://stackoverflow.com/questions/4248889/cucumber-selecting-an-element-from-a-table-for-deletion-or-addition/7618578# 7618578 – mongo296

ответ

1

Ваше регулярное выражение XPath ("//*[.//td[contains(.,'#{cell_value} ')] и .//a[text()='#{link}'] ] ") возвращает более одного« области видимости »в виде массива, поэтому вы можете указать, какой из них использовать, указав элемент: scope [0] .click_link link # для первой области [1] .click_link link # для второго

Смежные вопросы