9R WebDriver – 断言和验证

原文: https://javabeginnerstutorial.com/selenium/9r-webdriver-assert-and-verify/

嗨呀超级巨星! 我们已经定位元素很多天了。 让我们今天换一下话题,谈谈“确认和验证”。

要记住

当“条件/检查”的断言或验证失败时,两者之间的主要区别是:

  • 断言将使测试失败,并且中止当前测试用例的执行。 跳过该特定代码行之后的所有其他测试步骤
  • 验证将记录故障,但继续执行测试用例。

何时使用断言和验证?

最简单的答案是 – 由您决定,换句话说,就是您的愿望! 您可以根据情况使用断言或验证,即是希望测试中止还是在检查失败后继续进行。

使用断言的好处

大多数情况下,我们希望在检查失败时停止测试执行,而这正是我们通过断言得到的结果。 测试用例失败,并且清楚地突出显示为“失败”。 这将立即向我们显示哪些测试用例没有通过完整测试套件中的检查。 然后,我们可以直接转到那些失败的案例,并检查检查/条件未通过的原因。 那不是很方便吗? 由于此立即反馈的可用性,因此断言更为常用。

使用断言的缺点

当第一个断言条件失败时,将不再执行以下代码行。 可能还要执行其他检查,我们永远不会知道他们的结果。

使用验证的优势

即使条件之一失败,我们希望继续执行测试时,通常使用此方法。 故障将被记录或打印到控制台。 因此,无论测试是通过还是失败,我们都会获得测试用例中所有检查的结果。

使用验证的缺点

验证不提供立即反馈,因为条件失败后不会终止测试用例的执行。 因此,每次执行测试时,我们都必须花费大量时间在控制台中查看日志或打印的语句,以确定哪些检查失败。 例如,如果要针对不同的数据集多次执行数百个测试用例,则可能不可行。

示例场景

让我们获得为本教程系列创建的示例网页的标题。 这将是我们使用WebDrivergetTitle()方法获得的实际标题预期标题是“WebDriver 演示网站”。

情况 1:通过assertEquals通过测试用例

实际标题与预期标题相同,因此条件Assert.assertEquals("WebDriver Demo Website", pageTitle);的输出将是成功。 将执行此行之后的代码,并且将它传递给测试用例。

情况 2:使用assertNotEquals使测试用例失败

实际标题与预期标题相同,因此条件Assert.assertNotEquals("WebDriver Demo Website", pageTitle);的输出将是故障。 此行之后的代码将不执行。 测试执行被中止,并且测试用例将失败。

代码段

  1. // Making the test fail
  2. Assert.assertNotEquals("WebDriver Demo Website", pageTitle);
  3. // Following lines will not be executed as above assert condition fails
  4. System.out.println("Assert not equals failed");

Assert condition failed

上图中的控制台显示assertEquals条件成功,因此将打印检查后的语句,“断言等于通过”,而assertNotEquals条件失败,因此将不执行此检查之后的行。 打印语句“断言不等于失败”不会打印到控制台。

情况 3:尽管assertNotEquals条件失败,但通过测试用例

要仅验证实际值和预期值是否不相等,请使用try-catch块。

代码块

  1. //Verify title not equal using try-catch block
  2. try {
  3. // Making the test fail
  4. Assert.assertNotEquals("WebDriver Demo Website", pageTitle);
  5. } catch(Error e){
  6. // Following lines will be printed when the assert condition fails
  7. System.out.println("Assert not equals failed. But test execution is not aborted.");
  8. System.out.println("Error message: " + e.toString());
  9. }

即使assertNotEquals条件失败,catch块中的语句也将被执行,并且错误消息将被打印到控制台。

Verify condition fails

如图所示,测试用例执行成功,并且错误被打印到控制台。

完整的代码

  1. import java.util.concurrent.TimeUnit;
  2. import org.junit.After;
  3. import org.junit.Assert;
  4. import org.junit.Before;
  5. import org.junit.Test;
  6. import org.openqa.selenium.WebDriver;
  7. import org.openqa.selenium.firefox.FirefoxDriver;
  8. public class AssertAndVerify {
  9. // Declaring variables
  10. private WebDriver driver;
  11. private String baseUrl;
  12. @Before
  13. public void setUp() throws Exception {
  14. // Selenium version 3 beta releases require system property set up
  15. System.setProperty("webdriver.gecko.driver", "E:\\Softwares\\"
  16. + "Selenium\\geckodriver-v0.10.0-win64\\geckodriver.exe");
  17. // Create a new instance for the class FirefoxDriver
  18. // that implements WebDriver interface
  19. driver = new FirefoxDriver();
  20. // Implicit wait for 5 seconds
  21. driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
  22. // Assign the URL to be invoked to a String variable
  23. baseUrl = "https://chandanachaitanya.github.io/selenium-practice-site/";
  24. }
  25. @Test
  26. public void testPageTitle() throws Exception {
  27. // Open baseUrl in Firefox browser window
  28. driver.get(baseUrl);
  29. // Get the page title
  30. String pageTitle = driver.getTitle();
  31. // Print the title to console
  32. System.out.println("The actual title is: " + pageTitle);
  33. // Check if actual and expected values are equal
  34. Assert.assertEquals("WebDriver Demo Website", pageTitle);
  35. // Printing success message
  36. System.out.println("Assert equals passed.");
  37. // Making the test fail
  38. //Assert.assertNotEquals("WebDriver Demo Website", pageTitle);
  39. // Following lines will not be executed as above assert condition fails
  40. //System.out.println("Assert not equals failed");
  41. //Verify title not equal using try-catch block
  42. try {
  43. // Making the test fail
  44. Assert.assertNotEquals("WebDriver Demo Website", pageTitle);
  45. } catch(Error e){
  46. // Following lines will be printed when the assert condition fails
  47. System.out.println("Assert not equals failed. But test execution is not aborted.");
  48. System.out.println("Error message: " + e.toString());
  49. }
  50. } // End of @Test
  51. @After
  52. public void tearDown() throws Exception {
  53. // Close the Firefox browser
  54. driver.close();
  55. }
  56. }

所有代码文件都放置在 GitHub 仓库中,以方便访问。 您可以为仓库加注星标和分支以方便使用。 请仔细阅读“README.md”文件以获取明确说明。

总结了断言和验证的这一部分。 祝你有美好的一天!