[英]What to do when an exception occurs in Selenium WebDriver?
我知道这个问题现在肯定已经被问过很多遍了,但是我找不到我想要的东西。 也许有人可以在这里帮助我。
当硒测试由于超时,找不到元素,不可见等原因而遇到异常时,我们应该如何处理。 我知道我们不应该明确地使它失败。 我们应该跳过该测试还是应该以其他方式处理它?
好吧,遇到异常有多种原因。 这完全取决于您的代码。 通常情况下,它会自行指出某些线路,您可以确定问题出在哪里。 正如您提到的找不到元素-为此,您的页面可能无法正确加载,并且您的selenium命令试图找出页面上的元素,因此遇到异常。 超时-很多时候,您是selenium命令,等待执行操作,但是定位器无法找到该元素,并且在定义的时间之后,它显示为超时异常。
您能详细说明您在哪种情况下遇到哪种异常,这将有助于获得准确的答案。
我认为,当其中一项测试中发生异常时,我们应该以最佳方式记录该异常。 这意味着添加完整的堆栈跟踪,时间,当前URL,屏幕截图以及可能的测试视频。
在我的团队中,我们使用每个测试类或测试的属性来标记测试是否应该创建图片或在失败时保存视频。 当然,这些不是Web驱动程序中的内置功能。
您可以检查我的记录仪解决方案以了解我们的自动化及其与Jenkins的集成-http : //automatetheplanet.com/output-mstest-tests-logs-jenkins-console-log/
我们正在使用的另一种方法-标记失败的测试并重试。 如果它们再次失败-这意味着几乎肯定会发生新的错误。
记录您的异常,可以使用适当的记录器工具完成,
log4j2已变得像Java中的标准。 http://logging.apache.org/log4j/2.x/
如果您使用的是好的记录器,它将在log4j2中打印所需的详细信息以及异常详细信息,您可以使用以下命令将stacktrace打印到日志中
try{ ... } catch(Exception e){ logger.catching(e); }
要明确地通过测试还是不通过测试将取决于。
大多数情况下,如果在每个测试用例的末尾进行了特定的验证,将会非常小心。 但是如果不记录每个异常,将很难确定故障的根本原因。 您无法处理每个异常,并且某些异常可以忽略,因此建议不要在每个异常捕获上进行明确的失败测试。
Mohit ...这是对您的评论的回应... “让我们以Selenium中未发现异常的元素为例。在基于Page Object模式的框架中,我在测试文件中添加try catch语句,这称为Page Object中的方法(Page Object中的方法正在与Web元素交互,并且在交互时找不到此Web元素)。如何在我的Test文件中处理此问题?我想提及类的名称(在在Test方法中捕获异常后发生哪个异常(在这种情况下为Page Object)
通过从测试中调用方法,如果您试图在页面中查找和操作元素,请在页面中进行处理。
您可以在操作后使用断言来验证实际结果。
您可以在测试调用期间在页面中发生异常后记录该异常,它将捕获所有详细信息。
例如:LoginPage
public FlightFinderPage doLogin(String uname, String pwd){
try{
username.sendKeys(uname);
password.sendKeys(pwd);
login.submit();
}catch(Exception e){
TestUtil.takeScreenShot("LoginElement");
APP_LOGS.warn("Element not found",e);
}
return PageFactory.initElements(driver, FlightFinderPage.class);
}
登录测试
FlightFinderPage ffPage = lp.doLogin("test", "test");
Assert.assertEquals(ffPage.getTitleFFPage(),"Find a Flight: Mercury Tours:");
我同意有很多方法可以做到这一点。 这是我的个人看法...欢迎任何评论...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.