2016-12-27 27 views
0

我有一个测试方法里面我想验证一些事情,只有在我软测试方法断言后失败的测试类。SoftAssert在硒测试类

但是,我觉得我的测试方法越来越混乱与故障处理。我还没有找到任何有关这方面的最佳做法。有任何想法吗?如果我将断言移动到页面对象类中,它也会有点混乱。

@Test 
public void test() { 

    // steps here 

    // then asserts here 
    SoftAssert soft = new SoftAssert(); 
    String expectedHeaderText = "foo"; 

    soft.assertTrue(pageObjectClass.isHeaderPresent(), "Unable to find the Header page object."); 


    soft.assertTrue(pageObjectClass.getHeader().contains(expectedHeaderText), 
      String.format("Expected to find '%s'. Page actually shows '%s'", expectedHeaderText, pageObjectClass.getHeader())); 

    // more asserts 

    sa.assertAll(); 

} 
+0

检查标题的存在似乎相当多余,然后检查标题中的文本。如果你退出第一个断言,并且只检查标题文本,你仍然断言同样的事情:头文件存在,文本是你所期望的。 保持断言在测试类,从来没有在页面对象类,因为这是没有道理的。页面对象类应该只有选择器和getter/setter以及其他页面相关的逻辑,不应该在那里做断言。 – jaredgilmore

回答

0

检查以下约定

@Test 
public void test() { 
// steps here 

// then asserts here 
SoftAssert soft = new SoftAssert(); 
String expectedHeaderText = "foo"; 

Boolean checkHeader=pageObjectClass.isHeaderPresent() //Change the method on POM pageObjectClass such that it returns the true or false 
soft.assertTrue(checkHeader,true); 

String checkHeaderContent=pageObjectClass.getHeader()//change method on POM pageObjectClass to return a string 
soft.assertTrue(checkHeaderContent.contains(expectedHeaderText), String.format("Expected to find '%s'. Page actually shows '%s'", expectedHeaderText, checkHeaderContent)); 
// more asserts 
sa.assertAll(); 

}

+0

感谢您的快速回复,所以如果我在测试方法中有5个以上的内容,是否会显得过于重复?即检查标题,然后标题文本,然后移动到检查另一个项目及其文本,重复几次。我在想,如果在'isHeaderPresent'里面我们返回一个真/假和一个错误信息? – user2195411

+0

我可以想出很多方法来实现你的场景。我建议你将“expectedHeaderText”传递给POM方法,该方法将根据调查结果检查存在,标题内容并返回true/false! – prithvi394

+0

如果我检查POM方法中的当前和内容并返回true/false,那么由于方法返回true/false,我将失败失败消息。除非我保留测试方法中的所有失败消息内容 – user2195411

0

您可以检查QMetry Automation Framework其中规定assertion and verification方法。例如:

//verify element present 
firstName.verifyPresent(); 
firstName.assertPresent(); 

//verify Text of Element 
firstName.verifyText("First User"); 
firstName.assertText("First User"); 

//verify Text of element with StringMatchers conditions 
firstName.verifyText(StringMatcher.contains("First User")); 
firstName.assertText(StringMatcher.contains("First User"),"Username Validation"); 

如果断言方法,您的测试不会继续断言失败。

如果使用任何验证方法,即使验证失败,您的测试也会继续,如果一个或多个验证失败,则测试的最终状态将失败。