2016-08-24 3 views
0

전달 된 인덱스를 기반으로하는 목록에서 IWebElement를 가져 오는 함수가 있습니다. 내가 통해 디버깅 할 때함수가 범위를 벗어난 인덱스를 계속 throw합니다.

다음
public void DeleteDraft(int index = 0) { 

    if(ExistingDrafts.Count > 0) { 
     ExistingDrafts[index].Click(); 
    } 

    IWebElement discardButton = Driver.FindElement(By.XPath("/html/body/div[2]/div/div[1]/div[2]/div/div[2]/form/div[7]")).FindElements(By.ClassName("form-control"))[0]; 
    Wait.Until(w => discardButton != null); 

    discardButton.Click(); 
    } 

그것이 내 테스트 -

[Fact] 
    public void DeleteTheDraft() { 

    BroadcastPage.DraftsHyperLink.Click(); 
    //delete first draft 
    string firstDraftSubj = BroadcastPage.ExistingDrafts[0].Text; 
    System.Threading.Thread.Sleep(6000); 
    BroadcastPage.DeleteDraft(0); 

    string newfirstDraftSubj = BroadcastPage.GetNewestDraftSubject(); 
    BroadcastPage.Wait.Until(w => newfirstDraftSubj != null); 

    Assert.True(firstDraftSubj != newfirstDraftSubj, "Draft was not deleted"); 
    } 

에서 어떻게 사용되고있는 기능 - 여기

public IList<IWebElement> ExistingDrafts { get { return Driver.FindElements(By.ClassName("broadcast-list-item")); } } 

있다 - 여기

는 속성입니다 내 검사, 통과한다. 그러나 테스트를 실행하면 예외가 throw됩니다. 나는 무슨 일이 일어나고 있는지 잘 모르겠습니다.

+0

당신은'ExistingDrafts' 요소를 가지고 있는지 확인하지만 즉 * 충분히 * 요소가 있습니다. – DavidG

+0

discardButton.Click(); 해야 할 것? – EJoshuaS

+0

@DavidG 내 if 조건을 언급하고 있습니까? 내 목록에 데이터를 가져 오는 데 걸리는 시간의 문제라고 생각했습니다. –

답변

1

이는 모든 요소가 페이지에로드되지 않았기 때문에 발생합니다. 기본적으로 public IList<IWebElement> ExistingDrafts { get { return Driver.FindElements(By.ClassName("broadcast-list-item")); } }은 일부 요소 만 가져옵니다 (Count > 0 확인). 이것

가장 좋은 방법은 존재하는 모든 요소에 대해 대기 장소에서 대기를 가지고있다이가 사용에 의해 달성 될 수있다 :

public By ExistingDraftBy 
{ 
    get {return By.ClassName("broadcast-list-item");} 
} 

WebDriverWait wait = new WebDriverWait(driver, new TimeSpan(0, 2, 0)); 
wait.Until(ExpectedConditions.PresenceOfAllElementsLocatedBy(ExistingDraftBy)); 

을보다 안전을 위해, 또한 다음 수보다 적은 수의 인덱스를 확인하기 위해 귀하의 if 문을 수정 :

if(ExistingDrafts.Count > 0 && index < ExistingDrafts.Count) 
{ 
    ExistingDrafts[index].Click(); 
} 
+0

정말 고마워요! :디 –