2012-03-21 14 views
7

Sto scrivendo le specifiche della richiesta ... Io uso Capibara ... E sono nei guai con alcune finestre modali.(Capybara) finestra modale di accesso

Quello che voglio veramente nel mio test è compilare un modulo che si apre in una finestra modale.

La modale viene creata con Bootstrap da Twitter (http://twitter.github.com/bootstrap/javascript.html#modals) ... e sta attraversando un insieme di transizioni (ma non so se questo è rilevante per quello che sto per dire).

ho provato un paio di soluzioni che ho trovato sul web, come:

A) il passaggio tra le pagine con page.driver.browser.window_handles

page.driver.browser.switch_to.window(page.driver.browser.window_handles.last) 

B) utilizzando wait_until per assicurarsi che i carichi modali

def modal_wrapper_id 
    '#modal-edit' 
end 

def modal_visible 
    wait_until { find(modal_wrapper_id).visible? } 
rescue Capybara::TimeoutError 
    flunk 'Expected modal to be visible.' 
end 

ma nessuno di quelli ha funzionato ... quindi ho pensato di rendere il numero di handle di finestra nel momento in cui la finestra modale è attiva ...

Quindi ho fatto questo:

puts page.driver.browser.window_handles.length.should == 2 

E ho ottenuto questo:

Failure/Error: page.driver.browser.window_handles.length.should == 2 
      expected: 2 
      got: 1 (using ==) 

Da quello che ho capito, in pratica la mia finestra modale non esiste.

Qualsiasi aiuto su questo sarebbe molto apprezzato.

Grazie.

risposta

1

Non ho usato Capybara, ma il tuo problema ha a che fare con il fatto che la finestra di dialogo modale di Bootstrap è in realtà uno pseudo-modale, in quanto è in realtà solo un elemento div e una sovrapposizione trasparente dietro di esso. Una vera finestra di dialogo modale potrebbe essere creata utilizzando window.confirm, ad esempio, che può essere effettivamente interrogato utilizzando il codice di esempio. Nel tuo caso dovresti dare l'elemento modale div un id, e usarlo come maniglia per interrogarlo da Capybara e aspettare finché il suo display non è "blocco". Non ho provato nulla però.

1

Capybara per impostazione predefinita: driver rack_test. Puoi confermare che stai utilizzando Selenium WebDriver o un altro driver in cui l'apertura di una modalbox è effettivamente possibile?

+0

Sto usando il selenio! 'Capybara.default_driver =: selenium' – adritha84

+0

Ok, non l'hai menzionato nel tuo post. Dal momento che non vedo nulla di sbagliato, mi assicurerei di invocare realmente quel pop-up nella tua suite di test (facendo clic su qualcosa, ecc., Non conosco la logica aziendale). Inoltre puoi mettere un po 'di sonno 10 dopo l'azione di "richiamo pop-up", solo a scopo di test. – socjopata

+0

Ho inserito alcune azioni 'sleep' nelle mie specifiche e l'ho testato in molti modi ... e, come hai detto, non vedo niente di sbagliato neanche ... Ma ancora, ottengo l'errore specificato, il che significa che l'handle di quella finestra modale non esiste, quindi la finestra non esiste. – adritha84

Problemi correlati