2013-10-29 54 views
0

在selenium IDE中,有一個驗證命令。當我將命令導出到C#中時,我發現驗證基本上是try catch語句中的一個斷言,並且該錯誤被添加到字符串中。使用NUnit在硒測試中使用驗證

在我的代碼中,我想使用verify命令的功能,但我不想爲每個斷言使用try和catch語句。

有沒有人有辦法做到這一點?

編輯:

public static void AssertVerticalAlignment(CustomWebDriver webDriver, IElement elementA, IElement elementB, double tolerance = 0) 
    { 
     try 
     { 
      Assert.AreEqual(elementA.Location.X, elementB.Location.X, tolerance); 
     } 
     catch (Exception exception) 
     { 
      LogHelper.LogException(exception.Message, exception.StackTrace, webDriver.GetScreenshot()); 
      throw; 
     } 
    } 

我想要做的就是在斷言添加一條消息。它應該說nameOfElementA不與nameOfElementB對齊。但我不想給elementA和elementB一個名稱屬性。

這就是我所說的方法:AssertVerticalAlignment(webdriver, homepage.NameInput, homepage.AgeInput) 主頁是一個對象,NameInput是主頁的一部分。 NameInput的類型是IElement,它與IWebElement基本相同,但它不能與html交互,即。它不點擊

所以我想消息說NameInput不與AgeInput

回答

1

你基本上是要求一個方式做「軟斷言」對準的能力,等等​​。 IDE做這件事的方式是正確的。畢竟,這就是「軟斷言」。如果某個斷言失敗了,你希望它繼續。這就是IDE所做的,通過捕獲該異常(請注意,在它的代碼中,它只能捕獲AssertionException)。

爲了幫助避免混亂的代碼,最好的辦法是創建您自己的verify方法。有時你甚至不需要捕捉異常。爲什麼你需要的exception在所有

private class SoftVerifier 
{ 
    private StringBuilder verificationErrors; 

    public SoftVerifier() 
    { 
     verificationErrors = new StringBuilder(); 
    } 

    public void VerifyElementIsPresent(IWebElement element) 
    { 
     try 
     { 
      Assert.IsTrue(element.Displayed); 
     } 
     catch (AssertionException) 
     { 
      verificationErrors.Append("Element was not displayed"); 
     } 
    } 
} 

:例如採取這種基本verifyElementIsPresent方法?

private class SoftVerifier 
{ 
    private StringBuilder verificationErrors; 

    public SoftVerifier() 
    { 
     verificationErrors = new StringBuilder(); 
    } 

    public void VerifyElementIsPresent(IWebElement element) 
    { 
     if (!element.Displayed) 
     { 
      verificationErrors.Append("Element was not displayed"); 
     } 
    } 
} 

排序答案是有一些方法可以讓它少一點凌亂,但整體而言,沒有,有沒有什麼可以做的。

+0

這是一個恥辱。在我的代碼中有很多斷言,如果我爲每個斷言放置一個try catch或if語句,這將非常混亂。但我想我可能必須這樣做。 感謝您的回覆 – user2932876

+0

@ user2932876,爲什麼不創建類似我的代碼示例?負責處理例外的類?這樣你就可以隱藏測試中的異常。 – Arran

+0

哦,我現在看到了,是啊,這可能是我應該做的 讓我嘗試,然後回到你身邊 – user2932876