在Selenium WebDriver中发生异常时该怎么办?

时间:2015-05-02 10:03:06

标签: java selenium selenium-webdriver webdriver

我知道这个问题现在必须多次被问到,但我找不到我要找的东西。也许任何人都可以帮助我。

当selenium测试由于任何原因遇到异常时,超时,元素未找到,元素不可见等等,那么我们应该如何处理它。我知道我们不应该明确失败。我们应该跳过那个测试,还是应该以其他方式处理它?<​​/ p>

3 个答案:

答案 0 :(得分:-1)

在我看来,当我们的某个测试中发生异常时,我们应该以最佳方式记录它。这意味着,添加完整的堆栈跟踪,时间,当前URL,屏幕截图以及可能的测试视频。

在我的团队中,我们使用每个测试类或测试的属性来标记测试是否应创建图片或在失败时保存视频。当然,这些并不是Web Driver中的内置功能。<​​/ p>

您可以查看我的记录器解决方案,了解我们的自动化及其与Jenkins- http://automatetheplanet.com/output-mstest-tests-logs-jenkins-console-log/

的集成

我们正在使用的另一种方法 - 标记失败的测试并重试它们。如果他们再次失败 - 这意味着几乎肯定会发生新的错误。

答案 1 :(得分:-1)

  1. 记录您的异常,可以使用适当的记录器工具完成,

    log4j2已成为Java中的标准。 http://logging.apache.org/log4j/2.x/

    如果您使用的是良好的记录器,它将打印所需的详细信息以及异常详细信息 在log4j2中,您可以使用

    将堆栈跟踪打印到日志
     try{
       ...
     }
     catch(Exception e){
        logger.catching(e);
     }
    
  2. 明确否决您的测试将取决于 如果您在每个测试用例的最后都有特定的验证,那么大多数情况下都要小心。 但是,如果不记录每个异常,就很难确定失败的根本原因。 您无法处理每个异常,并且可以忽略某些异常,因此不建议在每个异常捕获上显式失败测试。

答案 2 :(得分:-2)

Mohit ......这是对你评论的反应...... “让我们在Selenium中找到元素未找到异常的例子。在我的基于Page Object模式的框架中,我在我的文章中添加了try catch语句从Page Object调用方法的测试文件(Page Object中的方法与Web元素交互,在交互时找不到此Web元素。)如何在我的Test文件中处理这个?我想提一下在测试方法“

中捕获异常后,该类的名称(在这种情况下发生异常,在本例中为Page Object)

通过从测试中调用方法,如果您正在尝试查找&amp;操纵页面中的元素,在页面中处理它。

您可以使用断言来验证操作后的实际结果。

您可以在测试调用期间在页面中发生异常时记录异常,它将捕获所有详细信息。

例如: 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);    
}

LoginTest

FlightFinderPage ffPage = lp.doLogin("test", "test");
Assert.assertEquals(ffPage.getTitleFFPage(),"Find a Flight: Mercury Tours:");

我同意有很多方法可以做到这一点。这是我的个人意见......任何评论都欢迎......