Webdriver测试脚本在断言失败后不会停止

时间:2013-10-17 06:21:04

标签: exception testing selenium webdriver assert

在我的webdriver脚本中,我有三种方法

setup, test and tearDown

遵循junit惯例。

test方法中,我几乎没有这样的断言

@Test
public void testStudentHome() throws Exception {
    String classCode = "I6OWW";
    Utilities.studentSignin(driver, baseUrl);
    assertEquals(true, sth.openNotification());
    assertEquals("My Scores", sth.myScores(true));
}

sth是我正在执行测试的PageObject,我在setup方法中创建。

我从这样的main方法调用所有这三种方法:

public static void main(String[] args) {
        StudentHomeTest sht = new StudentHomeTest();
        try {
            sht.setup();
            sht.testStudentHome();
            sht.tearDown();
        } catch (Exception ex) {
            Logger.getLogger(StudentHomeTest.class.getName()).log(Level.SEVERE, null, ex);
            sht.tearDown();
        }
    }

现在在运行测试时,如果某些断言失败,测试方法应该(这是我期望的)抛出异常,main方法应该调用tearDown方法。但这不会发生。浏览器窗口继续留在那里。 我正在使用netbeans ide来运行测试。

2 个答案:

答案 0 :(得分:2)

  

遵循junit惯例

如果您遵循jUnit约定,那么您将知道拆解方法属于@After方法,因为此方法将在测试后始终运行。

使用@After jUnit注释创建一个新方法。

@After
public void tearDown() {
  sht.tearDown();
}

修改

你知道吗,我相信你在jUnit中遇到了assertEquals的经典问题。

this answer ......

被盗

JUnit调用.equals()方法来确定方法assertEquals(Object o1,Object o2)中的相等性。

因此,使用assertEquals(string1,string2)绝对安全。 (因为字符串是对象)

-
而不是在这些调用上使用assertEquals,而是使用assertTrue()

assertTrue(sth.openNotification());
assertTrue("My Scores".equals(sth.myScores(true)));

答案 1 :(得分:1)

AssertionError未展开Exception - 它是Throwable

但无论如何,你应该

    try {
        sht.setup();
        sht.testStudentHome();
    } finally {
        sht.tearDown();
    }

不需要捕获块。 main可以throw Exception