在selenium IDE中,有一个验证命令。当我将命令导出到c#时,我发现verify基本上是try catch语句中的断言,并且错误被添加到字符串中。
在我的代码中,我想使用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)
Homepage是一个对象,NameInput是Homepage的一部分。 NameInput的类型为IElement,与IWebElement基本相同,但它不能与html交互,即。它无法点击等等。
所以我希望消息说NameInput与AgeInput
不对齐答案 0 :(得分:1)
你本质上是在想办法做“软断言”。 IDE的方式是正确的。毕竟,那就是“软断言”。如果某些特定断言失败了,那么无论如何都要让它继续下去。这就是IDE正在做的事情,通过捕获该异常(请注意,在它的代码中它只捕获AssertionException
)。
为了帮助避免代码混乱,您可以做的最好的事情就是创建自己的verify
方法。有时您甚至不需要捕获异常。例如,采用这种基本的verifyElementIsPresent
方法:
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");
}
}
}
为什么你需要exception
?
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");
}
}
}
排序答案是,有一些方法可以让它变得不那么混乱,但总的来说,不,你可以做的事情并不多。