selenium+python自动化测试--登录

题目: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代码中的信息比较,最后打印输出。

效果:


版权声明:本文为qq_47831505原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。