WebDriver - attendre que l'élément à l'aide de Java
Je suis à la recherche de quelque chose de semblable à waitForElementPresent
pour vérifier si l'élément est affiché avant que je clique dessus. Je pensais que cela peut être fait par implicitWait
, j'ai donc utilisé le suivant:
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
puis cliquez sur par
driver.findElement(By.id(prop.getProperty(vName))).click();
Malheureusement, parfois, il attend l'élément et parfois pas. J'ai cherché un peu et trouvé cette solution :
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();
Et il a attendu tout droit, mais avant d'expirer, il aura fallu attendre 10 fois sur 5, 50 secondes. Un peu beaucoup. J'ai donc mis du implicitement attendre à 1sec et tout semblait aller bien jusqu'à maintenant. Parce que maintenant certaines choses, attendre 10s avant le délai d'expiration, mais quelques autres choses de temps après 1s.
Comment couvrez-vous de l'attente pour la présence d'un élément visible dans votre code? Tout soupçon est appréciable.
Vous devez vous connecter pour publier un commentaire.
C'est la façon dont je le fais dans mon code.
ou
pour être précis.
Voir aussi:
@FindBy(how = How.ID, using = "signup-button") WebElement signUpButton;
En outre, je reçois toujours un NPE avec votre code. Ressemble, c'est d'essayer d'obtenir elementToBeClickable. Comment peut-on utiliser cette méthode lorsque l'élément n'est pas chargé ?Vous pouvez utiliser explicitement attendre ou Fluide Attendre
Exemple Explicite d'Attente
Exemple de Fluent Attendez -
Cochez cette TUTORIEL pour plus de détails.
Nous allons avoir beaucoup de conditions de course avec
elementToBeClickable
. Voir https://github.com/angular/protractor/issues/2313. Quelque chose le long de ces lignes a fonctionné raisonnablement bien, même si un peu de force bruteAu-dessus d'attente déclaration est un bon exemple Explicite d'attente.
Explicite que les temps d'attente sont intelligents attend qui sont confinés à un site web particulier élément(comme mentionné ci-dessus x-path).
En Utilisant explicite attend que vous êtes fondamentalement dire WebDriver au max, il est à attendre pour les X unités(ce que vous avez donné comme timeoutInSeconds) de temps avant qu'il abandonne.