attendere fino a quando l'invisibilità utilizzando la fabbrica di pagine non funziona [duplicato]
ho questo codice:
@FindBy(how = How.CLASS_NAME, using = "loading-class")
WebElement loadingAnimation;
Quando provo a usare questa riga:
waitDriver.until(ExpectedConditions.invisibilityOf(this.loadingAnimation));
Genera un'eccezione:
org.openqa.selenium.TimeoutException: Expected condition failed: waiting for invisibility of Proxy element for: DefaultElementLocator 'By.className: loading-container' (tried for 30 second(s) with 500 milliseconds interval)
per qualche motivo funziona quando eseguo il debug del codice.
Devo dire che funziona anche:
while(true)
{
try {
this.loadingAnimation.isDisplayed();
}
catch (Exception e) {
break;
}
}
Come farlo funzionare usando Page Factory?
Risposte
Quando implementi il modello Page Object e inizializzi la tua pagina con PageFactory
Selenium, ti offre la possibilità di utilizzare custom ElementLocator
. C'è AjaxElementLocator
quello che dovrebbe essere usato per gli elementi dinamici.
Per applicare la tua logica su come considerare il tuo elemento pronto per l'uso, esiste un metodo che è l'implementazione predefinita
protected boolean isElementUsable(WebElement element) {
return true;
}
Quindi sei libero di ignorare quello per implementare la tua condizione. In poche parole devi implementare la tua abitudine ElementLocatorFactory
che produrrebbe AjaxElementLocator
oggetti con il tuo isElementUsable
metodo personalizzato. Quindi inizializzeresti la tua pagina con
public class YourPage{
...
public YourPage(...){
PageFactory.initElements(new YourCustomLocatorFactory(...), this);
}
...
}
Puoi trovare qui l'esempio completo di come attendere un determinato stato degli elementi dinamici degli oggetti della tua pagina senza utilizzare ExpectedConditionsutility .