2011-11-17 10 views
7

Estoy intentando hacer clic en una imagen con el carpincho para una prueba de pepino, pero no encuentro la manera de que Capibara vea la imagen como un enlace.Haciendo clic en la imagen usando el carpincho en el pepino

Mi código de la imagen es:

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

que se muestra como

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

en el html, y no he sido capaz de encontrar una buena manera de utilizar capibara hacer clic en la imagen .

¿Alguna sugerencia?

Respuesta

9

Esto debería funcionar:

find('img.icon16').click 

Como alternativa a búsqueda basada en el texto alternativo:

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

Parece que el código no hace clic en el enlace asociado a la imagen; puede hacer clic en la imagen, pero no toma yo en cualquier lugar con el enlace. Terminé pasando una identificación en el enlace detrás de la imagen, y luego usé click_link para ese nombre ID, que funciona. –

+1

¿Qué driver estás usando?Debería funcionar en Selenium, pero los controladores sin cabeza pueden no ser lo suficientemente inteligentes como para propagar el clic al enlace primario. –

+0

elimina la '@' (para que sea un selector de CSS válido) – SirLenz0rlot

0

También tenga en cuenta, en Rails (3.1.1 en mi caso), para imágenes sin dada : valor alt, un valor predeterminado alt es establecido por el asistente image_tag:

: alt - Si no se proporciona texto alternativo, se utiliza el nombre del archivo parte de la fuente (Capitalizado y sin la extensión) [From the Rails API]

Así, por ejemplo, para el archivo de imagen "kitten.jpg", utilizaría find("img[@alt='Kitten']").click (capitalización nota y la eliminación de extensión).

Usando esta convención de rieles, puede buscar enlaces de imagen arbitrarios en pepino/capibara.

+0

... excepto que cada imagen debe tener texto alternativo significativo, por lo que nunca deberías tener que hacer eso. –

1

Tuve un problema cuando no se reconoció la imagen porque había varios elementos ocultos en la página con la misma identificación. Intenta usar algo como esto.

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

Este paso resuelve el problema para mí. Tienes que usar xpaths para hacer coincidir un elemento y luego encontrar su padre. Una advertencia, sin embargo, es que esto podría no estar sincronizado:

Cuando/^ sigo el enlace que contiene (?: | An | a | the |) "([^ \"] ) "image (?: | dentro "([^ \"]) ") $/

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

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

sí si está utilizando algo así en mi caso en 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'} 

y no desea utilizar El ID para hacer clic en el enlace y está usando imágenes, por ejemplo, en mi caso para hacer clic en Eliminar enlace, necesita declarar una clase y luego puede usar el nex t código para hacer clic en el elemento y adicionalmente para confirmar una operación modal:

within '#23' do 
    find('.delete').click 
    page.driver.browser.switch_to.alert.accept 
    end 
Cuestiones relacionadas