2012-03-28 22 views
8

Quiero obtener una excepción de la carga de la página, pero todavía no tengo resultados. Uso implicitlyWait para configurar el temporizador para lanzar una excepción.Java WebDriver espera a que cargue la página

WebDriver driver = new FirefoxDriver(); 
driver.manage().timeouts().implicitlyWait(1, TimeUnit.MILLISECONDS); 
driver.get("http://www.rambler.ru"); 
driver.quit(); 

¿Alguien podría por favor actualizarme con sugerencias? Necesito esto para asegurarme de que la carga de la página no sea infinita, y si el tiempo de carga será más de lo que he definido en el temporizador -> lanzar excepción como resultado y omitir TC (como falló).

Gracias, Volodymyr

Respuesta

17

¿Por qué utiliza implícita de espera antes de la apertura de la página? Intenta usar espera explícita. Encuentre algún elemento de página importante en ramber (por ejemplo, el cuadro de texto de búsqueda). Por ejemplo:

WebDriverWait wait = new WebDriverWait(webDriver, 5); 
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("xpath_to_search_textbox"))); 

hasta que el método() arroje TimeoutException si el cuadro de texto de búsqueda no aparecerá en 5 segundos.

+0

Gracias por su sugerencia, corríjanme si me equivoco, sugiera que use wait para element después de driver.get ("http://www.rambler.ru"); pero WebDriver esperará hasta que driver.get() termine de cargar la página y luego irá al elemento wait? –

+0

webdriver siempre espera la carga de la página. Puede ser que entiendo mal tu pregunta. En este caso, puede usar el temporizador que iniciará el conteo cuando invoque get ("rambler.ru") y tire TimeoutException usted mismo si el tiempo de carga es más de 30 segundos (por ejemplo) –

+0

Quiero decir que: http: // stackoverflow .com/a/6107997/1165331 –

0

No estoy de acuerdo con que la respuesta de Pavel Zorins funcione porque no muestra cómo manejar las excepciones.

Así es como espero un iFrame. Esto requiere que su clase de prueba JUnit pasar la instancia de RemoteWebDriver en el objeto de página:

public class IFrame1 extends LoadableComponent<IFrame1> { 

    private RemoteWebDriver driver; 

    @FindBy(id = "iFrame1TextFieldTestInputControlID") 
    public WebElement iFrame1TextFieldInput; 

    @FindBy(id = "iFrame1TextFieldTestProcessButtonID") 
    public WebElement copyButton; 

    public IFrame1(RemoteWebDriver drv) { 
     super(); 
     this.driver = drv; 
     this.driver.switchTo().defaultContent(); 
     waitTimer(1, 1000); 
     this.driver.switchTo().frame("BodyFrame1"); 
     LOGGER.info("IFrame1 constructor..."); 
    } 

    @Override 
    protected void isLoaded() throws Error {   
     LOGGER.info("IFrame1.isLoaded()..."); 
     PageFactory.initElements(driver, this); 
     try { 
      assertTrue("Page visible title is not yet available.", driver 
    .findElementByCssSelector("body form#webDriverUnitiFrame1TestFormID h1") 
        .getText().equals("iFrame1 Test")); 
     } catch (NoSuchElementException e) { 
      LOGGER.info("No such element."); 
      assertTrue("No such element.", false); 
     } 
    } 

    @Override 
    protected void load() { 
     LOGGER.info("IFrame1.load()..."); 
     Wait<WebDriver> wait = new FluentWait<WebDriver>(driver) 
       .withTimeout(30, TimeUnit.SECONDS) 
       .pollingEvery(5, TimeUnit.SECONDS) 
       .ignoring(NoSuchElementException.class) 
       .ignoring(StaleElementReferenceException.class) ; 
      wait.until(ExpectedConditions.presenceOfElementLocated( 
      By.cssSelector("body form#webDriverUnitiFrame1TestFormID h1"))); 
    } 
.... 

Nota: Puede see my entire working example here.

Cuestiones relacionadas