Le sélénium vicié de référence de l'élément: l'élément n'est pas attaché à la page
Je suis en train d'essayer de comprendre pourquoi il donne une erreur lorsque j'essaie d'afficher les éléments qui ont eu à partir de sites web.
Je suis également en utilisant google chrome, un navigateur.
chromeDriver.Navigate().GoToUrl("somewebsites");
chromeDriver.FindElement(By.Id("something.link.text")).Click();
chromeDriver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));
Et ce d'autres parties de mon code
var item = chromeDriver.FindElementsByXPath("//*[starts-with(@id,\"g_1_\")]/td[3]/span");
foreach (var value in item)
{
Console.WriteLine(value.Text);
}
Chaque fois que j'utilise "chromeDriver.FindElement(Par.Id("quelque chose.lien.texte")).Cliquez sur();", il donne une erreur. Je ne peux pas afficher les données que j'ai tiré.
Dans le message d'erreur, Il dit: "OpenQA.Le sélénium.StaleElementReferenceException: "caduque de référence de l'élément: l'élément n'est pas attaché à la page document". J'ai vérifié les autres posts, mais je n'ai pas le comprendre. Comment puis-je le résoudre?
Que j'ai lu, le sélénium donne la réponse beaucoup plus rapide que le site web à l'heure d'ouverture, de sorte qu'il donne l'erreur. Aussi, rarement, il donne que le sélénium ne peut pas être situé à l'élément. Toute suggestion?
EDIT: Si je supprime ".texte" de la fonction d'affichage, Il affiche "OpenQA.Le sélénium.À distance.RemoteWebElement". Le problèmes avec les chaînes ?
EDIT2: j'ai peut contenir des données que j'ai pris à partir de sites web comme ceci:
[i]="le Système de.Les Collections.ObjectModel.ReadOnlyCollection`1[OpenQA.Le sélénium.IWebElement]"
Pour cela, j'ai écrit quelque chose comme ceci:
string[] test= new string[100];
for (int i = 0; i < 100; i++)
{
kaan[i] = driver.FindElements(By.XPath("//*[starts-with(@id,\"g_1_\")]/td[3]/span")).ToString();
}
Comment puis-je convertir du texte
OriginalL'auteur Kaan Taha Köken | 2017-07-09
Vous devez vous connecter pour publier un commentaire.
Je n'ai pas travaillé en c#, mais ont travaillé sur java/sélénium. Mais,je peux vous donner l'idée de surmonter de caducité.
Généralement, nous aurons la Rassis Exception si les attributs de l'élément ou quelque chose est changé après le début de la webelement. Par exemple, dans certains cas, si l'utilisateur essaye de cliquer sur le même élément sur la même page mais après actualisation de la page, se staleelement exception.
Pour remédier à cela, nous pouvons créer les frais webelement dans le cas où si la page est modifiée ou actualisée. Code ci-dessous peut vous donner une idée.(C'est en java, mais le concept sera le même)
Exemple:
Pour surmonter cette difficulté, nous pouvons stocker le xpath dans une chaîne de caractères et l'utiliser pour créer une nouvelle webelement que nous allons.
Dans ce cas, nous recueillons un groupe de webelements et d'itération pour obtenir le texte. Mais il semble y avoir quelques changements dans la webelement après la collecte de la webelements et gettext jette de caducité. On peut utiliser une boucle et créer l'élément sur l'aller et obtenir le texte.
Espère que cela vous aide. Merci.
Cela ne fonctionnera pas car le Sélénium met en cache le résultat d'un sélecteur. En utilisant le même sélecteur donnent le même résultat, donc retour de la première rassis objet.
base de sélénium attrape jamais. Dans le cas, si nous utilisons la page d'usine puis peut-être.
OriginalL'auteur santhosh kumar
Ce type d'erreur est généralement causée par une mise à jour du DOM. Je vous conseille de vous sur toutes les pages qui contiennent javascript/ajax appels en fait attendre que ces appels avant la fin de l'interaction avec le site. J'en général d'effectuer cette attendre juste après la page chargée, et lors de l'exécution d'une action qui déclenche javascript/ajax appels et/ou mises à jour du DOM. Dans la pratique, cela signifie que le dessous de la fonction une fois la page chargée (ou a été interagi avec), et après cela, trouver l'élément que vous souhaitez interagir avec.
OriginalL'auteur Agent Shoulder
J'ai eu d'abord ce problème mais je l'ai résolu par quelques astuces
privé IWebElement _parentContainer => _driver.FindElement(...)
Aussi, vous pouvez créer résumé basecontrol et certaines méthodes d'extension pour IWebElement et faire un peu de vérification de base des opérations tout en trouvant des éléments
OriginalL'auteur Peter