So ist mein Problem, wie folgt, ich versuche, alle Elemente auf der Seite zu überprüfen und element.GetAttribute("class") == expectedClass
zu überprüfen. Hier ist der CodeStaleElementException innerhalb einer foreach-Schleife von IWebElements C#
var feedback = Driver.FindElements(AuctivaSalesPageModel.ViewFeedbackSelector);
var attempts = 0;
foreach (IWebElement element in feedback)
{
while (attempts < 3)
{
try
{
Assert.AreEqual("leaveFeed actionTaken", element.GetAttribute("class"));
attempts = 0;
break;
}
catch (StaleElementReferenceException)
{
Assert.AreEqual("leaveFeed actionTaken", element.GetAttribute("class"));
attempts = 0;
break;
}
catch (AssertionException)
{
System.Threading.Thread.Sleep(3000);
Driver.Navigate().Refresh();
AuctivaSalesPage.WaitForElementVisible(Driver, AuctivaSalesPageModel.TotalNumberOfSalesSelector);
AuctivaSalesPage.ScrollToTop();
AuctivaSalesPage.SelectNoFolder();
attempts++;
}
}
}
Jetzt habe ich bereits auf dem StaleElementException Lesen und ich denke, dass mein Fang und wiederholt Ansatz nutzlos ist, als ob das DOM aktualisiert hat dann das Element in der Liste wird immer abgestanden sein. Ich glaube, was ich hier tun muss, ist das Element mit einer Driver.FindElement()
zu refundieren, aber da ich dieses Problem innerhalb einer foreach-Schleife von IWebElements habe, bin ich nicht sicher, wie man den Selektor für das spezifische Element erhält, das nicht wiederholen kann? Sollte ich die Ausnahme abfangen, die Liste neu erstellen und dann die gesamte foreach-Schleife wiederholen? oder gibt es eine Möglichkeit, die Wähler die spezifisch auf die element
innerhalb der Schleife zu extrahieren, damit ich etwas entlang der Linien von
Assert.AreEqual("leaveFeed actionTaken", Driver.FindElement(By.someSelector(element.GetSelector)).GetAttribute("class"));
Vielen Dank '.ElementAt()' wurde genau das, was ich gesucht habe! –
Kein Problem, froh, dass es funktioniert hat :) –