2011-11-17 9 views
7

Próbuję kliknąć obraz przy użyciu kapibara, aby przetestować ogórek, ale nie mogę znaleźć sposobu, aby nakłonić kapibarę do obejrzenia obrazu jako łącza.Kliknięcie na obraz przy użyciu kapibary w ogórku

Mój kod na obrazie jest:

link_to(image_tag('ico_edit_16.png', alt: 'Edit', class: 'icon16', title: "Edit #{qualification.title}"), edit_qualification_path(qualification)) 

który pokazuje się jako

<a href="/qualifications/1/edit"> 
    <img class="icon16" title="Title" src="/images/ico_edit_16.png?1279303992" alt="Edit"> 
</a> 

w HTML, i nie udało mi się znaleźć dobry sposób na wykorzystanie kapibary kliknąć obraz .

Wszelkie sugestie?

Odpowiedz

9

To powinno działać:

find('img.icon16').click 

Alternatywnie do wyszukiwania na podstawie tekstu alt:

find("img[alt='Edit']").click 
+3

Wygląda na to, że kod nie klika łącza związanego z obrazem - może kliknąć na obrazie, ale nie bierze mnie wszędzie z linkiem. Skończyło się na tym, że przekazałem identyfikator do linku za obrazkiem, a następnie użyłem click_link dla tego identyfikatora, który działa. –

+1

Jakiego sterownika używasz?Powinien działać w Selenium, ale bezgłowe sterowniki mogą nie być wystarczająco inteligentne, aby propagować kliknięcie w górę do łącza nadrzędnego. –

+0

usuń '@' (aby był to prawidłowy selektor css) – SirLenz0rlot

0

Należy również zauważyć, w Rails (3.1.1 w moim przypadku), w przypadku obrazów bez dany : wartość alt, domyślny alt jest ustawiany przez pomocnika image_tag:

: alt - Jeśli nie podano tekstu alternatywnego, używana jest nazwa części pliku źródła (Aktywowane i bez rozszerzenia) [From the Rails API]

Tak na przykład do pliku obrazu „kitten.jpg”, to użyłby find("img[@alt='Kitten']").click (uwaga kapitalizację i usunięcie rozszerzenia).

Korzystając z tej konwencji szyn, można wyszukiwać dowolne ogniwa graficzne w ogórku/kapibarze.

+0

... z tym wyjątkiem, że każdy obraz powinien mieć znaczący tekst alternatywny, więc nigdy nie powinieneś tego robić. –

1

Wystąpił problem, gdy obraz nie został rozpoznany, ponieważ na stronie znajdowało się wiele elementów o tym samym identyfikatorze. Spróbuj użyć czegoś takiego.

with_scope("#modal_window") do 
    find("#close").click 
1

Ten krok rozwiązuje problem dla mnie. Musisz użyć xpaths, aby dopasować element, a następnie znaleźć jego rodzica. Jednak zastrzeżenie to może być niezsynchronizowane:

Kiedy/^ I następuje łącze zawierające (?: | An | a | the |) "([^ \"] ) "obraz (?: | wewnątrz "([^ \"]) ") $/

do |*args| 
    alt = args[0] ; within = args[1] 

    outer = find(within) 
    outer.find(:xpath, "//img[@alt='#{alt}']/..").click 
end 
0

tak jeśli używasz coś jak w moim przypadku w haml:

%div{id: "23", class: 'operations'} 
    %a.delete{ href: '#', class: 'smallbtn'} 
    %img{ src: 'assets/delete.png', alt: 'Delete'} 

%a.edit{ href: "#", class: 'smallbtn'} 
    %img{ src: 'assets/edit.png', alt: 'Editar Producto'} 

i nie chcesz używać identyfikator do kliknięcia w link i używasz obrazów, na przykład w moim przypadku kliknij na link do usunięcia musisz zadeklarować klasę, a później możesz użyć nex t Kod do kliknięcia na element i dodatkowo do potwierdzenia operacji modalnej:

within '#23' do 
    find('.delete').click 
    page.driver.browser.switch_to.alert.accept 
    end 
Powiązane problemy