2016-07-01 2 views
0

코드를 실행할 때 부실 요소 예외가 발생합니다. 그러나 디버깅하는 동안이 예외가 발생하지 않습니다. 여기 내 코드 조각이 있습니다. 아무도 나를 도울 수 있습니까? 코드보고에서 감사셀레늄 부실 요소 예외 (디버깅 도중 테스트를 실행할 때 발견됨)

 public static bool CheckListFilterResult(IList<IWebElement> gridColumns, IList<IWebElement> gridRows, string filterColumn, List<string> filters) 
    { 
     bool checkResult = false; 
     { 
      int filterColumnIndex = GetColumnIndex(gridColumns, filterColumn); 
      if (gridRows.Count > 0) 
      { 
       foreach (IWebElement row in gridRows) 
       { 
        TestManager.Doc.Step("before bool match"); 
        bool filterMatch = filters.Contains(row.FindElements(By.TagName("td"))[filterColumnIndex].Text.Trim()); 
        if (filterMatch) 
        { 
         checkResult = true; 

        } 
        else 
        { 
         checkResult = false; 
         break; 
        } 
       } 
      } 
     } 
      return checkResult; 
     } 
    } 
+1

희망이 도움? – JeffC

+0

bool filterMatch = filters.Contains (row.FindElements (BytagName ("td")) [filterColumnIndex] .Text.Trim()); – J12345

답변

0

는, 그 행은 rows 컬렉션에서 뭔가를 액세스하는 첫 번째 줄입니다. 내 짐작은 그 일과 관련이 있다는 것입니다. rows 컬렉션을 가져 와서 필터를 적용한 다음이 함수를 호출 했습니까? 그렇다면 아마 문제 일 것입니다. 필터를 적용한 다음 rows 컬렉션을 가져온 다음 함수를 호출해야합니다.

0

셀렌 코드를 실행하는 동안 IWebElement 행이 javascript에 의해 업데이트되었을 수 있습니다.

http://docs.seleniumhq.org/exceptions/stale_element_reference.jsp 설명 : 이전 요소 참조 UI에서 개체가 새로 고쳐졌지만 동일한 개체에 액세스하려고 할 때 예외가 발생합니다. 따라서 행이 사용자에게 표시 되더라도 자바 스크립트로 업데이트/대체되었을 수 있습니다. 그러면 다른 객체입니다.

디버그 모드에서 실행하면 셀렌 코드의 각 줄에서 멈추지 만 자바 스크립트 코드는 멈추지 않으므로 UI의 요소가 이미 새로 고쳐 졌을 수 있습니다 , 셀렌 코드에서 IWebElement 행을 새로 가져옵니다.

이 문제를 해결할 수있는 방법은 여러 가지가 있습니다.

  1. StaleElementReferenceException을 잡으려고 시도하십시오. 발생하면 다시 시도하십시오.
  2. 다음을 수행 할 수 있습니다. wait.until (ExpectedConditions.stalenessOf (row));

는 예외가 어떤 선을 발생 않습니다에

관련 문제