AssertJ 断言在 Selenium 上没有按预期工作

问题描述

我目前正在使用 Cucumber 和 Java 开发基于 Selenium 的 BDD 测试自动化框架。我的框架正在使用 Junit,由于 Junit 不支持软断言,我正在尝试使用 AssertJ 断言进行我的测试。但是,这些断言似乎不起作用。让我尝试在以下代码的帮助下解释这一点

//表单提交的检查方法

public void ValidateForm(String name,String company,String email,String city,String state,String country,String question)
        throws InterruptedException {

    ContactName.sendKeys(name);
    Company.sendKeys(company);
    Email.sendKeys(email);
    City.sendKeys(city);

    browserAction.selectFromDD(State,state);

    browserAction.selectFromDD(Country,country);

    Questions.sendKeys(question);

    SubmitButton.click();

    Thread.sleep(4000);
}


// Method to check form landing page

public void CheckFormSubmission() {

    assertthat(driver.getTitle().contains("Thank you"));
    
    
}

}

如您所见,ValidateForm() 方法提交表单中的值,CheckFormSubmission() 方法在提交表单后检查登录页面标题。现在,我在登陆页面标题上应用断言,如果它包含“谢谢”,测试应该通过,如果它包含任何其他文本,测试应该失败并且应该抛出一个异常,最终应该标记我的测试在范围报告中失败。

然而,随着我的测试继续进行,这个断言似乎永远不起作用,即使我没有得到匹配的登录页面标题,测试也会被标记为通过,并且不会抛出任何异常。你能帮我理解我在这里可能做错了什么吗?

解决方法

我认为不是这个:

assertThat(driver.getTitle().contains("Thank you"));

你应该使用这个:

 String expectedMsg = "Thank you";
 assertThat(expectedMsg).contains(driver.getTitle());
,

你把括号设置错了。你的代码必须看起来像

assertThat(driver.getTitle()).contains("Thank you");

一般来说,AssertJ 断言遵循模式

assertThat(value).someAssertion();

这样你就可以自动完成,这是 AssertJ 的一大优点。