2012-10-12 3 views
9

Mam aplikację, która nie przypisuje unikalnych identyfikatorów do komórek tabeli. Biorąc pod uwagę unikatowy tekst w kolumnie 1, link do zarządzania w kolumnie 2 i link do usunięcia w kolumnie 3, w jaki sposób mogę nakazać Kapibarze, aby kliknęła link do zarządzania w tym samym wierszu, który zawiera tekst "Foo"?Rails/Capybara: kliknięcie linku w wierszu tabeli, który zawiera również unikalny tekst.

Foo manage delete 
Bar manage delete 

widzę jak używać find('tr', text: "Foo") gdy używana z .should klauzuli. Widzę, jak kliknąć link zawierający tekst "zarządzaj". Ale nie widzę sposobu, aby połączyć je z rzędu w wierszu, kliknij łącze.

Odpowiedz

14

Przetestowałem to i to powinno działać:

find(:xpath, "//tr[td[contains(.,'Foo')]]/td/a", :text => 'manage').click 

Co to mówi jest znaleźć wiersz z kolumny, która zawiera tekst „foo” i kliknij na link w kolumnie w ten sam wiersz z tekstem "zarządzaj".

Jeśli nie obchodzi, gdzie pojawia się 'foo' (czyli może być wszędzie w rzędzie), to można to zrobić:

find(:xpath, "//tr[contains(.,'Foo')]/td/a", :text => 'manage').click 
+0

Updated moją odpowiedź . Oryginalnie użyłem tego samego formatu pojedynczego cudzysłowu dla xpath i ciągów wewnątrz xpath, które nie działałyby. –

+0

niesamowite dziękuję ... – jpwynn

7

Inny przykład:

When(/^I delete the Book with the Title "(.*?)"$/) do |title| 
    find('tr', text: title).click_link("Delete") 
end