python+selenium做ui自动化测试用法必会
off999 2024-12-03 17:15 20 浏览 0 评论
一、前言
大家都知道,基于Web端的测试的基础框架是需要Selenium做主要支撑的,这里边给大家介绍下Web测试核心之基于Python的Selenium
Selenium是用于测试Web应用程序用户界面(UI)的常用框架。它是一款用于运行端到端功能测试的超强工具。您可以使用多个编程语言编写测试,并且Selenium能够在一个或多个浏览器中执行这些测试。
二、环境安装
建议 python3.7。
安装基于python的selenium依赖包,命令:pipinstallselenium
安装浏览器驱动包,推荐使用chrome浏览器的chromedriver.exe,对应chrome版本一定要对哦,不然运行不起来的,安装在哪?想放哪放哪,不过一般是放在python的根目录下。下载地址:chromedriver.storage.googleapis.com/index.html
安装PyCharm,这个无脑安装~然后可自定义界面UI及编码风格。
三、牛刀小试
1.控制浏览器
#coding=utf-8 from selenium import webdriver driver = webdriver.Chrome() driver.get("http://www.baidu.com") driver.maximize_window() #将浏览器最大化显示 driver.set_window_size(480, 800) #设置浏览器宽480、高800显示" driver.back() #后退 driver.forward() #前进 driver.close() #关闭chrome driver.quit() # 退出chrome |
2.对象的定位
通过 id 定位:find_element_by_id() 通过 name 定位:find_element_by_name() 通过 class 定位:find_element_by_class_name() 通过 tag 定位:find_element_by_tag_name() 通过 link 定位:find_element_by_link_text() 通过 partial_link 定位:find_element_by_partial_link_text() 通过 xpath 定位:find_element_by_xpath() 通过 css 定位:find_element_by_css_selector() |
以上几种定位是常规操作,应该就基本够用了,但是有的时候就是会出现一些诡异的定位失效或者定位到了点击失效的问题,这个时候如果用js进行直接执行该事件,接下来介绍下非常规操作:
id 定位:document.getElementById() name 定位:document.getElementsByName() tag 定位:document.getElementsByTagName() class 定位:document.getElementsByClassName() css 定位:document.querySelectorAll() search_js = "document.getElementsByName('wd')[0].value='selenium';"# 通过name定位,然后赋值“selenium” search_js2 = "document.querySelectorAll('.s_ipt')[0].value='selenium';"# 通过css定位,然后赋值“selenium” button_js = "document.getElementById('su').click();"# 通过id定位,然后执行单击操作 button_js2 = "document.getElementsByClassName('s_btn')[0].click()"# 通过className定位,然后执行单击操作 driver.execute_script(search_js2)#执行,execute_script(script, *args) |
以上几种定位是可以再度升级,可以利用jQuery定位一波。
3.操作测试对象
#coding=utf-8 from selenium import webdriver driver = webdriver.Chrome() driver.get("http://passport.kuaibo.com/login/") driver.find_element_by_id("user_name").clear() #清除输入框的默认内容 driver.find_element_by_id("user_name").send_keys("username") driver.find_element_by_id("user_pwd").clear() driver.find_element_by_id("user_pwd").send_keys("password") #输入输入框的内容为“password” driver.find_element_by_id("dl_an_submit").click() #通过 submit() 来提交操作 driver.find_element_by_id("dl_an_submit").submit() size=driver.find_element_by_id("kw").size #返回百度输入框的宽高 text=driver.find_element_by_id("cp").text #返回百度页面底部备案信息 #返回元素的属性值,可以是 id、name、type 或元素拥有的其它任意属性 attribute=driver.find_element_by_id("kw").get_attribute('type') #返回元素的结果是否可见,返回结果为 True 或 False result=driver.find_element_by_id("kw").is_displayed() driver.quit() #退出 |
4.鼠标键盘事件
from selenium import webdriver #引入 Keys 类包 from selenium.webdriver.common.keys import Keys #引入 ActionChains 类 from selenium.webdriver.common.action_chains import ActionChains ... #鼠标事件 #定位到要操作的元素 right =driver.find_element_by_xpath("xx") #对定位到的元素执行鼠标右键操作 ActionChains(driver).context_click(right).perform() #对定位到的元素执行鼠标双击操作 ActionChains(driver).double_click(right).perform() #对定位到的元素执行鼠标移动到上面的操作 ActionChains(driver).move_to_element(right).perform() #对定位到的元素执行鼠标左键按下的操作 ActionChains(driver).click_and_hold(right).perform() #定位元素的原位置 element = driver.find_element_by_name("xxx") #定位元素要移动到的目标位置 target = driver.find_element_by_name("xxx") #执行元素的移动操作 ActionChains(driver).drag_and_drop(element, target).perform() #键盘事件 #删除多输入的一个 值 driver.find_element_by_id("kw").send_keys(Keys.BACK_SPACE) #输入空格键+“教程” driver.find_element_by_id("kw").send_keys(Keys.SPACE) driver.find_element_by_id("kw").send_keys(u"教程") #ctrl+x 剪切输入框内容 driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'x') #其余的键盘操作类似 |
5.等待时间
#coding=utf-8 from selenium import webdriver #导入 WebDriverWait 包 from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC #导入 time 包 import time driver = webdriver.Chrome() driver.get("http://www.baidu.com") #WebDriverWait()方法使用,显示等待,WebDriverWait(driver,超时时长,调用频率,忽略异常).until(可执行方法,超时返回的信息),这里可以调用EC来实现可执行方法 is_disappeared = WebDriverWait(driver, 30, 1, (ElementNotVisibleException)).until_not(lambda x: x.find_element_by_id(“kw”).is_displayed()) #until(method, message=’ ’),调用该方法提供的驱动程序作为一个参数,直到返回值不为 False element.send_keys("selenium") #添加智能等待,隐时等待 driver.implicitly_wait(30) driver.find_element_by_id("su").click() #添加固定休眠时间,强制等待 time.sleep(5) driver.quit() |
6.组对象定位及层级定位
7.多窗口处理
#coding=utf-8 from selenium import webdriver import time driver = webdriver.Chrome() driver.get("http://www.baidu.com/") #获得当前窗口 nowhandle=driver.current_window_handle #打开注册新窗口 driver.find_element_by_name("tj_reg").click() allhandles=driver.window_handles #循环判断窗口是否为当前窗口 for handle in allhandles: if handle != nowhandle: driver.switch_to_window(handle) print 'now register window!' #切换到邮箱注册标签 driver.find_element_by_id("mailRegTab").click() time.sleep(5) driver.close() #回到原先的窗口 driver.switch_to_window(nowhandle) driver.find_element_by_id("kw").send_keys(u"注册成功!") time.sleep(3) #ifrome处理 #这里会自动识别id,name,如果没有则可以将元素通过选择器找到,然后输入该元素即可 driver.switch_to_frame("f1") element = driver.find_element_by_id("kw") driver.switch_to_frame(element) driver.quit() |
8.提示窗口处理
#coding=utf-8 from selenium import webdriver import time driver = webdriver.Chrome() driver.get("http://www.baidu.com/") #点击打开搜索设置 driver.find_element_by_name("tj_setting").click() driver.find_element_by_id("SL_1").click() #点击保存设置 driver.find_element_by_xpath("//div[@id='gxszButton']/input").click() #获取网页上的警告信息 alert=driver.switch_to_alert() #接收警告信息 alert.accept() #取消对话框(如果有的话) alert.dismiss() #输入值(如果有的话) alert.send_keys(“xxx”) |
9.控制浏览器滚动条
这个运用之前提示的jq语句即可实现。
10.cookie处理,主要用途在于处理验证码问题
#coding=utf-8 from selenium import webdriver import time driver = webdriver.Chrome() driver.get("http://www.youdao.com") #向 cookie 的 name 和 value 添加会话信息。 driver.add_cookie({'name':'key-aaaaaaa', 'value':'value-bbbb'}) #遍历 cookies 中的 name 和 value 信息打印,当然还有上面添加的信息 for cookie in driver.get_cookies(): print "%s -> %s" % (cookie['name'], cookie['value']) ##### 下面可以通过两种方式删除 cookie ##### # 删除一个特定的 cookie driver.delete_cookie("CookieName") # 删除所有 cookie driver.delete_all_cookies() time.sleep(2) driver.close() |
四、小结
在熟悉了selenium常见的API基本操作后,这里便可以开展实际测试用例的设计了,一个良好的自动化测试用例起码符合一下六个条件:
1.一个脚本是一个完整的场景,从用户登陆操作到用户退出系统关闭浏览器。
2.一个脚本脚本只验证一个功能点,不要试图用户登陆系统后把所有的功能都进行验证再退出系统。
3.尽量只做功能中正向逻辑的验证,不要考虑太多逆向逻辑的验证,逆向逻辑的情况很多(例如手号输错有很多种情况),验证一方面比较复杂,需要编写大量的脚本,另一方面自动化脚本本身比较脆弱,很多非正常的逻辑的验证能力不强。(我们尽量遵循用户正常使用原则编写脚本即可)
4.脚本之间不要产生关联性,也就是说编写的每一个脚本都是独立的,不能依赖或影响其他脚本。
5.如果对数据进行了修改,需要对数据进行还原。
6.在整个脚本中只对验证点进行验证,不要对整个脚本每一步都做验证。
最后配合unittest或者testNG单元测试框架,实现分层、数据驱动、断言、截图、日志等全方位功能,得心应手的开展自动化测试工作。
- 上一篇:利用CnOCR实现自动对截屏图片OCR
- 下一篇:Python小游戏-贪吃蛇大冒险
相关推荐
- 登录126邮箱入口(登录126邮箱入口官网)
-
126邮箱是网易的一个免费邮箱登录入口在浏览器输入:mail.126.com浏览器进入126邮箱网站之后,即可自行登录126邮箱账号。如何在手机上登录126邮箱1、打开手机,找到并打开网易邮箱软件。2...
- 如何让防火墙允许某个软件(如何允许防火墙阻止访问)
-
1.打开电脑的开始菜单,找到控制面板选项,并点击打开。2.在打开的控制面板中,找到防火墙选项,并点击打开。3.在打开的防火墙界面中,单击左侧的允许程序通过防火墙选项。4.在跳转的界面中,选择允许通过防...
-
- 智慧工厂管理系统(智慧工厂管理系统哪家好)
-
智慧工厂智能化系统整体的解决方案分为三个主要部分,分别是现场控制系统(FDC)、生产数据管理系统(PDM)以及工厂数字化协同平台(LCT)。其中,现场控制系统(FDC)是智慧工厂系统非常重要的核心组成部分,它是一个支持大规模互联的集群控制系...
-
2025-11-13 22:03 off999
- 电脑如何打开隐藏文件(电脑怎么打开隐藏文件夹)
-
要显示隐藏文件,首先需要打开文件资源管理器,然后点击菜单栏中的“查看”选项,选中“隐藏项目”复选框即可。此时,隐藏文件和文件夹将会显示在文件资源管理器中,可以进行正常操作。如果需要隐藏文件和文件夹,可...
- 华硕官网客服电话(华硕官网400客服电话)
-
华硕维修中心官网,http://www.asus.com.cn/support/你可以通过电话,邮件等方式联系华硕的售后客户,提供你的主板序列号,他会告诉你的。华硕ROG真享服务包是一项专门针对购买华...
- win11如何进入安全模式(win11如何进入安全模式启动)
-
进入Win11安全模式有多种方法,下面介绍两种常用的方法:方法一:使用系统配置工具1.使用组合键Win+R打开“运行”对话框,输入“msconfig”并按Enter键。2.在“系统配...
- 网易邮箱163登录界面(网易163邮箱登陆界面)
-
163邮箱登录首页入口为http://mail.163.com/网易163免费邮箱--中文邮箱第一品牌.容量自动翻倍,支持50兆附件,免费开通手机号码邮箱赠送3G超大附件服务.支持各种客户端软件收发,...
- win10激活注意事项(win10激活过程要多久)
-
1.是:KMS激活、数字许可证激活、产品密钥激活。2.KMS激活是通过KeyManagementService服务器来激活系统,它需要连接到企业内部的KMS服务器进行激活,适用于企业用户。数字...
- 华硕官网正品查询(华硕官网防伪查询)
-
登陆网站www.asus.com.cn进入网站,点击防伪查询,输入16位防伪数码,即可辨别真伪。华硕显卡sn码官网查1.打开浏览器进入华硕官方网站。2.在页面下方找到“华硕产品服务政策”类目,点击进入...
- 数据网络打开了连不上网怎么回事
-
1、如您无法上网请尝试关机开机重启;请检查是否已达本月流量封顶阀值;请检查手机设置移动数据是否已打开;手机设置流动数据选项APN及名称是否设置为3gnet。2、如仍无法上网,建议您可通过以下方式进行排...
- synopsys软件(synthia软件)
-
PSIM是趋向于电力电子领域以及电机控制领域的仿真应用包软件。PSIM具有仿真高速、用户界面友好、波形解析等功能,为电力电子电路的解析、控制系统设计、电机驱动研究等有效提供强有力的仿真环境。本...
- cmd定时关机命令设置时间(cmd定时关机怎么设置)
-
在WindowsXP下打开C盘,在Windows下选system32中有一个shutdown的程序,可以复制到其它系统中。“开始”--->运行--->(在输入shutdown的命令)...
- 笔记本电脑开机就蓝屏(笔记本电脑开机就蓝屏了)
-
USB: 假如计算机处于开机的状态时USB接口上有U盘等存储设备,那么计算机就很有可能出现蓝屏现象,而且无法正常开机。因此,当计算机在开机时出现蓝屏状态时,我们首先要检查一下USB接口是否有接入U...
- 重置无线路由器(重置无线路由器密码)
-
1、将网线—路由器—电脑之间的线路连接好,启动电脑和路由器设备;2、启动设备后,打开浏览器,在地址栏中输入192.168.1.1进入无线路由器设置界面。(如进不了请翻看路由器底部铭牌或者是路由器使用说...
欢迎 你 发表评论:
- 一周热门
-
-
抖音上好看的小姐姐,Python给你都下载了
-
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
-
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
-
python入门到脱坑 输入与输出—str()函数
-
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
-
宝塔面板如何添加免费waf防火墙?(宝塔面板开启https)
-
Python三目运算基础与进阶_python三目运算符判断三个变量
-
(新版)Python 分布式爬虫与 JS 逆向进阶实战吾爱分享
-
慕ke 前端工程师2024「完整」
-
失业程序员复习python笔记——条件与循环
-
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
