Comment réparer périmés de référence de l'élément exception, tout en essayant de choisir la date à partir de la date-picker?
Je suis en train de sélectionner la date de la Datepicker.Voici le code
WebDriver d=new FirefoxDriver();
Actions a=new Actions(d);
String date="14";
d.get("http://www.eyecon.ro/bootstrap-datepicker/");
d.findElement(By.cssSelector("div#dp3>span")).click();
List<WebElement> trs=d.findElements(By.cssSelector("div.datepicker-days>table>tbody>tr"));
for(WebElement tr:trs) {
List<WebElement> tds=tr.findElements(By.tagName("td"));
for(WebElement td:tds) {
if(date.equals(td.getText())) {
a.moveToElement(td).click().build().perform();
}
}
}
Avec le code ci-dessus je me suis rassis de référence de l'élément exception à cette ligne de code
"if(date.equals(td.getText())) {"
j'ai donc modifié le code de cette
for(WebElement td:tds) {
while(i<4) {
try {
if(date.equals(td.getText())) {
a.moveToElement(td).click().build().perform();
}
break;
}catch(Exception ex) {
}
System.out.println(i);
i++;
}
}
Maintenant, je suis en mesure de sélectionner la date.Mais le script est toujours jeter la rassis de référence de l'élément d'exception.Le script montre l'erreur à cette ligne maintenant
List<WebElement> tds=tr.findElements(By.tagName("td"));
Je travaille depuis 3 jours.Des suggestions sur la façon de résoudre ce problème.
Merci d'avance
OriginalL'auteur Rachel D'cruz | 2015-02-11
Vous devez vous connecter pour publier un commentaire.
Dans ton premier code, après que vous avez cliqué sur l'élément, le DOM changé, comme dans la Date est devenue "14", et depuis la les deux pour boucle étaient encore itération, par conséquent, il jeta StaleElementReferenceException.
De même, dans le deuxième code, vous n'avez briser le "à l'intérieur de la boucle" qui était en itérant la td éléments, mais vous ne rompt pas le "à l'extérieur", qui ont continué à répéter le tr éléments, d'où il a jeté StaleElementReferenceException encore une fois.
Résolution:- que Vous devez avoir sortir de deux pour les boucles à l'aide de pause après que l'élément a été cliqué, et donc éviter les StaleElementReferenceException, dans le processus.
Code ci-dessous montre comment vous pourriez ai éclaté de les deux pour des boucles sans aucune exception:
REMARQUE:- j'ai ajouté le code pour optimiser windows et de fournir implicite attendre trop, qui est en fait conseillé lors de l'écriture de sélénium scripts.
Content que ça fonctionne pour vous.. Cheers.. 🙂
OriginalL'auteur Subh
Vous devez utiliser
WebDriverWait
etExpectedConditions
de s'attaquer à de caducité d'un élément. Ci-dessous est modifiée bloc de code qui je l'ai testé et il fonctionne.Pour plus d'informations, consultez WebDriverWait et ExpectedConditions ici
Np. J'ai sans vergogne dire que j'ai encore à croire que ma solution est élégante que celle acceptée 🙂
eh bien, il était élégant.Mais dans la réponse que j'ai accepté qu'il a donné une explication claire du problème.Donc, c'est la raison pour laquelle j'ai accepté l'autre réponse
Je pense que c'est juste. Je n'ai manquer sur ce, je pensais que le nommé
for
bloc rend l'explication évidente.OriginalL'auteur nilesh
Trouvé un moyen plus facile pour résoudre mon Vicié de Référence de l'Élément Exceptions.
En Java avec Selenium2 d'essayer le code ci-dessous:
Assure le nettoyage et la reconstruction de l'élément peut se produire par l'intermédiaire d'une fonctionnalité générique, et il peut donc être mis en œuvre de manière transparente .
OriginalL'auteur Aniket Wadkar
Selon ma compréhension lorsque vous effectuez élément.cliquez sur() dans la boucle for DOM reloaded c'est pourquoi il montre rassis élément exception.
Utilisation suivant sélecteur css[Il va les éléments sélectionnés à partir de la date prévue de sélecteur seulement, utilisé ce qu'il y a plusieurs sélecteurs de date sur la page ] & appliquer pause en boucle sur la correspondance des dates comme ci-dessous.Il permettra de sélectionner la date 14 & pauses boucle sans exception -
OriginalL'auteur Deepak