È possibile interagire con gli elementi nascosti con il capibara?

Ho un campo di tipo file che ha opacity: 0 e sovrapposizione di un falso pulsante. Il suo comune css tecnica per falso in una sorta di “pulsante ” Carica” che visualizza in modo coerente nei diversi browser.

Capibara non mi permette di chiamare attach_file su tale input. L’errore è Selenium::WebDriver::Error::ElementNotVisibleError: Element is not currently visible and so may not be interacted with.

Qualcuno sa un modo per forzare il capibara per interagire con gli elementi invisibili?

La risposta è ancora senza risposta, ma ho trovato un lavoro in giro. Niente di intelligente, solo rendere visibile l’elemento con un semplice script

  page.execute_script %Q{
    $('#photos').css({opacity: 1, transform: 'none'});
  }

I post per il record.

  • Può essere difficile da fare. Provate a cominciare da JS qui. Ma potrebbe non funzionare in tutti i casi e browser
  • Sembra come se non si utilizza il capibara-webkit (perché di “Selenio::WebDriver::Errore” nel messaggio di errore), quindi ho rimosso il capibara-webkit tag tua domanda
  • Potrebbe essere già risposto qui: stackoverflow.com/a/10805128/914986
  • Il lavoro tutto funziona bene! Grazie
InformationsquelleAutor miguel.camba | 2013-03-25



7 Replies
  1. 72

    È possibile interagire con gli elementi nascosti utilizzando il visible: false proprietà in Capibara.

    Se si desidera fare clic su elemento nascosto utilizzare:

    find("#photos", visible: false).click
    

    Non utilizzare click_button('#photo') direttamente

    • dà ancora qui
    • Non funzionerà, con messaggio non può fare clic su elemento nascosto
    • L’elemento che tu cliccando, incollare la struttura qui
    • Questo potrebbe funzionare solo perché l’elemento di opacità: 0 non visibility: hidden (o simili). Non si può fare clic su elementi nascosti direttamente
    • La risposta da @Thomas Walpole (qui: stackoverflow.com/a/44443849/2809881) è molto più utile e diretta risposta al problema di allegare un file a un invisibile file di input.
    • Nota anche che find("#photos", visible: false), la corrispondenza di visibile #foto, troppo. Se si desidera abbinare elementi invisibili solo, è necessario find("#photos", visible: :hidden) come descritto da Thomas Walpole qui stackoverflow.com/questions/53361214/…

  2. 19

    L’autore di Capybara consiglia di impostare Capibara.ignore_hidden_elements immediatamente prima bisogno di vedere l’invisibile elemento, e ripristinarlo in seguito:

    Capybara.ignore_hidden_elements = false
    click_button 'my invisible button'
    Capybara.ignore_hidden_elements = true
    
    • Quando si leggono, si consiglia solo questo come una soluzione ad un particolare problema. In generale, non è una buona soluzione, perché particolare le prove non dovrebbe alterare globale opzione simile. Vedere makandracards.com/makandra/…
  3. 5

    In generale l’interazione con elementi non visibili non dovrebbe essere possibile quando si utilizza il Capibara (si possono trovare utilizzando il visible: false/hidden opzione nella maggior parte dei cercatori, ma in realtà non fare nulla per loro). Tuttavia, il file di input è un caso speciale perché di quanto è comune per nascondere l’elemento e, a causa di restrizioni di sicurezza, nessun altro modo per aggiungere un file di interagire con le pagine visibili elementi. A causa di questo attach_file ha un make_visible opzione che può essere utilizzato per avere il Capibara rendere l’elemento visibile, allegare il file, e poi il reset CSS per l’impostazione originale.

    attach_file('photos', file_path, make_visible: true)
    
    • Questo dovrebbe essere il nuovo accettato di rispondere.
  4. 0

    Miquel, grazie per workaraund.

    Ho problema simile per interagire con i file nascosto ingresso su C# vincolante per il Selenio Webdriver 2.35 e Firefox 24. Per effettuare la selezione di file di lavoro fatto simile trucco:

    ((IJavaScriptExecutor)webdriver).ExecuteScript("$('#fileUploadInput').css({opacity: 1, transform: 'none'});");
    
    IWebElement e = webdriver.FindElement(By.CssSelector("input#fileUploadInput")));
    
    e.SendKeys("c:\\temp\\inputfile.txt");
    
  5. 0

    Ho finito per risolvere in un altro percorso.

    execute_script() è stato mi dà un momento difficile (sarebbe congelare l’esecuzione di test di FireFox), quindi questo è quello che ho fatto:

    Ho già avuto un opportuno file javascript. Ho aggiunto i seguenti

    <% if ENV["RAILS_ENV"] == "test" %>
      $('#photos').show()
    <% end %>
    

    Ho anche dovuto aggiungere .erb a mio file javascript per una corretta Guide di movimentazione asset.

    E nel mio file di prova, ero già ENV["RAILS_ENV"] = "test"

    In questo modo ho potuto modificare l’interfaccia utente per i test, e ancora mantenere il look and feel di produzione.

    • Questa è l’unica soluzione che ha funzionato per me.
  6. 0

    L’ho fatto in questo modo con gli elementi che ha lo stile CSS display:none; set:

    page.execute_script("$('.all-hidden-elements').show();");
    all('.all-hidden-elements').first.click
    
  7. 0

    Se l’elemento nascosto nidificato in una visibile elemento (ad esempio un input nascosto all’interno di una targhetta visibile), è possibile fare clic sul padre, invece. Se si desidera trovare l’ingresso da parte di ID, è possibile attraversare il genitore in questo modo:

    find('#hidden_input').find(:xpath, '..').click
    

Lascia un commento