2012-12-20 15 views
5

In base al selenio, un'attesa implicita esegue il polling del DOM per un certo periodo di tempo per verificare se viene visualizzato un elemento. La mia comprensione è che eseguirà il polling fino a un determinato intervallo di tempo, ma se un elemento compare prima, continuerà senza ulteriori attese.Selenio implicito wait vs Thread.sleep()

http://seleniumhq.org/docs/04_webdriver_advanced.html

Ho un metodo che viene eseguito in circa 13 secondi. Quando imposto l'attesa implicita su 100 secondi, sono necessari 213 secondi.

driver.manage().timeouts().implicitlyWait(100, TimeUnit.SECONDS); 

Sembra che durante questo metodo, sto aspettando 2 volte (100 secondi ciascuno). Impostare l'attesa implicita su 0 o 100 non influenza il mio metodo. In entrambi i casi, terminano correttamente.

La mia domanda è questa. Ho pensato che l'attesa implicita aspettasse il minor tempo per mostrare un elemento. È giusto? O sto facendo qualcosa di sbagliato?

Inoltre, perché sta aspettando 2 volte, quando apparentemente non ha bisogno di aspettare? (Il mio metodo termina correttamente anche se ho impostato l'attesa per 0)

+0

possibile duplicato di [selenium webdriver - attesa esplicita vs attesa implicita] (http://stackoverflow.com/questions/10404160/selenium-webdriver-explicit-wait-vs-implicit-wait) – lesmana

risposta

4

Risposta breve:

attesa implicita - E 'impostazione globale applicabile per tutti gli elementi e se elemento di comparire davanti specificato tempo di quanto lo script inizierà l'esecuzione altrimenti lo script sarà lanciare NoSuchElementException. Il modo migliore per utilizzare il metodo di installazione. Riguardano solo By.findelement().

Thread.sleep() - Dormirà il tempo per lo script, non è un buon modo di utilizzare lo script perché è in modalità sospensione.

+0

Cosa succede se il driver goto un altro url, l'attesa implicita è ancora efficace? o devo richiamarlo di nuovo? – 8090PZ

+0

ma, valido per la durata della corsa indipendentemente dall'URL. Si noti che per findElements è possibile prevedere size() == 0. Ma il selenio attenderà l'ultima volta specificata. Se la pagina viene caricata al momento del test, la riduzione del tempo di attesa implicito (ad esempio 1 secondo) prima di findElements e il successivo ripristino alla normalità determineranno tempi di esecuzione più rapidi. –