2013-08-22 17 views
6

Sono nuovo nel Selenio. Sto usando Selenium WebDriver con Java. Sto usando eclipse come IDE. Ho scritto del codice per la pagina di accesso e viene eseguito correttamente. Ora voglio andare alla pagina desiderata dopo il login riuscito, ma voglio aspettare per qualche tempo prima di transitare in un'altra pagina. Come posso aspettare una pagina prima di caricare un'altra pagina?Come attendere una pagina prima di passare a un'altra pagina in Selenium WebDriver utilizzando Java?

+1

'Thread.sleep()'? –

+0

Che cosa stai usando? Selenium RC o selenio WebDriver? –

risposta

12

Per quanto ne so, ci sono 3 modi:

  1. attesa implicito: (E 'applicabile a tutti gli elementi della pagina)

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

  2. attesa esplicita: (applicabili per un particolare elemento)

    WebDriverWait.until(CONDITION_THAT_FINDS_AN_ELEMENT);

codice più specifica è la seguente:

WebDriverWait wait = new WebDriverWait(driver, 40); 
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.id("someid"))); 
  1. Utilizzando Discussione:

    Thread.sleep(NUMBER_OF_MILLIS);

+0

Ho usato: Thread.sleep (NUMBER_OF_MILLIS); ora funziona. Grazie mabbas. –

+2

WebDriverWait è meglio aspettare un elemento. In questo caso, è necessario identificare un elemento della pagina di destinazione. –

+0

Cosa indica la figura 40 nella dichiarazione: WebDriverWait wait = new WebDriverWait (driver, 40); –

1

Usa classe WebDriverWait

Selenium explicit/implicit wait

È possibile attendere finché non viene visualizzato l'elemento previsto nella pagina successiva. :

WebDriver _driver = new WebDriver(); 
WebDriverWait _wait = new WebDriverWait(_driver, TimeSpan(0, 1, 0)); 

_wait.Until(d => d.FindElement(By.Id("Id_Your_UIElement")); 
+0

genera * l'eccezione per individuare l'eccezione dell'elemento * nel metodo 'Until'. –

0

Provare utilizzando implicitamente Attesa per 60 sec. come segue in Selenium WebDriver:

driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);//wait for 60 sec. 

Se è necessario attendere, renderlo 80, 90 e così via.

Per Selenio RC è possibile utilizzare il codice come di seguito:

selenium.waitForPageToLoad("60000");//wait for 60 sec. 

Esso può essere fatto utilizzando la conversazione come di seguito:

Thread.sleep(NUMBER_OF_MILLIS); 

Per esplicita attesa in WebDriver, identificare un elemento a carico pagina e scrivere il codice come riportato di seguito:

WebDriverWait wait = new WebDriverWait(driver, 40);//wait for 40 sec. 
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.id("someid"))); 
4

Mi sconsiglio davvero di utilizzare Thread.sleep (NUMBER_ OF_MILLS). Non sarà stabile e ti colpiranno occasioni in cui il sonno non è abbastanza lungo.

Se si sta semplicemente aspettando il caricamento del DOM, un evento WebDriver che attiva il caricamento della pagina attenderà sempre il caricamento del DOM prima di restituire il controllo.

Tuttavia, se AJAX viene utilizzato per modificare l'HTML dopo DOM, ti consigliamo di utilizzare WebDriverWait e attendere fino a quando si verifica un evento noto (ad esempio, l'oggetto viene visualizzato in html, le modifiche di testo, ecc.)

Se si prende una cosa da questo post, si prega di smettere di usare Sleep!

0

Ho usato questo approccio. Cerca di capire quale elemento della pagina è l'ultimo a caricare. Prendendo il locator di quell'elemento e verificandone l'esistenza usando isDisplayed, sarai in grado di vedere quando l'intera pagina viene caricata

Problemi correlati