题目:selenium+python自动化测试–登录
一、用例分析:
用例1:不输入,点击登录 期望:手机号码不能为空,请重新输入 用例2:只输入手机号,不输入密码,点击登录 期望:密码不能为空,请重新输入(提示信息) 用例3:只输入密码,不输入手机号,点击登录 期望:手机号码不能为空,请重新输入(提示信息) 用例4:输入错误的账号和密码,点击登录 期望:手机号或密码错误(提示信息) 用例5:正确输入手机号和密码,点击登录 期望:登录成功,跳转至有登录成功字样的页面 用例6:输入错误格式的手机号 期望:手机号码格式不正确,请重新输入(提示信息)
二、代码编写:
登录测试文件:login.py
1.import unittest 2.from selenium import webdriver 3.import time 4.from selenium.webdriver.chrome.service import Service 5.from selenium.webdriver.support.ui import WebDriverWait 6.from selenium import webdriver 7. 8.class Base(): 9. 10. def __init__(self,driver): 11. self.driver=driver 12. 13. def find(self,locator): 14. '''''locator = ("id","kw"),查找某元素''' 15. element = WebDriverWait(self.driver, 20, 1).until(lambda x: x.find_element(*locator)) 16. return element 17. 18. def send(self,locator,text): 19. '''''输入框传值''' 20. self.find(locator).send_keys(text) 21. 22. def click(self,locator): 23. '''''点击事件''' 24. self.find(locator).click() 25. 26. def is_element_exist(self,locator): 27. '''''判断元素是否存在''' 28. els = self.find(locator) 29. if els is not None: 30. print(els.text) 31. return True 32. else: 33. return False 34. 35.class TestKlogin(unittest.TestCase): 36. #定位手机号 37. username = ("name", "u") 38. #定位密码 39. psw = ("name", "p") 40. #定位登录按钮 41. loginbutton = ("id", "loginButton") 42. #定位登录成功信息 43. succ = ("id", "success") 44. #定位提示信息 45. message_u = ("id", "error_u") 46. message_p = ("id", "error_p") 47. 48. @classmethod 49. def setUpClass(cls): 50. path = r'D:\软件测试\chromedriver_win32\chromedriver.exe ' # 指定驱动存放目录 51. ser = Service(path) 52. chrome_options = webdriver.ChromeOptions() 53. cls.driver = webdriver.Chrome(service=ser, options=chrome_options) 54. cls.baselei = Base(cls.driver) 55. 56. def setUp(self): 57. self.driver.get('http://hanpengfei.com.cn:8080/Login_war_exploded/') 58. 59. def tearDown(self): 60. # 清空cookies 61. self.driver.delete_all_cookies() 62. 63. @classmethod 64. def tearDownClass(cls): 65. cls.driver.quit() 66. 67. def test_01_bushuru(self): 68. '''''不输入,点击登录''' 69. self.baselei.click(self.loginbutton) 70. result1 = self.baselei.find(self.message_u).text 71. print("我是内容test01: ", result1) 72. exp1 = "手机号码不能为空,请重新输入" 73. self.assertEqual(result1, exp1) 74. 75. def test_02_shuruname(self): 76. '''''只输入手机号,不输入密码''' 77. self.baselei.send(self.username, "17352161806") 78. self.baselei.click(self.loginbutton) 79. result2 = self.baselei.find(self.message_p).text 80. print("我是内容test02: ", result2) 81. exp2 = "密码不能为空,请重新输入" 82. self.assertTrue(result2 == exp2) 83. 84. def test_03_shurupsw(self): 85. '''''只输入密码,不输入手机号''' 86. self.baselei.send(self.psw, "123465") 87. self.baselei.click(self.loginbutton) 88. result3 = self.baselei.find(self.message_u).text 89. print("我是内容test03: ", result3) 90. exp3 = "手机号码不能为空,请重新输入" 91. self.assertTrue(result3 == exp3) 92. 93. def test_04_shurufail(self): 94. '''''输入错误的账号和密码''' 95. self.baselei.send(self.username, "17352161806") 96. self.baselei.send(self.psw, "68619") 97. self.baselei.click(self.loginbutton) 98. # time.sleep(50) 99. result4 = self.baselei.find(self.message_p).text 100. print("我是内容test04: ", result4) 101. exp4 = "手机号或密码错误" 102. self.assertEqual(result4, exp4) 103. 104. def test_05_loginsuccess(self): 105. '''''正确输入手机号和密码''' 106. self.baselei.send(self.username,"17352161806") 107. self.baselei.send(self.psw,"1234") 108. self.baselei.click(self.loginbutton) 109. print("我是内容test05: ", end=' ') 110. result5 = self.baselei.is_element_exist(self.succ) 111. self.assertTrue(result5) 112. 113. def test_06_loginsuccess(self): 114. '''''输入错误格式的手机号''' 115. self.baselei.send(self.username,"1735216") 116. self.baselei.send(self.psw,"1234") 117. self.baselei.click(self.loginbutton) 118. result6 = self.baselei.find(self.message_u).text 119. print("我是内容test06: ", result6) 120. exp6 = "手机号码格式不正确,请重新输入" 121. self.assertTrue(result6 == exp6) 122. 123.if __name__ == '__main__': 124. unittest.main()
后台登录代码(Jsp):
index.jsp:
1.<%@ page contentType="text/html;charset=UTF-8" language="java" %> 2.<!DOCTYPE html> 3.<html lang="en"> 4.<head> 5. <meta charset="UTF-8"> 6. <title>登录</title> 7. <link rel="stylesheet" type="text/css" href="Login.css"/> 8. <script> 9. function checkMobile() { 10. var mobile = re.number.value; 11. var mobileId = document.getElementById("error_u"); 12. var regMobile = /^1\d{10}$/; 13. // window.alert("."+mobile+".") 14. if(mobile==""){ 15. mobileId.innerHTML = "手机号码不能为空,请重新输入"; 16. mobileId.style.fontSize = "1px"; 17. mobileId.style.color = "red"; 18. return false; 19. } 20. else if (regMobile.test(mobile) == false) { 21. mobileId.innerHTML = "手机号码格式不正确,请重新输入"; 22. mobileId.style.fontSize = "1px"; 23. mobileId.style.color = "red"; 24. return false; 25. } else { 26. mobileId.innerHTML = ""; 27. return true; 28. } 29. } 30. function checkRepass(){ 31. var pwd=re.pass.value; 32. var mobileId = document.getElementById("error_p"); 33. if(pwd==""){ 34. mobileId.innerHTML = "密码不能为空,请重新输入"; 35. mobileId.style.fontSize = "1px"; 36. mobileId.style.color = "red"; 37. return false; 38. } 39. else{ 40. return true; 41. } 42. } 43. function checksubmit () { 44. checkMobile(); 45. return checkRepass() && checkMobile(); 46. } 47. </script> 48.</head> 49.<body> 50.<div id="login"> 51. <h1>Login</h1> 52. <form action="${pageContext.request.contextPath}/loginServlet" name="re" method="post" onsubmit="return checksubmit()"> 53. <table width="900px" border="0" cellspacing="0"> 54. <tr> 55. <td style="width: 300px"><input type="text" id="number" placeholder="手机号" name="u" onblur="checkMobile()"></input></td> 56. <td><div id="error_u"><font size="1px"></font></div></td> 57. </tr> 58. <tr> 59. <td><input type="password" id="pass" placeholder="密码" name="p"></input></td 60. ><td><div id="error_p"><font size="1px">${errerMsg}</font></div></td> 61. </tr> 62. <tr> 63. <td><button class="but" type="submit" id="loginButton">登录</button></td> 64. <td></td> 65. </tr> 66. </table> 67. </form> 68.</div> 69.</body> 70.</html>
数据库、Servlet、css相关代码略。
三、运行结果:
四、总结:
后台:使用jsp编写了登录界面,在js里面对手机号的格式进行验证,对手机号和密码是否为空做了验证,在mysql数据库存放手机号和密码,在Servlet里面对手机号和密码是否正确在数据库里面进行验证,最后返回。将整个项目部署到服务器上面,通过域名http://hanpengfei.com.cn:8080/Login_war_exploded/进行访问。
测试:使用selenium+python对登录进行测试,先初始化浏览器,打开对应登录页面,
对6个用例进行分别测试,通过id以及name属性对页面进行定位,然后自动输入手机号和密码、并且获取错误信息和登录成功的提示,将错误信息与py代码中的信息比较,最后打印输出。
效果: