Java Selenium测试类中的SoftAssert

Java Selenium测试类中的SoftAssert,java,selenium,testng,Java,Selenium,Testng,我在一个测试类中有一个测试方法,在这个测试类中,我想验证一些东西,但是在这个特定的测试方法中,我软断言后失败了 但是,我觉得我的测试方法在故障处理方面越来越混乱。我还没有找到任何关于这方面的最佳实践。有什么想法吗?如果我将断言移动到page对象类中,那里也会有点混乱 @Test public void test() { // steps here // then asserts here SoftAssert soft = new SoftAssert();

我在一个测试类中有一个测试方法,在这个测试类中,我想验证一些东西,但是在这个特定的测试方法中,我软断言后失败了

但是,我觉得我的测试方法在故障处理方面越来越混乱。我还没有找到任何关于这方面的最佳实践。有什么想法吗?如果我将断言移动到page对象类中,那里也会有点混乱

@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();

}
按惯例检查

@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();
}

您可以检查提供的方法。例如:

//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");
对于assert方法,如果assert失败,测试将不会继续


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

感谢您的快速回复,因此如果我在测试方法中有5个以上的验证方法,它是否会看起来太重复?即,检查标题,然后检查标题文本,然后移动到检查另一项及其文本,重复几次。我在想,如果在“isHeaderPresent”中我们返回一个真/假和一个错误消息,我可以想出许多方法来实现您的场景。我建议您将“expectedHeaderText”传递给POM方法,该方法将检查存在性、标题内容,并根据结果返回true/false!如果我检查POM方法中的present和content并返回true/false,那么我将丢失失败消息,因为该方法返回true/false。除非我在测试方法中保留所有失败消息内容,否则最好在测试类中保留它!检查页眉是否存在,然后检查页眉中的文本似乎是多余的。如果您放弃第一个断言,只检查标题文本,您仍然断言相同的事情:标题存在,文本是您所期望的。将断言保存在测试类中,而不要保存在页面对象类中,因为这样做没有意义。页面对象类应该只有选择器和getter/setter以及其他与页面相关的逻辑,不应该在那里进行断言。