位置: IT常识 - 正文

Python+Selenium自动化测试详细教程(python自动化selenium)

编辑:rootadmin
Python+Selenium自动化测试详细教程 前言Python+Selenium 来实现的web端自动化, 以下演示会用到禅道、百度和自己编写的html.一、准备工作1、安装安装Python 3安装selenium库,命令:pip install selenium搭建禅道环境2、导入浏览器驱动

推荐整理分享Python+Selenium自动化测试详细教程(python自动化selenium),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:pythonselenium自动化点击网页,pythonselenium自动化,selenium自动点击,pythonselenium自动化,selenium自动化步骤,pythonselenium自动化,pythonselenium自动化,python+selenium自动化,内容如对您有帮助,希望把文章链接给更多的朋友!

selenium操作不同的浏览器,需要下载不同浏览器的驱动

Firefox 浏览器驱动: 浏览器驱动下载 webdriver.Chrome()Chrome浏览器驱动:浏览器驱动下载 webdriver.Firefox()IE浏览器驱动:浏览器驱动下载 webdriver.Ie()Edge浏览器驱动:浏览器驱动下载 webdriver.Edge()

以chrome浏览器为例: 1、进入到下载页面,找到符合自己浏览器版本的驱动 2、下载好了之后,右键解压到当前文件夹 3、将得到的chromedriver.exe放到Python的安装目录

二、使用from selenium import webdriverfrom selenium.webdriver.common.by import Byimport timeclass Zen_Tao: def __init__(self): # 初始化一个chrome浏览器(驱动谷歌浏览器时,直接使用webdriver.Chrome()可能会报错,建议使用一下方法) options = webdriver.ChromeOptions() options.add_experimental_option('excludeSwitches', ['enable-logging']) self.drive = webdriver.Chrome(options=options) # 最大化窗口 self.drive.maximize_window() # 隐式等待,设置最大的等待时长,只对查找元素(find_elementXXX)生效 self.drive.implicitly_wait(2) def log_on(self): '''代码执行''' # 通过get()方法打开网页 self.drive.get('http://192.168.100.210/zentao/') def sign_out(self): '''退出浏览器''' self.drive.close() # 关闭浏览器 self.drive.quit() # 关闭浏览器并且关闭驱动if __name__ == "__main__": run = Zen_Tao() run.log_on() run.sign_out()1、元素定位方法禅道登陆演示

图一

图二

单属性查找 def log_on(self): '''代码执行''' # 通过get()方法打开网页 self.drive.get('http://192.168.100.210/zentao/') # 1.用 id 属性定位查找 self.drive.find_element(By.ID, "account") # 2.用 name 属性定位查找 self.drive.find_element(By.NAME, "account") # 3.用 class 属性定位查找 self.drive.find_element(By.CLASS_NAME, "form-control") # 4.用 xpath 属性定位查找 self.drive.find_element(By.XPATH, '//*[@id="account"]') # 5.具有给定标签名称的第一个元素将被返回 self.drive.find_element(By.TAG_NAME, "input") # 6.用 css 属性定位查找 # 方法一[标签名] self.drive.find_element(By.CSS_SELECTOR, 'input') # 方法二[id], #代表id self.drive.find_element(By.CSS_SELECTOR, '#account') # 方法三[class], .代表class self.drive.find_element(By.CSS_SELECTOR, '.form-control') # 方法四[其他属性] self.drive.find_element(By.CSS_SELECTOR, '[name="account"]') # 7.链接文本值与位置匹配的第一个元素将被返回 # (通过标签对之间的文本进行定位) self.drive.find_element(By.LINK_TEXT, "忘记密码") # 8.具有部分链接文本值与位置匹配的第一个元素将被返回 # (partial link其实是对link的一个扩展,因为有些时候链接文本很长,这时候就可以使用其中的一部分来进行定位) self.drive.find_element(By.PARTIAL_LINK_TEXT, "忘记")组合属性查询 def log_on(self): '''代码执行''' # 1.通过get()方法打开网页 self.drive.get('http://192.168.100.210/zentao/') # 2.标签名和id属性值组合定位 self.drive.find_element(By.CSS_SELECTOR, 'input#account') # 3.标签名和class属性值组合定位 self.drive.find_element(By.CSS_SELECTOR, 'input.form-control') # 4.标签名和属性(含属性值)组合定位 self.drive.find_element(By.CSS_SELECTOR, 'input[name="account"]') # 5.多个属性组合定位 self.drive.find_element(By.CSS_SELECTOR, '[class="form-control"][name="account"]')层级查询

图三

def log_on(self): '''代码执行''' # 通过get()方法打开网页 self.drive.get('http://192.168.100.210/zentao/') # 1.查询元素时,我们也可以先查询父级,然后再查询子级,父级和子级用空格隔开,如上图所示(div - table - input) self.drive.find_element(By.CSS_SELECTOR, '.col-8 [class="table table-form"] #account')相同元素定位

图四

def log_on(self): '''代码执行''' # 通过get()方法打开网页 self.drive.get('http://192.168.100.210/zentao/') # 定位第一个元素 self.drive.find_element(By.CSS_SELECTOR, '[class="form-control"]') # 定位第二个元素,find_elements后面加了s self.drive.find_elements(By.CSS_SELECTOR, '[class="form-control"]')[1]我们在进行元素定位时,获取到的元素一定是唯一的或第一个。查看是否唯一我们可以按CTRL+F搜索,如下:Python+Selenium自动化测试详细教程(python自动化selenium)

2、输入、清空、点击操作 def log_on(self): '''代码执行''' # 通过get()方法打开网页 self.drive.get('http://192.168.100.210/zentao/') # 输入:send_keys() self.drive.find_element(By.CSS_SELECTOR, '#account').send_keys("admin") # 清空: clear() self.drive.find_element(By.CSS_SELECTOR, '#account').clear() # 单机操作(相当于鼠标点击):click() self.drive.find_element(By.CSS_SELECTOR, '.form-actions #submit').click()3、回车键操作# 点击登录按钮,一般情况下,使用click()进行点击# 有些时候也可以使用submit()代替click(),相当于敲回车 def log_on(self): '''代码执行''' # 通过get()方法打开网页 self.drive.get('https://www.baidu.com/') # 输入内容,点击百度一下 self.drive.find_element(By.CSS_SELECTOR, '[class="s_ipt"]').send_keys("软件测试") # 回车操作(相当于按回车键):submit() self.drive.find_element(By.CSS_SELECTOR, '[id="su"]').submit()4、获取元素内容

-Text获取元素内容

# text 获取元素内容text = self.drive.find_element(By.CSS_SELECTOR, '.form-actions a').textprint(text)# 结果:忘记密码如果使用Text获取元素内容时,返回的是空值,但未报错,这个时候我们需要使用get_attribute(‘innerText’)获取元素的内容 # 获取元素内容get = self.drive.find_element(By.CSS_SELECTOR, '#loginPanel h2').get_attribute('innerText')print(get)# 结果:易软天创项目管理系统5、获取元素属性的值禅道登陆演示

# 获取属性的值get = self.drive.find_element(By.CSS_SELECTOR, '[id="keepLoginon"]').get_attribute('title')print(get)# 结果:保持登录6、元素判断没有演示环境,就自己写一个html页面

在页面中显示元素:

<!DOCTYPE html><html><head><meta charset="utf-8"><title>演示数据</title></head><body> <form> <input type="text" value="用户名" id="account"><br><input type="password" value="密码" id="password"><br> </form></body></html>

在页面中不显示元素:

<!DOCTYPE html><html><head><meta charset="utf-8"><title>演示数据</title></head><body> <form> <input style="visibility: hidden;" type="text" value="用户名" id="account"><br> <input type="password" value="密码" id="password"><br> </form></body></html>

禁用输入框:

<!DOCTYPE html><html><head><meta charset="utf-8"><title>演示数据</title></head><body> <form> <input disabled="disabled" type="text" value="用户名" id="account"><br> <input type="password" value="密码" id="password"><br> </form></body></html>

1、is_displayed()

1、is_displayed():判断元素是否存在,结果是真或假1-1显示元素,在HTML里,在页面也显示,返回True,1-2隐藏元素,在HTML里,不在页面显示,返回Flase1-3不在HTML里,不存在这个元素,会报错# 判断输入框是否在页面中显示drive = self.drive.find_element(By.CSS_SELECTOR, '#account').is_displayed()print(f"元素是否显示:{drive}")

2、is_enabled()

is_enabled():判断是否可用# 判断输入框是否可以输入drive = self.drive.find_element(By.CSS_SELECTOR, '#account').is_enabled()print(f"输入框是否可以输入:{drive}")

3、is_selected()

禅道登陆页面演示is_selected():判断是否选中,一般用于复选框或单选框的选中判断# 勾选保持登陆操作# self.drive.find_element(By.CSS_SELECTOR, '[name="keepLogin[]"]').click()drive = self.drive.find_element(By.CSS_SELECTOR, '[name="keepLogin[]"]').is_selected()if drive:print(f"已勾选:{drive}")else:print(f"未勾选:{drive}")7、iframe&frame切换

说明:在html语法中,frame 元素或者iframe元素的内部会包含一个被嵌入的另一份html文档,这个时候如果我们需要操作iframe内的文档,就需要先切换到被嵌入的文档中,才可以进行操作。

禅道登陆后演示 1.先定位到需要切换的文档 — iframe&frame 2.切换文档(切到frame中):switch_to.frame() 3.从子frame切回到父frame:switch_to.parent_frame() 4.切换到最外层文档(从frame中切回主文档):switch_to.default_content() def log_on(self): '''代码执行''' # 通过get()方法打开网页 self.drive.get('http://192.168.100.210/zentao/') # 登陆禅道 self.drive.find_element(By.CSS_SELECTOR, '[id="account"]').send_keys("admin") time.sleep(1) self.drive.find_element(By.CSS_SELECTOR, '[name="password"').send_keys("123456") time.sleep(1) self.drive.find_element(By.CSS_SELECTOR, '[id="submit"]').click() time.sleep(1) # 切换方法如下: # 方法一 # iframe = self.drive.find_elements_by_tag_name("iframe")[0] # self.drive.switch_to.frame(iframe) # 方法二 # self.drive.switch_to.frame(0) # 方法三 iframe = self.drive.find_element(By.CSS_SELECTOR, '#appIframe-my') self.drive.switch_to.frame(iframe) time.sleep(1) # 点击联系人 self.drive.find_element(By.XPATH, '//*[@id="navbar"]/ul/li[5]/a').click() # 切换到最外层表单 self.drive.switch_to.default_content() time.sleep(1) # 点击项目 self.drive.find_element(By.CSS_SELECTOR, '#menu [data-app="project"]').click()8、鼠标悬停禅道登陆界面,选择语言 鼠标悬停需要导入:from selenium.webdriver import ActionChains def log_on(self): '''代码执行''' # 通过get()方法打开网页 self.drive.get('http://192.168.100.210/zentao/') # 需要悬停的元素,悬停到语言选择框上 hover = self.drive.find_element(By.CSS_SELECTOR, '[class="btn"]') # 鼠标悬停 ActionChains(浏览器).move_to_element(悬停的元素).perform() 执行操作 ActionChains(self.drive).move_to_element(hover).perform() time.sleep(1)# 选择需要的语言 self.drive.find_element(By.CSS_SELECTOR, '[data-value="zh-tw"]').click()

像iframe切换/鼠标悬停为提高成功率,最好是在操作后sleep(1)秒

9、警告框处理禅道登陆演示 警告框处理:switch_to.alert def log_on(self): '''代码执行''' # 通过get()方法打开网页 self.drive.get('http://192.168.100.210/zentao/') # 点击登陆 self.drive.find_element(By.CSS_SELECTOR, '[id="submit"]').click() time.sleep(1) # 获取警告框的文本信息 alert_msg = self.drive.switch_to.alert.text print(alert_msg) # 接受警告框 accept() self.drive.switch_to.alert.accept() # 取消警告框 dismiss() # self.drive.switch_to.alert.dismiss()10、窗口切换切换窗口:switch_to.window(需要切换到的窗口) def log_on(self): '''代码执行''' # 打开百度 self.drive.get('https://www.baidu.com/') # 搜索框输入:CSDN self.drive.find_element(By.CSS_SELECTOR, '[name="wd"]').send_keys("csdn") time.sleep(0.5) # 点击百度一下 self.drive.find_element(By.CSS_SELECTOR, '[id="su"]').click() time.sleep(0.5) # 点击CSDN官网,开启新窗口,进入CSDN官网 self.drive.find_element(By.LINK_TEXT, 'CSDN技术社区').click() time.sleep(3) # 获取当前窗口(当前句柄名称-handle) windows = self.drive.current_window_handle print(f"当前handle:{windows}") # 获取所有窗口(所有句柄名称-handle),以列表的形式返回过来 all_windows = self.drive.window_handles print(f"所有handle:{all_windows}") # 切换窗口,根据所有窗口的下标来切换,窗口顺序从0开始。(此时有两个窗口,第一个百度,第二个csdn) self.drive.switch_to.window(all_windows[0]) time.sleep(3) # 切换到最新窗口的句柄(csdn) self.drive.switch_to.window(all_windows[-1])11、select标签的下拉框选择没有演示环境,就自己写一个html页面:<!DOCTYPE html><html><head><meta charset="utf-8"><title>演示数据</title></head><body> <select id="nr" name="wan"> <option value="10">每页显示10条</option> <option value="20">每页显示20条</option> <option value="50">每页显示50条</option> <option value="100">每页显示100条</option> </select></body></html>首先需要先导入一个包(注意Select的S需要大写)from selenium.webdriver.support.ui import Select def log_on(self): '''代码执行''' # 打开本地hthl页面 self.drive.get('file:///C:/Users/Admin/Desktop/hthl.html') # 需要先定位到下拉框 elements = self.drive.find_element(By.CSS_SELECTOR, '#nr') # Select(需要操作下拉框).根据什么操作 time.sleep(2) Select(elements).select_by_index(1) # 根据index,下标定位,从0开始 time.sleep(2) Select(elements).select_by_value('100') # 根据value定位 time.sleep(2) Select(elements).select_by_visible_text('每页显示50条') # 根据文本定位
本文链接地址:https://www.jiuchutong.com/zhishi/295204.html 转载请保留说明!

上一篇:手把手教你如何在项目中使用阿里字体图标IconFont(手把手教你如何套路男神)

下一篇:【PyG】与networkx的图转换(network python)

  • 华为mate20录屏不见了(华为mate20录屏不能录制耳机内的声音)

    华为mate20录屏不见了(华为mate20录屏不能录制耳机内的声音)

  • 腾讯课堂怎么改备注(腾讯课堂怎么改名字改成学生名字)

    腾讯课堂怎么改备注(腾讯课堂怎么改名字改成学生名字)

  • 抖音一万音浪 主播可以分到多少(抖音一万音浪到手多少钱)

    抖音一万音浪 主播可以分到多少(抖音一万音浪到手多少钱)

  • 通话中怎么输入字母(在通话中怎么输入字母)

    通话中怎么输入字母(在通话中怎么输入字母)

  • 闲鱼上卖书为什么便宜(闲鱼上卖书为什么这么贵)

    闲鱼上卖书为什么便宜(闲鱼上卖书为什么这么贵)

  • 华为p40电话卡槽在哪里(华为p40手机卡槽)

    华为p40电话卡槽在哪里(华为p40手机卡槽)

  • 11是多大的屏幕尺寸(11是多少寸的屏幕)

    11是多大的屏幕尺寸(11是多少寸的屏幕)

  • 知乎主要是干什么用的(知乎是干什么的,能赚钱吗)

    知乎主要是干什么用的(知乎是干什么的,能赚钱吗)

  • 华为荣耀怎么分屏(华为荣耀怎么分身应用)

    华为荣耀怎么分屏(华为荣耀怎么分身应用)

  • 小米摄像头共享改不了权限(小米摄像头共享给家人后怎么操作)

    小米摄像头共享改不了权限(小米摄像头共享给家人后怎么操作)

  • 苹果官网礼品留言是什么意思(苹果官网礼品留言图片)

    苹果官网礼品留言是什么意思(苹果官网礼品留言图片)

  • qq会被永久冻结吗(qq会永久冻结吗)

    qq会被永久冻结吗(qq会永久冻结吗)

  • 拼多多订单回收站在哪(拼多多订单回收什么意思)

    拼多多订单回收站在哪(拼多多订单回收什么意思)

  • 台式电脑网卡驱动异常连不上网怎么解决(台式电脑网卡驱动异常怎么修复)

    台式电脑网卡驱动异常连不上网怎么解决(台式电脑网卡驱动异常怎么修复)

  • 苹果11pro的尺寸(苹果11pro的尺寸是多少)

    苹果11pro的尺寸(苹果11pro的尺寸是多少)

  • oppor15机身多少厘米(oppor15有多大的尺寸呀?)

    oppor15机身多少厘米(oppor15有多大的尺寸呀?)

  • 荣耀20充电需要多久(荣耀20充电需要多长时间)

    荣耀20充电需要多久(荣耀20充电需要多长时间)

  • 手机systemclean是啥(手机system cache能清理吗)

    手机systemclean是啥(手机system cache能清理吗)

  • 苹果x卡顿怎么解决方法(苹果x卡顿怎么关机重启)

    苹果x卡顿怎么解决方法(苹果x卡顿怎么关机重启)

  • airpods盒子有定位吗(airpods盒子定位还是耳机定位)

    airpods盒子有定位吗(airpods盒子定位还是耳机定位)

  • 候补抢票和抢票有什么不一样(候补抢票和抢票哪个成功率大)

    候补抢票和抢票有什么不一样(候补抢票和抢票哪个成功率大)

  • 拍立得相纸卡住了怎么拿出来(拍立得相纸卡住了怎么办)

    拍立得相纸卡住了怎么拿出来(拍立得相纸卡住了怎么办)

  • Word中光标到行尾的快捷键是(在word文档中将光标移到本行行首的快捷键)

    Word中光标到行尾的快捷键是(在word文档中将光标移到本行行首的快捷键)

  • vivox27升降摄像头怎么开(vivox27升降摄像头拆解安装)

    vivox27升降摄像头怎么开(vivox27升降摄像头拆解安装)

  • huaweiMate 20的cpu

    huaweiMate 20的cpu

  • 华为dlg一tl10是什么型号(华为lldtl10什么价钱)

    华为dlg一tl10是什么型号(华为lldtl10什么价钱)

  • 小米9如何截屏快捷键(小米如何截屏长图)

    小米9如何截屏快捷键(小米如何截屏长图)

  • 用什么方法看网速?怎么看网速?(要看网怎么找)

    用什么方法看网速?怎么看网速?(要看网怎么找)

  • MAC本装双系统后没有驱动解决方法(mac笔记本装了双系统后打开苹果系统和原来一样吗)

    MAC本装双系统后没有驱动解决方法(mac笔记本装了双系统后打开苹果系统和原来一样吗)

  • Python中字符串的strip、lstrip和rstrip(python中字符串的长度怎么算)

    Python中字符串的strip、lstrip和rstrip(python中字符串的长度怎么算)

  • 进口缴纳关税
  • 资金账簿印花税减半政策
  • 小规模纳税人每季度超过30万交税
  • 偷税漏税逃税是什么意思
  • 借款人和还款人不相同的情况下逾期还款会影响哪方信用
  • 直接支付和授权支付方式的区别与联系
  • 通信协会费入什么科目
  • 个体小规模一般纳税人税率多少
  • 出口企业免抵税额在增值税申报表填写附表5
  • 划拨房二次出售缴纳出让金吗
  • 收入工程款后什么时候计提印花税
  • 会计凭证如何填写
  • 转让旧房增值税计税依据
  • 本月预缴税额怎么计算
  • 工程用油计入什么科目
  • 商贸公司结转成本应该贴什么凭证
  • 土地使用权摊销的会计分录
  • 预充值发票可以列支吗?
  • 自然灾害造成的存货净损失计入什么科目
  • 工程中材料超耗怎么处理
  • 资产总额是资产负债表中的哪个数
  • 工程结算属于哪个类别
  • 因为担保被起诉怎么办
  • 企业收到外部水电费如何做账?
  • 非金融企业向金融企业借款的利息
  • 诉讼过程中
  • 房地产开发成本测算套表(全过程)
  • 收到商品预付款怎么做分录
  • 2021剑灵什么职业最强
  • 收到科技局研发的短信
  • 代销商品手续费计入什么科目
  • 分公司特征表述正确的是
  • 主营业务收入发票
  • media是什么文件
  • 企业长期借款的利息,有可能计入的科目有( )
  • 马瑙斯市
  • php零基础教程
  • 已提减值准备的固定资产报废怎么填写
  • 生产企业可以抵扣进项税的
  • 其他收益属于利润表吗
  • IntersectionObserver 翻译
  • node-gyp版本
  • 员工报销凭证怎么做
  • 税务局返还手续费
  • 捐款怎么组织
  • 个人所得税申报截止时间
  • 商业收入税收怎么收费
  • sql查看所有数据表
  • 小规模纳税人企业所得税怎么算
  • 债券投资包含哪些
  • 小规模纳税人的条件
  • 固定资产转换为投资性房地产转换日
  • 预缴的增值税及附加税怎么做账
  • 小规模纳税人什么时候用3%什么时候用5%
  • 政府无偿划拨土地如何摊销
  • 可供出售金融资产是指什么
  • 房地产预交税金怎么算
  • 原始凭证的会计分录
  • mysql数据库遇到的故障及分析
  • mysql数据库开发技术
  • mariadb10.1
  • mac忘记mysql初始密码
  • linux搭建socks代理
  • centos7 nis
  • linux终端记录
  • Windows 7(x64)下安装Ubuntu12.4的方法
  • mac os 删除
  • windows远程桌面怎么开启
  • w10 2021年更新
  • linux系统内核的功能
  • 一个简单的灵魂福楼拜
  • html5翻页效果
  • django内置组件
  • 一张监控
  • js 数组去重的四种方法
  • 下列关于javascript的叙述正确的有
  • 安卓模拟器测试
  • 江西省电子税务局登录入口
  • 北京大兴国税局领导班子
  • 提租补贴什么标准发放
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设