Esiste un approccio universale per il selenio per attendere che tutto il contenuto di ajax sia caricato? (non collegato a un sito Web specifico, quindi funziona per ogni sito Web di ajax)Il selenio attende il caricamento del contenuto Ajax - approccio universale
risposta
È necessario attendere Javascript e jQuery per terminare il caricamento. Esegui Javascript per verificare se jQuery.active
è 0
e document.readyState
è complete
, il che significa che il caricamento di JS e jQuery è completo.
public boolean waitForJSandJQueryToLoad() {
WebDriverWait wait = new WebDriverWait(driver, 30);
// wait for jQuery to load
ExpectedCondition<Boolean> jQueryLoad = new ExpectedCondition<Boolean>() {
@Override
public Boolean apply(WebDriver driver) {
try {
return ((Long)((JavascriptExecutor)getDriver()).executeScript("return jQuery.active") == 0);
}
catch (Exception e) {
// no jQuery present
return true;
}
}
};
// wait for Javascript to load
ExpectedCondition<Boolean> jsLoad = new ExpectedCondition<Boolean>() {
@Override
public Boolean apply(WebDriver driver) {
return ((JavascriptExecutor)getDriver()).executeScript("return document.readyState")
.toString().equals("complete");
}
};
return wait.until(jQueryLoad) && wait.until(jsLoad);
}
Come descritto da Mark Collin nel suo libro "Mastering Selenium Webdriver", utilizzare JavascriptExecutor consente di capire se un sito Web che utilizza jQuery ha finito di effettuare chiamate AJAX
public class AdditionalConditions {
public static ExpectedCondition<Boolean> jQueryAJAXCallsHaveCompleted() {
return new ExpectedCondition<Boolean>() {
@Override
public Boolean apply(WebDriver driver) {
return (Boolean) ((JavascriptExecutor) driver).executeScript("return (window.jQuery != null) && (jQuery.active === 0);");
}
};
}
}
Grazie per il vostro suggerimento. Ma cosa succede se un lato non usa jQuery? –
Beh, se hai altre librerie javascript, dovresti fare affidamento su di esse. Nello stesso libro ha un esempio per AngularJS, altrimenti sarei d'accordo con un'altra risposta che devi essere specifica del dominio, e usare [Explicit and Implicit Waits] (http://www.seleniumhq.org/docs/04_webdriver_advanced.jsp#explicit -e-implicito-attende) –
Non credo che ci sia un approccio universale fuori dagli schemi. Generalmente faccio un metodo che fa un .waituntilrowcount(2)
o waituntilvisible()
che esegue il polling di un elemento.
Hm - dammn. Esiste qualche altra libreria in grado di eseguire la scansione dei siti Web di ajax? Stretto di selenio, unità html e crawljax. Problema htmlunit: Molto sensibile contro l'errore e non è possibile disattivarlo. Crawljax: Probabilmente in grado di eseguire la scansione di ajax ma non è possibile ottenere l'html di una pagina Web - ouch selenio: vedere la domanda;) –
- 1. Il selenio attende il download?
- 2. RequireJS non attende il caricamento del modulo?
- 3. Il selenio attende il completamento di JavaScript?
- 4. Jquery non funziona dopo il caricamento del contenuto Ajax
- 5. jQuery non funziona dopo il caricamento del contenuto tramite AJAX
- 6. Java WebDriver attende il caricamento della pagina
- 7. App universale per Android Approccio
- 8. Approccio alla sicurezza del caricamento dell'immagine PHP
- 9. Fancybox: mostra il caricamento dell'animazione durante il caricamento del contenuto iframe
- 10. Scorrere verso l'alto dopo caricamento del contenuto Ajax
- 11. Segnaposto sfondo/immagine mentre si attende il caricamento completo dell'immagine?
- 12. Contenuto del tipo di contenuto all'interno di una richiesta HTTP durante il caricamento del contenuto?
- 13. Problemi con il caricamento del browser chrome utilizzando il driver web del selenio
- 14. Il selenio può gestire il completamento automatico?
- 15. Ajax/jQuery - Carica il contenuto della pagina web in un div durante il caricamento della pagina?
- 16. popover bootstrap: ricarica il contenuto con ajax
- 17. In che modo il metodo attende il rilascio del blocco?
- 18. Errore ADL durante il caricamento del contenuto iniziale Adobe air
- 19. Il browser attende il completamento della chiamata ajax anche dopo la chiamata (jQuery)
- 20. Sostituisce parzialmente il contenuto WebView durante il caricamento
- 21. L'app ng attende il documento.ready?
- 22. Test caricamento del contenuto del messaggio prima che la richiesta AJAX sia completata con Capybara
- 23. Rilevamento di richieste Ajax nel selenio
- 24. Il selenio indica il nome del file durante il download
- 25. Copia il contenuto html da iframe in div (ajax)?
- 26. jquery attende il cursore durante il caricamento di html in div
- 27. Caricamento dell'estensione cromata con selenio
- 28. Integrare il selenio con Scrapy
- 29. UIWebView ritardo nel caricamento del contenuto locale
- 30. Perché l'altezza del contenuto caricata tramite lo scorrimento AJAX infinito non viene misurata correttamente dopo il caricamento?
Grazie :) Funzionerà con ogni sito Web o solo con i siti Web che utilizzano jQuery? –
Funzionerà su qualsiasi sito Web, gestisce la presenza e l'assenza di Jquery e JS – LINGS
Grazie - ci proverò ora –