如果执行打印操作后屏幕上出现错误,我需要测试失败。
目前,此代码正在运行:
[TestMethod]
[Description("Should Print")]
public void PrintDetails()
{
mainPage.PrintDetails(driver);
Thread.Sleep(300);
Wait.WaitForNoErrorMsg(driver);
}
-
public static void WaitForNoErrorMsg(IWebDriver driver)
{
string errorMsg = "//div[@class='errorMessage']";
try
{
WaitForElementNotVisible(driver, errorMsg, 3);
}
catch (Exception)
{
throw;
}
}
-
public static void WaitForElementNotVisible(IWebDriver driver, string locator, int seconds)
{
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(seconds));
wait.Until(ExpectedConditions.InvisibilityOfElementLocated(By.XPath(locator)));
}
我觉得这不是一种最佳方式,使用ExpectedException可以做得更好。我对吗? 你能提供一个例子吗?
答案 0 :(得分:1)
您可以通过进行以下更改轻松完成此操作:
[TestMethod]
[Description("Should Print")]
[ExpectedException(typeof(ApplicationException))]
public void PrintDetails()
和
public static void WaitForNoErrorMsg(IWebDriver driver)
{
string errorMsg = "//div[@class='errorMessage']";
try
{
WaitForElementNotVisible(driver, errorMsg, 3);
}
catch (Exception)
{
throw new ApplicationException();
}
}
这将做的是你的测试将期望抛出异常并且仅在抛出预期异常时才会通过。
我不会这样做。相反,我会创建两个测试,一个测试正确的路径,另一个测试检查错误的场景。
在这两个测试中,我也会完全不使用异常,因为它们不是必需的,你可以通过不使用它们来简化事情。
我会将WaitForNoErrorMsg
更改为VerifyNoErrorMsg
并让它返回一个布尔值:
public static bool WaitForNoErrorMsg(IWebDriver driver)
{
string errorMsg = "//div[@class='errorMessage']";
try
{
WaitForElementNotVisible(driver, errorMsg, 3);
}
catch (Exception)
{
return false;
}
return true;
}
让你的测试像这样:
[TestMethod]
[Description("Should Print")]
public void PrintDetailsSuccess()
{
mainPage.PrintDetails(driver);
Thread.Sleep(300);
bool errorMessagePresent = WaitForNoErrorMsg(driver);
Assert.IsFalse(errorMessagePresent);
}