2017-11-07 9 views
0

페이지에 여러 요소가 있는지 확인하고 어떤 요소도없는 경우 현재없는 오류 메시지 목록을보고 싶습니다. . 순간 Selenium WebDriver C# - 예외가 throw 된 경우 계속 진행

나는이 :

테스트 케이스 :

[Test] 
public void CheckAllElementsArePresent() 
{ 
    Assert.IsTrue(Results.CheckFirstElement()); 
    Assert.IsTrue(Results.CheckSecondElement()); 
    Assert.IsTrue(Results.CheckThirdElement()); 
} 

프레임 워크 :이 중 하나라도 실패 할 경우

public static bool CheckFirstElement() 
{ 
    var results = Driver.Instance.FindElement(By.CssSelector("firstElementSelector']")); 

    if (results == null) 
    { 
     throw new Exception("Cannot find first element"); 
    } 

    var attr = results.GetAttribute("id"); 
    if (attr == null) 
    { 
     throw new Exception("Cannot find first element"); 
    } 

    if (attr.Contains("someTextIWantToFind")) 
    { 
     return true; 
    } 
    return false; 
} 

이 작동하지만, 테스트가 실패합니다. 테스트를 계속 실행하고 테스트가 끝날 때 오류가 나올 수있는 방법이 필요합니다. 예 : "첫 번째 요소를 찾을 수 없습니다.", "세 번째 요소를 찾을 수 없습니다."

감사합니다.

public static string CheckFirstElement() 
{ 
    var results = Driver.Instance.FindElement(By.CssSelector("firstElementSelector']")); 

    if (results == null) 
    { 
     return "Cannot find first element"; 
    } 

    var attr = results.GetAttribute("id"); 
    if (attr == null) 
    { 
     return "Cannot find id attribute of first element"; 
    } 

    if (!attr.Contains("someTextIWantToFind")) 
    { 
     return "Cannot find the text in first element"; 
    } 
    return null; 
} 

는 다음 주 시험에서 발견 된 오류를 수집 :

[Test] 
public void CheckAllElementsArePresent() 
{ 
    var errors = new List<string>(); 
    var error = Results.CheckFirstElement(); 
    if(error != null) 
     errors.Add(error); 
    error = Results.CheckSecondElement(); 
    if(error != null) 
     errors.Add(error); 
    error = Results.CheckThirdElement(); 
    if(error != null) 
     errors.Add(error); 

    if(errors.Any()) 
    { 
     //Output to console 
     var errorString = string.Join(";", errors); 
     Console.Writeline(errorString); 
     //Fail the test 
     Assert.Fail(errorString); 
    } 

} 

이것은 단지 하나의 방법입니다 당신이 무엇을 할 수 있는지

답변

0

의 요구

public static class MakeSure 
{ 
    private static List<string> errorsFound = new List<string>(); 
    public static List<string> getErrors() { return errorsFound; } 

    public void ElementIsNotNull(IWebElement element, string elementName) 
    { 
     if(element == null) 
     { 
      errorsFound.Add("Cannot find element " + elementName +"."); 
     } 
    } 

    public void ElementHasAttribute(IWebElement element, string elementName, string attribute) 
    { 
     if(element.GetAttribute(attribute) == null) 
     { 
      errorsFound.Add("Cannot find " + attribute + " attribute of the element."); 
     } 
    } 

    public void ElementContaisText(IWebElement element, string elementName, string attribute, string text) 
    { 
     if(!element.GetAttribute(attribute).Text.Contains(text)) 
     { 
      errorsFound.Add("Cannot find the text " + text +" in " + elementName +" element"); 
     } 
    } 
} 

에 대한 방법을 유지하는 새로운 클래스를 작성하고 당신이 당신의 테스트 케이스에서 그들을 호출 할 수 있습니다 "를있게 만든다"는 당신의 요소는, 당신은 만들 수 등 null의 특정 속성 아닙니다했다합니다 더 오버로드 그래서 당신과 같이, "ID"에서 "속성"매번 넣을 필요가 없습니다 :

public void ElementHasAttribute(IWebElement element, string elementName) 
{ 
    ElementHasAttribute(element, elementName, "id"); 
} 

그래서 매번 당신이 당신의 속성은 "ID"가되고 싶어요, 당신은 단지 과부하 메서드를 호출합니다. 위의 예를 따라하면되고 코드/메소드를 필요에 맞게 변경할 수 있습니다.

당신은 또한 다음과 같은

public void CheckFirstElement() 
{ 
    IWebElement firstElement; 
    MakeSure.ElementIsNotNull(firstElement, "first element"); 
    MakeSure.ElementHasAttribute(firstElement, "first element", "id"); 
    MakeSure.ElementContaisText(firstElement, "first element", "id", "Text to validate."); 
} 

을 할 수있는 결과 클래스를 수정할 수 있습니다 그래서 당신은 테스트에해야 할 모든은 다음과 같습니다

Results.CheckFirstElement(); 
+1

이것은 멋지게, 나는 그것을 시도하고 구현할 것이다 - 고마워! –

+0

문제가 없습니다! 천만에요. 구현에 대해 궁금한 점이있는 경우 질문을 삭제하면 될 때마다 답변 해 드리겠습니다. –

0

오류 문자열을 반환하는 방법을 수정합니다. 더 정교 해지기를 원하면 booleanErrorMessage 속성을 사용하여 결과로 클래스를 반환 할 수 있습니다.

+0

나는이 갈 줄 것이다, 감사합니다! –