Sto cercando qualcosa di simile a waitForElementPresent
per verificare se l'elemento viene visualizzato prima di fare clic su di esso. Ho pensato che questo può essere fatto da implicitWait
, così ho usato il seguente:WebDriver - attendere elemento utilizzando Java
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
e quindi fare clic su da
driver.findElement(By.id(prop.getProperty(vName))).click();
Purtroppo, a volte attende per l'elemento e, a volte no. Ho guardato per un po 'e ho trovato questa soluzione:
for (int second = 0;; second++) {
Thread.sleep(sleepTime);
if (second >= 10)
fail("timeout : " + vName);
try {
if (driver.findElement(By.id(prop.getProperty(vName)))
.isDisplayed())
break;
} catch (Exception e) {
writeToExcel("data.xls", e.toString(),
parameters.currentTestRow, 46);
}
}
driver.findElement(By.id(prop.getProperty(vName))).click();
Ed è aspettato tutto bene, ma prima del timeout è dovuto attendere 10 volte 5, 50 secondi. Un po 'troppo. Così ho impostato implicitamente l'attesa per 1sec e tutto sembrava a posto fino ad ora. Perché ora alcune cose aspettano 10 secondi prima del timeout ma alcune altre cose scadono dopo 1 secondo.
Come si copre l'attesa dell'elemento presente/visibile nel codice? Ogni suggerimento è apprezzabile.
Grazie! Se solo avessi saputo prima su questa classe la mia vita sarebbe stata più facile :) – tom
Come faccio ad incorporare il tuo codice in questo formato?\t '@FindBy (how = How.ID, using =" signup-button ") \t WebElement signUpButton;' Inoltre, ho ancora un NPE con il tuo codice. Sembra che stia cercando di ottenere elementToBeClickable. Come possiamo usare questo metodo quando l'elemento non è caricato? – HelloWorldNoMore