一、 前言
该文档描述一次基于python的webUI自动化框架搭建过程及简单的使用。
框架构成:python + selenium + unittest
二、准备及编写条件
准备:
IDEA工具:pycharm(社区版即可)
Python3.9
Webdriver.exe文件下载好,将该文件放在本地python的lib文件夹下,并将其配置到环境变量(实际上放到python的任意文件夹下都可以,但必须将其配置到环境变量,以便于运行时能找到这个文件)。或者在代码中指定驱动的路径也可以。如:driver = webdriver.Chrome(executable_path=‘driver/chromedriver.exe’)
Chrome浏览器
注意:Webdriver.exe的版本需要和浏览器版本一致,不一致则会报错,浏览器版本可通过浏览器 “设置” --> “关于Chrome” 查看
Webdriver.exe下载地址:http://chromedriver.storage.googleapis.com/index.html
编写条件:
需掌握python基础、元素定位、三种等待方式、鼠标键盘事件、窗口切换等(多多益善)
三、初体验
1、实现用户登录:
1 from time import sleep
2 from selenium import webdriver
3 from selenium.webdriver.common.by import By
4
5 driver = webdriver.Chrome()
6 driver.get(r'https://xxx') # 打开浏览器并访问该链接,这里的链接不便展示哈
7 driver.maximize_window()
8
9 # 定位元素并操作
10 driver.find_element(By.NAME, 'username').send_keys('luoyang')
11 driver.find_element(By.NAME, 'password').send_keys('123456')
12 driver.find_element(By.XPATH, '//*[@id="app"]/div/div[2]/div/form/button').click()
13 sleep(10)
14
15 # 关闭并退出浏览器
16 driver.quit()
17
18
19
20 # 关于close()和quit():close()只是关闭浏览器当前窗口,并不会退出浏览器
21
22 # 当浏览器只有一个窗口时,使用close()虽然退出了浏览器,但驱动还在运行
23
24 # 而quit()则会关闭所有窗口,清除session,并结束驱动运行
2、进一步实现,引入unittest框架
1 from time import sleep
2 from selenium import webdriver
3 import unittest
4 from selenium.webdriver.common.by import By
5
6
7 class Login(unittest.TestCase):
8
9 def setUp(self) -> None:
10 self.driver = webdriver.Chrome()
11 self.url = r'https://xxx'
12 self.driver.maximize_window() # 最大化窗口
13 self.driver.get(self.url)
14
15 def test_login(self, username='luoyang', password='123456'):
16 self.driver.find_element(By.NAME, 'username').send_keys(username)
17 self.driver.find_element(By.NAME, 'password').send_keys(password)
18 self.driver.find_element(By.XPATH, '//*[@id="app"]/div/div[2]/div/form/button').click()
19
20 def tearDown(self) -> None:
21 sleep(5)
22 self.driver.quit()
23
24
25 if __name__ == '__main__':
26 unittest.main() # 执行测试
关于unittest框架详细学了之后再在其他篇章中发表…
四、POM设计模式
1、POM:
即page object model,页面对象模型,顾名思义,就是将每个页面当做一个对象来看待,将页面中需要操作的元素提取到这个对象中,此后每当要用到这些元素时,调用该对象即可。让我们来具体使用一下吧!
首先,我们先创建好结构:
all_case_run.py --模块,用于执行所有的测试类
|–common – 包,用于存放公用的工具类
|–universal_method.py – 通用工具类
|–case – 包,用于存放所有的测试类
|–test_login.py – 登录测试用例类
|–pages – 包,用于存放页面类及页面基类(basePage)
|–base_page.py – 所有页面对象都需继承该类,该类里封装了元素的定位、操作等方法
|–login_page.py – 登录页面类,该类包含了登录页面的元素、元素定位及操作逻辑等
|–data – 包,用于存放元素定位路径文件
|–login.yaml – yaml数据文件,用于存放登录页面的元素定位路径数据
|–report – 包,用于存放测试报告文件及日志文件(自动生成)
至此,一个简便的结构就创建好了。
2、 all_case.run.py内容:
1 import time
2
3 from BeautifulReport import BeautifulReport
4
5 from GAD_webUI.commen.universal_method import UniversalMethod
6
7 from GAD_webUI.commen.send_email import SendEmail
8
9
10
11 if __name__ == '__main__':
12
13
14 print('用例开始执行-------------------')
15
16 now = time.strftime('%Y-%m-%d_%H_%M_%S', time.localtime(time.time()))
17
18 filename = 'D:\\testStudy\gitstudy\gitrepository\pythonstudy\pythonworkspace\GAD_webUI\\report'
19
20 UniversalMeth

本文介绍了如何使用Python、Selenium和unittest构建webUI自动化测试框架,涵盖页面对象模型(POM)、测试报告、邮件通知和数据驱动等内容,适合有一定Python基础的测试人员学习。
最低0.47元/天 解锁文章
1475

被折叠的 条评论
为什么被折叠?



