Comment faire pour récupérer tous les liens et cliquez sur ces liens un par un à l'aide de Selenium WebDriver
Je suis en utilisant Selenium WebDriver avec java.
Je suis aller chercher tous les liens de la page web et en essayant de cliquer sur chaque lien un par un. Je suis d'erreur ci-dessous:
erreur org.openqa.le sélénium.StaleElementReferenceException: Élément introuvable dans le cache - peut-être que la page a changé depuis qu'il a été regardé
Commande de la durée ou de l'expiration: 30.01 secondes
Pour de la documentation sur cette erreur, veuillez visiter: http://seleniumhq.org/exceptions/stale_element_reference.html
Construire info: version: '2.25.0', de révision: '17482', le temps: '2012-07-18 21:09:54'
et voici mon code :
public void getLinks()throws Exception{
try {
List<WebElement> links = driver.findElements(By.tagName("a"));
int linkcount = links.size();
System.out.println(links.size());
for (WebElement myElement : links){
String link = myElement.getText();
System.out.println(link);
System.out.println(myElement);
if (link !=""){
myElement.click();
Thread.sleep(2000);
System.out.println("third");
}
//Thread.sleep(5000);
}
}catch (Exception e){
System.out.println("error "+e);
}
}
en fait, c'est l'affichage en sortie
[[FirefoxDriver: firefox sous XP (ce0da229-f77b-4fb8-b017-df517845fa78)] -> nom de la balise: a]
comme lien, je tiens à éliminer ces résultat du formulaire.
OriginalL'auteur Shammi | 2012-11-19
Vous devez vous connecter pour publier un commentaire.
N'est pas une bonne idée d'avoir scénario suivant :
Pourquoi? Car il n'y a aucune garantie que le
element.click();
n'aura aucun effet sur les autres éléments trouvés, de sorte que leDOM
peut être changé, donc leStaleElementReferenceException
.Il est préférable d'utiliser le scénario suivant :
C'est mieux parce que vous prenez toujours la
WebElement
rafraîchi, de même que la précédente, cliquez sur eu certains effets sur elle.EDIT : Exemple ajouté
Espère être assez.
J'ai mis à jour ma réponse.
J'ai encore de la difficulté, n'est-ce pas passer à travers. Peut-être parce que je suis nouveau sur le sélénium pilote. la boucle est en cours d'exécution 4 fois après que l'envoi d'erreur suivant <blockquote>'error org.openqa.le sélénium.ElementNotVisibleException: l'Élément n'est pas visible et ne peuvent donc pas être en interaction avec la Commande de la durée ou de l'expiration: 30.05 secondes Construire info: version: '2.25.0', de révision: '17482', temps: "2012-07-18 21:09:54' info Système: os.nom: de "Windows 7", système d'exploitation.arc: 'x86', os.version: '6 >
Eh bien, ce est un problème différent StaleElementReferenceException. Cela signifie que vous essayez d'accéder à un élément qui n'est pas visible, et plus probablement qui est rendue visible par un autre élément. Donc, vous devez d'abord déterminer qui est cet élément, puis assurez-vous qu'il est visible avant d'effectuer toute action sur elle. Ou si ce n'est pas obligatoire, vous pouvez utiliser .isDisplayed() la méthode, afin de vérifier si cet élément est bon, et puis continuer.
Merci beaucoup, maintenant ça fonctionne 🙂
OriginalL'auteur Ioan
NON, il ne fonctionne pas, toujours la même erreur erreur ci-dessus 🙁
OriginalL'auteur Anand Somani
Si vous êtes OK à l'aide de
WebDriver.get()
au lieu deWebElement.click()
pour tester les liens, une autre approche est de sauver lahref
valeur de chaque trouvéWebElement
dans une liste séparée. De cette façon, vous éviter laStaleElementReferenceException
parce que vous n'êtes pas d'essayer de réutilisation ultérieureWebElement
s après le passage de loin le premierWebElement.click()
.Exemple de base:
OriginalL'auteur PAdamB
De crédit va à "prêt".
Je reçois également "vicié exception" j'ai donc utilisé le "prêt" réponse et fonctionne parfaitement. Juste si quelqu'un à besoin de savoir cliquer sur chaque lien de la page de résultats, essayez ce (java)
clickAllHyperLinksByTagName("h3");
où "h3" balise contient le lien hypertexteOriginalL'auteur user790049
Pour une Explication complète de Lire Ce POST
OriginalL'auteur anuja jain
OriginalL'auteur Anjuman