0
問題は次のとおりです。ページ上のすべての要素を確認し、element.GetAttribute("class") == expectedClass
を確認しようとしています。ここで IWebElementsのforeachループ内でStaleElementExceptionが発生する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++;
}
}
}
は、今私はStaleElementException上に読んでてきたコードであり、私はDOMは、リスト内の要素は常に古くなりリフレッシュしたかのように私のキャッチとアプローチを再試行は無用だと思います。私がここでやる必要があるのは、
Driver.FindElement()
で要素を修正していますが、IWebElementsのforeachループでこの問題が発生していることです。再試行に失敗した特定の要素のセレクタを取得する方法がわかりません。 例外をキャッチしてリストを再構築し、foreachループ全体を再試行する必要がありますか?または私は
Assert.AreEqual("leaveFeed actionTaken", Driver.FindElement(By.someSelector(element.GetSelector)).GetAttribute("class"));
本当にありがとうございました '.ElementAt()'私が探していたまさにでした! –
問題はありません。うれしいことです:) –