• 12. 自动化项目实战


    目录

    1. 登录测试

    2. 测试首页的帖子列表数不为0

    3. 帖子详情页校验

    4. 发布帖子

    5. 退出登录


    自动化项目实施的基本流程如下图所示:

    手工测试用例、自动化测试用例。

    1. 登录测试

    校验登录后主页显示的用户名称和登录时输入的用户名是否相等。

    1. public class ForumCases extends InitAndEnd{
    2. /**
    3. * 登录测试
    4. */
    5. @Test
    6. void login(){
    7. // 打开要进行登录的页面
    8. webDriver.get("http://150.158.82.121:58080/sign-in.html");
    9. // 输入用户名
    10. webDriver.findElement(By.cssSelector("#username")).sendKeys("明玉");
    11. // 输入密码
    12. webDriver.findElement(By.cssSelector("#password")).sendKeys("123");
    13. // 点击登录
    14. webDriver.findElement(By.cssSelector("#submit")).click();
    15. // 校验用户是否登录成功,即当前用户是否为登录的用户,如果是则测试通过,否则测试不通过
    16. String user_name = webDriver.findElement(By.cssSelector("#username")).getAttribute("value");
    17. // 断言相等
    18. Assertions.assertEquals("明玉",user_name);
    19. }
    20. }

    测试成功: 

    我们还可以通过参数化对于以上代码进行优化:

    1. public class ForumCases extends InitAndEnd{
    2. /**
    3. * 登录测试
    4. */
    5. @ParameterizedTest
    6. @CsvSource(value = "明玉,123")
    7. void login(String username,String password){
    8. // 打开要进行登录的页面
    9. webDriver.get("http://150.158.82.121:58080/sign-in.html");
    10. // 输入用户名
    11. webDriver.findElement(By.cssSelector("#username")).sendKeys(username);
    12. // 输入密码
    13. webDriver.findElement(By.cssSelector("#password")).sendKeys(password);
    14. // 点击登录
    15. webDriver.findElement(By.cssSelector("#submit")).click();
    16. // 校验用户是否登录成功,即当前用户是否为登录的用户,如果是则测试通过,否则测试不通过
    17. String user_name = webDriver.findElement(By.cssSelector("#username")).getAttribute("value");
    18. // 断言相等
    19. Assertions.assertEquals(username,user_name);
    20. }
    21. }

     测试成功:

    2. 测试首页的帖子列表数不为0

    1. @TestMethodOrder(MethodOrderer.OrderAnnotation.class)
    2. public class ForumCases extends InitAndEnd{
    3. /**
    4. * 登录测试
    5. * 账号正确,密码正确,登录成功
    6. */
    7. @Order(1)
    8. @ParameterizedTest
    9. @CsvSource(value = "明玉,123")
    10. void login(String username,String password){
    11. // 打开要进行登录的页面
    12. webDriver.get("http://150.158.82.121:58080/sign-in.html");
    13. // 输入用户名
    14. webDriver.findElement(By.cssSelector("#username")).sendKeys(username);
    15. // 输入密码
    16. webDriver.findElement(By.cssSelector("#password")).sendKeys(password);
    17. // 点击登录
    18. webDriver.findElement(By.cssSelector("#submit")).click();
    19. // 校验用户是否登录成功,即当前用户是否为登录的用户,如果是则测试通过,否则测试不通过
    20. String user_name = webDriver.findElement(By.cssSelector("#username")).getAttribute("value");
    21. // 断言相等
    22. Assertions.assertEquals(username,user_name);
    23. }
    24. /**
    25. * 帖子列表
    26. */
    27. @Order(2)
    28. @Test
    29. void articleList(){
    30. webDriver.get("http://150.158.82.121:58080/index.html");
    31. // 智能等待3秒
    32. webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
    33. // 统计首页的帖子数目
    34. int article_num = webDriver.findElements(By.cssSelector("#nav_board_index > a")).size();
    35. // 断言帖子数目不为0
    36. Assertions.assertNotEquals(0,article_num);
    37. }
    38. }

    测试成功:

    3. 帖子详情页校验

    首先,我们点击帖子标题查看详情时,帖子的详情页中帖子标题不能为空

    1. @TestMethodOrder(MethodOrderer.OrderAnnotation.class)
    2. public class ForumCases extends InitAndEnd{
    3. /**
    4. * 登录测试
    5. * 账号正确,密码正确,登录成功
    6. */
    7. @Order(1)
    8. @ParameterizedTest
    9. @CsvSource(value = "明玉,123")
    10. void login(String username,String password){
    11. // 打开要进行登录的页面
    12. webDriver.get("http://150.158.82.121:58080/sign-in.html");
    13. // 输入用户名
    14. webDriver.findElement(By.cssSelector("#username")).sendKeys(username);
    15. // 输入密码
    16. webDriver.findElement(By.cssSelector("#password")).sendKeys(password);
    17. // 点击登录
    18. webDriver.findElement(By.cssSelector("#submit")).click();
    19. // 校验用户是否登录成功,即当前用户是否为登录的用户,如果是则测试通过,否则测试不通过
    20. String user_name = webDriver.findElement(By.cssSelector("#username")).getAttribute("value");
    21. // 断言相等
    22. Assertions.assertEquals(username,user_name);
    23. }
    24. /**
    25. * 帖子列表
    26. */
    27. @Order(2)
    28. @Test
    29. void articleList(){
    30. webDriver.get("http://150.158.82.121:58080/index.html");
    31. // 智能等待3秒
    32. webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
    33. // 统计首页的帖子数目
    34. int article_num = webDriver.findElements(By.cssSelector("#nav_board_index > a")).size();
    35. // 断言帖子数目不为0
    36. Assertions.assertNotEquals(0,article_num);
    37. }
    38. /**
    39. * 帖子详情页检验
    40. * 校验帖子的标题不为空
    41. */
    42. @Order(3)
    43. @Test
    44. void articleDetail(){
    45. // 打开列表页
    46. webDriver.get("http://150.158.82.121:58080/index.html");
    47. // 找到需要查看的帖子标题并点击
    48. webDriver.findElement(By.cssSelector("#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong")).click();
    49. // 获取博客的标题
    50. String article_title = webDriver.findElement(By.cssSelector("#details_article_content_title")).getText();
    51. // 断言标题不为空
    52. Assertions.assertNotNull(article_title);
    53. }
    54. }

    测试成功:

    其次,我们点击帖子标题查看详情时,帖子的详情页中帖子内容不能为空

    1. @TestMethodOrder(MethodOrderer.OrderAnnotation.class)
    2. public class ForumCases extends InitAndEnd{
    3. /**
    4. * 登录测试
    5. * 账号正确,密码正确,登录成功
    6. */
    7. @Order(1)
    8. @ParameterizedTest
    9. @CsvSource(value = "明玉,123")
    10. void login(String username,String password){
    11. // 打开要进行登录的页面
    12. webDriver.get("http://150.158.82.121:58080/sign-in.html");
    13. // 输入用户名
    14. webDriver.findElement(By.cssSelector("#username")).sendKeys(username);
    15. // 输入密码
    16. webDriver.findElement(By.cssSelector("#password")).sendKeys(password);
    17. // 点击登录
    18. webDriver.findElement(By.cssSelector("#submit")).click();
    19. // 校验用户是否登录成功,即当前用户是否为登录的用户,如果是则测试通过,否则测试不通过
    20. String user_name = webDriver.findElement(By.cssSelector("#username")).getAttribute("value");
    21. // 断言相等
    22. Assertions.assertEquals(username,user_name);
    23. }
    24. /**
    25. * 帖子列表
    26. */
    27. @Order(2)
    28. @Test
    29. void articleList(){
    30. webDriver.get("http://150.158.82.121:58080/index.html");
    31. // 智能等待3秒
    32. webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
    33. // 统计首页的帖子数目
    34. int article_num = webDriver.findElements(By.cssSelector("#nav_board_index > a")).size();
    35. // 断言帖子数目不为0
    36. Assertions.assertNotEquals(0,article_num);
    37. }
    38. /**
    39. * 帖子详情页检验
    40. * 校验帖子的标题不为空
    41. * 校验帖子的内容不为空
    42. */
    43. @Order(3)
    44. @Test
    45. void articleDetail(){
    46. // 打开列表页
    47. webDriver.get("http://150.158.82.121:58080/index.html");
    48. // 找到需要查看的帖子标题并点击
    49. webDriver.findElement(By.cssSelector("#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong")).click();
    50. // 获取帖子的标题
    51. String article_title = webDriver.findElement(By.cssSelector("#details_article_content_title")).getText();
    52. // 断言帖子的标题不为空
    53. Assertions.assertNotNull(article_title);
    54. // 获取帖子的内容
    55. String article_content = webDriver.findElement(By.cssSelector("#details_article_content > p")).getText();
    56. // 断言帖子的内容不为空
    57. Assertions.assertNotNull(article_content);
    58. }
    59. }

    测试成功:

    4. 发布帖子

    我们可以直接在控制台上进行输入:

    我们可以直接复制以上的 JS 脚本:document.querySelector("#article_post_title").value="测试"

    5. 退出登录

    1. package forumTest;
    2. import net.bytebuddy.build.ToStringPlugin;
    3. import org.junit.jupiter.api.*;
    4. import org.junit.jupiter.params.ParameterizedTest;
    5. import org.junit.jupiter.params.provider.CsvSource;
    6. import org.junit.jupiter.params.provider.ValueSource;
    7. import org.openqa.selenium.By;
    8. import org.openqa.selenium.JavascriptExecutor;
    9. import org.openqa.selenium.WebDriver;
    10. import org.openqa.selenium.WebElement;
    11. import java.util.concurrent.TimeUnit;
    12. import static java.lang.Thread.sleep;
    13. @TestMethodOrder(MethodOrderer.OrderAnnotation.class)
    14. public class ForumCases extends InitAndEnd{
    15. /**
    16. * 登录测试
    17. * 账号正确,密码正确,登录成功
    18. */
    19. @Order(1)
    20. @ParameterizedTest
    21. @CsvSource(value = "明玉,123")
    22. void login(String username,String password){
    23. // 打开要进行登录的页面
    24. webDriver.get("http://150.158.82.121:58080/sign-in.html");
    25. // 输入用户名
    26. webDriver.findElement(By.cssSelector("#username")).sendKeys(username);
    27. // 输入密码
    28. webDriver.findElement(By.cssSelector("#password")).sendKeys(password);
    29. // 智能等待5秒
    30. webDriver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
    31. // 点击登录
    32. webDriver.findElement(By.cssSelector("#submit")).click();
    33. // 校验用户是否登录成功,即当前用户是否为登录的用户,如果是则测试通过,否则测试不通过
    34. String user_name = webDriver.findElement(By.cssSelector("#username")).getAttribute("value");
    35. // 断言相等
    36. Assertions.assertEquals(username,user_name);
    37. }
    38. /**
    39. * 帖子列表
    40. */
    41. @Order(2)
    42. @Test
    43. void articleList(){
    44. webDriver.get("http://150.158.82.121:58080/index.html");
    45. // 智能等待3秒
    46. webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
    47. // 统计首页的帖子数目
    48. int article_num = webDriver.findElements(By.cssSelector("#nav_board_index > a")).size();
    49. // 断言帖子数目不为0
    50. Assertions.assertNotEquals(0,article_num);
    51. }
    52. /**
    53. * 帖子详情页检验
    54. * 校验帖子的标题不为空
    55. * 校验帖子的内容不为空
    56. */
    57. // @Order(3)
    58. // @Test
    59. // void articleDetail(){
    60. // // 打开列表页
    61. // webDriver.get("http://150.158.82.121:58080/index.html");
    62. // // 找到需要查看的帖子标题并点击
    63. // webDriver.findElement(By.cssSelector("#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong")).click();
    64. // // 获取帖子的标题
    65. // String article_title = webDriver.findElement(By.cssSelector("#details_article_content_title")).getText();
    66. // // 断言帖子的标题不为空
    67. // Assertions.assertNotNull(article_title);
    68. // // 获取帖子的内容
    69. // String article_content = webDriver.findElement(By.cssSelector("#details_article_content > p")).getText();
    70. // // 断言帖子的内容不为空
    71. // Assertions.assertNotNull(article_content);
    72. // }
    73. /**
    74. * 发布帖子
    75. */
    76. // @Order(4)
    77. // @Test
    78. // void publish_article() throws InterruptedException {
    79. // // 找到发布帖子的按钮
    80. // webDriver.findElement(By.cssSelector("#bit-forum-content > div.page-header.d-print-none > div > div > div.col-auto.ms-auto.d-print-none > div > a.btn.btn-primary.d-none.d-sm-inline-block.article_post")).click();
    81. // sleep(2000);
    82. // // 执行 js(选中标题输入框,输入标题)
    83. // ((JavascriptExecutor)webDriver).executeScript("document.querySelector(\"#article_post_title\").value=\"测试\"");
    84. // // 智能等待5秒
    85. // webDriver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
    86. // // 执行 js(选中内容输入框,输入内容)
    87. // ((JavascriptExecutor)webDriver).executeScript("document.querySelector(\"#edit-article > div.CodeMirror.cm-s-default.CodeMirror-wrap > div.CodeMirror-scroll > div.CodeMirror-sizer > div > div > div > div.CodeMirror-code > div > pre > span > span\").innerText=\"自动化测试\"");
    88. // sleep(5000);
    89. // // 点击发布按钮
    90. webDriver.findElement(By.cssSelector("#article_post_submit")).click();
    91. //
    92. // WebElement element = webDriver.findElement(By.cssSelector("#article_post_submit"));
    93. // ((JavascriptExecutor) webDriver).executeScript("arguments[0].click();", element);
    94. // // 校验页面跳转到首页
    95. // String currentUrl = webDriver.getCurrentUrl();
    96. // Assertions.assertEquals("http://150.158.82.121:58080/index.html",currentUrl);
    97. // // 校验第一条帖子的标题是不是我们刚才发布的标题
    98. // String firstTitle = webDriver.findElement(By.cssSelector("#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong")).getText();
    99. // Assertions.assertEquals("测试",firstTitle);
    100. // }
    101. /**
    102. * 退出登录校验
    103. */
    104. @Order(5)
    105. @Test
    106. void logOut() throws InterruptedException {
    107. webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
    108. // 找到退出按钮并点击
    109. webDriver.findElement(By.cssSelector("#index_nav_avatar")).click();
    110. sleep(3000);
    111. webDriver.findElement(By.cssSelector("#index_user_logout")).click();
    112. sleep(3000);
    113. webDriver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS);
    114. // 校验是否退回登录页
    115. String currentUrl = webDriver.getCurrentUrl();
    116. webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
    117. Assertions.assertEquals("http://150.158.82.121:58080/sign-in.html",currentUrl);
    118. }
    119. }

    测试成功:

    先进行基础功能的自动化测试~

    其他详细的测试将不断在本篇文章中进行迭代。 

  • 相关阅读:
    本科生学深度学习-Attention机制
    LaunchView/启动页 的实现
    Workfine新手入门:筛选条件—文本判断
    Java高级工程师常见面试题(答案)
    mmo中匹配机制的思考与实现
    沃尔玛、美客多跨境平台自养号全攻略:防关联环境系统搭建与养号技巧
    Pytorch环境搭建(Windows)
    如何做好水库大坝实时安全监测
    Could not read from boot medium. System halted.
    (四)JPA - JQPL 实现增删改查
  • 原文地址:https://blog.csdn.net/qq_58969626/article/details/132642371