2011-11-17 11 views
7

Sto tentando di fare clic su un'immagine con Capybara per un test di Cetriolo, ma non riesco a trovare un modo per ottenere Capybara per vedere l'immagine come un collegamento.Fare clic sull'immagine utilizzando Capibara in cetriolo

Il mio codice per l'immagine è:

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

che viene mostrata come

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

in html, e sono stato in grado di trovare un buon modo per utilizzare capibara cliccare sull'immagine .

Qualche suggerimento?

risposta

9

Questo dovrebbe funzionare:

find('img.icon16').click 

alternativa per ricerca in base al testo alt:

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

Sembra che quel codice non faccia clic sul collegamento associato all'immagine - potrebbe fare clic sull'immagine stessa, ma non prendere io ovunque con il link. Ho finito per passare un ID nel collegamento dietro l'immagine, e quindi ho usato click_link per quel nome ID, che funziona. –

+1

Che driver stai usando?Dovrebbe funzionare in selenio, ma i driver headless potrebbero non essere abbastanza intelligenti da propagare il click up al link genitore. –

+0

rimuovere '@' (per renderlo un selettore css valido) – SirLenz0rlot

0

Si noti inoltre, in Rails (3.1.1 nel mio caso), per immagini senza una data : alt valore, un alt predefinito viene impostato dall'assistente image_tag:

: alt - Se non viene specificato alcun testo alternativo, viene utilizzata la parte del nome del file della sorgente (Capitalizzati e senza l'estensione) [From the Rails API]

Così, per esempio, per il file immagine "kitten.jpg", è necessario utilizzare find("img[@alt='Kitten']").click (capitalizzazione di nota e la rimozione di estensione).

Utilizzando questa convenzione di rotaie, è possibile cercare collegamenti di immagine arbitrari in cetriolo/capibara.

+0

... eccetto che ogni immagine dovrebbe avere un alt text significativo, quindi non dovresti mai averne bisogno. –

1

Ho avuto un problema quando l'immagine non è stata riconosciuta perché c'erano più elementi nascosti nella pagina con lo stesso id. Prova a usare qualcosa di simile.

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

Questo passaggio risolve il problema per me. Devi usare xpath per abbinare un elemento quindi trovare il suo genitore. Un avvertimento, tuttavia, è che questo potrebbe non essere sincronizzato:

Quando/^ Seguo il collegamento contenente (?: | An | a | the |) "([^ \"] ) "image (?: | entro "([^ \"]) ") $/

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

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

sì se si utilizza qualcosa come nel mio caso in 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'} 

e non si desidera utilizzare l'id per fare clic sul link e stai usando le immagini, per esempio nel mio caso per fare clic sul link cancella devi dichiarare una classe e in seguito puoi usare la nuova t codice per fare clic sull'elemento e in aggiunta per confermare un'operazione modale:

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