2016-07-29 3 views
0

내 문제는 다음과 같습니다. 페이지의 모든 요소를 ​​확인하고 element.GetAttribute("class") == expectedClass을 확인하려고합니다. 여기 StaleElementException IWebElements의 foreach 루프 내에서 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 루프에서이 문제가 발생한다는 것을 알았습니다. 재시도에 실패한 특정 요소의 선택기를 가져 오는 방법을 모르겠습니다. 예외를 catch해야 목록을 다시 작성한 다음 전체 foreach 루프를 다시 시도해야합니까? 또는 내가

Assert.AreEqual("leaveFeed actionTaken", Driver.FindElement(By.someSelector(element.GetSelector)).GetAttribute("class"));

난이 도움이되기를 바랍니다

답변

0

의 라인을 따라 뭔가를 할 수 있도록 루프 내에서 element 특정 선택기를 추출하는 방법이 있습니다,하지만 난 비슷한 문제가 있었다 얻을 수 있었다 그것은 다음과 같은 논리를 사용하여 주위의하지 최선의 방법을 부여하지만, 그것은 작동 :

var feedbackCount = Driver.FindElements(AuctivaSalesPageModel.ViewFeedbackSelector).Count(); 
var attempts = 0; 
for(var i = 0; i < feedbackCount; i++) 
{ 
    while (attempts < 3) 
    { 
     var element = Driver.FindElements(AuctivaSalesPageModel.ViewFeedbackSelector).ElementAt(i); 
     //Continue you logic here 
    } 
} 

희망이 도움

+0

덕분에 너무 많은'.ElementAt()'내가 찾던 정확히 무엇을! –

+0

문제 없어, 다행 :) –

관련 문제