2015-11-26 2 views
0

У меня есть следующий код HTML, и я не уверен, что можно создать селектор для «find» в capybara, чтобы получить тот элемент, который мне нужен. Я использую capybara для огурца в проекте рельсов. (HTML-код генерируется)Capybara Selector для ссылки

<tbody> 
    <tr> 
    <td>Heine</td> 
    <td><a href="/customers/1">Show</a></td> 
    <td><a href="/customers/1/edit">Edit</a></td> 
    <td><a data-confirm="Are you sure?" rel="nofollow" data-method="delete" href="/customers/1">Destroy</a></td> 
    </tr> 
    <tr> 
    <td>IKEA</td> 
    <td><a href="/customers/2">Show</a></td> 
    <td><a href="/customers/2/edit">Edit</a></td> 
    <td><a data-confirm="Are you sure?" rel="nofollow" data-method="delete" href="/customers/2">Destroy</a></td> 
    </tr> 
    <tr> 
    <td>testcustomer</td> 
    <td><a href="/customers/5">Show</a></td> 
    <td><a href="/customers/5/edit">Edit</a></td> 
    <td><a data-confirm="Are you sure?" rel="nofollow" data-method="delete" href="/customers/5">Destroy</a></td> 
    </tr> 

Как я могу «найти» HREF «изменить» в строке, где й первый тд содержит «testcutomer»? Спасибо.

ответ

0

Вы можете использовать следующие:

find("td", :text => /\Atestcustomer\z/).first(:xpath,"..").find("a", :text => /\AEdit\z/) 

find("td", :text => /\Atestcustomer\z/) дает td с текстом «testcustomer», то найти родителя этого td с помощью first(:xpath,".."), то вы найдете якорный тег с текстом «Edit» с помощью find("a", :text => /\AEdit\z/) ,

+0

Спасибо за ваш ответ, он работал идеально подходит для меня , – mahu

0

Если вы используете драйвер для стойки, это можно сделать довольно четко, воспользовавшись тем, что в nokogiri css селектора можно запустить с помощью селектора sibling, и он будет интерпретироваться в области поиска элемента на.

find(:css, 'td', text: 'testcustomer').find(:css, '~ td > a', text: 'Edit') 

При использовании любого «реальный браузер» драйвера, который, вероятно, не будет разрешен, так как спецификации для querySelector не позволяет ему. В таком случае это легко делается с помощью XPath (обратите внимание, это также будет работать с racktest так является предпочтительным решением для перекрестной совместимости драйвера) с помощью следующего-собрата оси

find(:xpath, ".//td[text()='testcustomer']/following-sibling::td/a[text()='Edit']")