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

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

效果:

相关文章
|
4天前
|
Java 测试技术 Python
《手把手教你》系列基础篇(八十)-java+ selenium自动化测试-框架设计基础-TestNG依赖测试-番外篇(详解教程)
【6月更文挑战第21天】本文介绍了TestNG中测试方法的依赖执行顺序。作者通过一个实际的自动化测试场景展示了如何设计测试用例:依次打开百度、搜索“selenium”、再搜索“selenium+java”。代码示例中,`@Test`注解的`dependsOnMethods`属性用于指定方法间的依赖,确保执行顺序。如果不设置依赖,TestNG会按方法名首字母排序执行。通过运行代码,验证了依赖关系的正确性。
26 4
|
6天前
|
数据采集 Web App开发 数据处理
一步步教你用Python Selenium抓取动态网页任意行数据
使用Python Selenium爬取动态网页,结合代理IP提升抓取效率。安装Selenium,配置代理(如亿牛云),设置User-Agent和Cookies以模拟用户行为。示例代码展示如何使用XPath提取表格数据,处理异常,并通过隐式等待确保页面加载完成。代理、模拟浏览器行为和正确配置增强爬虫性能和成功率。
一步步教你用Python Selenium抓取动态网页任意行数据
|
2天前
|
Java 测试技术 Python
《手把手教你》系列基础篇(八十一)-java+ selenium自动化测试-框架设计基础-TestNG如何暂停执行一些case(详解教程)
【6月更文挑战第22天】本文介绍了如何在TestNG中不执行特定测试用例。当部分模块未准备好时,可以通过以下方式暂停测试:③使用`@Test(enabled=false)`注解来禁用测试用例。作者提供了一个Java Selenium自动化测试的示例,展示如何通过修改`enabled`参数控制测试方法的执行。代码中,`testSearch2()`方法被禁用,因此在测试运行时不执行。文章还包含了测试报告和执行过程的截图。
33 7
|
5天前
|
Java 测试技术 Python
《手把手教你》系列基础篇(七十九)-java+ selenium自动化测试-框架设计基础-TestNG依赖测试-下篇(详解教程)
【6月更文挑战第20天】TestNG是一个Java测试框架,提供两种测试方法依赖机制:强依赖(所有前置方法成功后才运行)和弱依赖(即使前置方法失败,后置方法仍运行)。文中通过代码示例展示了这两种依赖如何实现,并解释了当依赖方法失败时,如何影响后续方法的执行。文章还包含了TestNG Suite的运行结果截图来辅助说明。
28 8
|
1天前
|
XML Java 测试技术
《手把手教你》系列基础篇(八十二)-java+ selenium自动化测试-框架设计基础-TestNG测试报告-上篇(详解教程)
【6月更文挑战第23天】TestNG 是一个用于自动化测试的 Java 框架,它自动生成测试报告,包括 HTML 和 XML 格式。报告可在 `test-output` 文件夹中找到。要创建测试用例,可创建一个实现了 `@Test` 注解的方法。通过 `testng.xml` 配置文件来组织和执行测试。默认报告包括测试结果、失败点和原因。用户还能实现 `ITestListener` 和 `IReporter` 接口来自定义报告和记录器。
18 2
|
7天前
|
Java 测试技术 Python
《手把手教你》系列基础篇(七十七)-java+ selenium自动化测试-框架设计基础-TestNG依赖测试- 上篇(详解教程)
【6月更文挑战第18天】TestNG是一个Java测试框架,它允许在测试方法间定义执行顺序和依赖关系。当不指定依赖时,TestNG默认按方法名首字母排序执行。`@Test`注解的`dependsOnMethods`属性用于指定方法依赖,如`test1`依赖`test4`,则实际执行顺序为`test4`、`test2`、`test3`、`test1`。如果依赖的方法失败,后续依赖的方法将被跳过。此外,`dependsOnGroups`属性通过组名指定依赖,方便管理多个相关测试方法。通过`groups`定义方法所属组,然后在其他方法中用`dependsOnGroups`引用这些组。
21 5
|
6天前
|
数据可视化 前端开发 Java
自动化测试框架的选择与实践: Selenium vs. TestComplete
【6月更文挑战第18天】在软件开发的海洋中,自动化测试是一艘能够确保产品质量和效率的坚固船只。本文将深入探讨两种流行的自动化测试框架——Selenium和TestComplete,从它们的优势、局限性到适用场景进行对比分析。我们将通过实际案例来揭示如何根据项目需求选择最合适的测试工具,并提供一些实用的实施建议。文章旨在为读者提供清晰的指导,帮助他们在自动化测试的旅程中做出明智的决定。
12 3
|
6天前
|
XML Web App开发 测试技术
《手把手教你》系列基础篇(七十八)-java+ selenium自动化测试-框架设计基础-TestNG依赖测试- 中篇(详解教程)
【6月更文挑战第19天】本文介绍了使用TestNG框架配置XML文件来管理测试用例的分组和依赖关系。
26 2
|
4天前
|
Linux 数据处理 文件存储
Python文件自动化处理(一)
`os` 模块是 Python 中用于操作系统交互的核心模块,支持文件和目录的创建、移动、复制等操作,以及处理文件路径和名称。它还提供了 `os.walk()` 函数来遍历目录树,查找文件。字符串方法如 `startswith()` 和 `endswith()` 用于过滤文件名。`glob` 模块则支持使用通配符 (`*`, `?`, `[seq]`) 查找匹配的文件。
|
4天前
|
Python
Python文件自动化处理(二)
使用Python自动化处理Excel涉及`openpyxl`库,包括打开和读取表格数据:`load_workbook()`、获取工作表、获取尺寸;读取单元格数据:`sheet['A1']`、`cell.value`;以及写入内容:`sheet['A1']='hello,Python'`、`cell.value='hello,Python'`、`sheet.append()`和插入行/列。此外,`python-docx`模块用于Word处理,支持创建、修改文档,添加标题、段落、文字、图片和表格,并能设置样式和格式。

热门文章

最新文章