Java Selenium WebDriver代码实现Verify而不是Assert

时间:2014-04-25 13:15:45

标签: selenium selenium-webdriver assertions verify

我无法理解如何编写Java代码来实现Verify。我总是看到实现Assert的代码,但不是Verify。我知道Assert,我们需要编写如下代码:

Assert.assertTrue()

Assert.assertEquals() etc.

但是Verify呢?我希望在用户使用verify登录应用程序后验证我的应用程序的标题。我怎么能这样做?

3 个答案:

答案 0 :(得分:1)

您必须使用仅支持Assert语句的TestNG框架。它不支持Verify语句。您可以访问TestNG Javadoc的以下URL:

http://testng.org/javadocs/

来自http://seleniumonlinetrainingexpert.wordpress.com/2012/11/20/what-is-the-difference-between-assert-and-verify-in-selenium/

当Assertion失败后,将跳过该行代码后的所有测试步骤 当“验证”失败时,测试将继续执行并记录失败。

如果您想使用Verify语句,则必须使用Junit框架。

答案 1 :(得分:1)

TestNG不支持验证语句,但可以轻松实现。最简单的方法是在您的测试方法中使用Java StringBuffer,如下所示,

@Test
public void verifyTest(){  

    /* buffer to hold your errors */
    StringBuffer errorBuffer = new StringBuffer();      

    /* verification 1 */
    try{        
        Assert.assertEquals("value1", "value!");            
    }catch(AssertionError e){           
        errorBuffer.append(e.getMessage() + "\n");      
    }       

    /* verification 2 */
    try{            
        Assert.assertEquals("value2", "value!");            
    }catch(AssertionError e){           
        errorBuffer.append(e.getMessage());     
    }

    if(errorBuffer.length() > 0){
        throw new AssertionError(errorBuffer.toString()); 
    }

}

对于更高级的实现,您可以使用TestNG的IInvokedMethodListener接口,您需要从该接口实现两个方法,

public class TestMethodListener implements IInvokedMethodListener{

    @Override
    public void beforeInvocation(IInvokedMethod method, ITestResult testResult) {

        if(method.isTestMethod()){              
            /* create new error buffer object */                
        }

    }

    @Override
    public void afterInvocation(IInvokedMethod method, ITestResult testResult) {

        if(method.isTestMethod()){              
            /* process your test result for verification errors stored in error buffer
             * and modify your testResult object accordingly
             */                 
        }

    }

}

大多数情况下,我们不需要进行高级实施。简单的StringBuffer应该可以工作。但是,如果您想在测试中经常使用验证语句,那么实现IInvokedMethodListener是合理的。如果您对高级实施感兴趣,请查看此博客https://muthutechno.wordpress.com/2015/01/26/implementing-verify-statements-for-testng-framework/

答案 2 :(得分:0)

即使TestNG不直接支持验证,您也可以创建软断言,其作用类似于验证。请查看以下链接:http://seleniumexamples.com/blog/guide/using-soft-assertions-in-testng/