【python】selenium实现web自动化测试

1.selenium介绍

selenium主要是用来做web自动化的框架,是一套操控浏览器的自动化工具 。

它提供了python能用的程序库,让代码代替人去打开浏览器进行一系列的操作。

2.selenium驱动安装

  • 终端通过pip install selenium 安装selenium
  • 你要测哪个浏览器就去确定浏览器版本
  • 下载对应版本的webdriver
  • 将下载好的驱动文件放在python目录下(省去配置环境的操作)
  • 不知道python在哪去终端写:where python

3.实际基础操作

  • 在python中操作,先导入包

  • 再初始化webdriver

  • 然后访问url

4.八大定位方法

定位方法就是我们实际拿到网页进行访问时,如何定位到我们目标的操作地点,比如文本框,链接按钮等

我们基本的语句是这样:

find_element,后面的XX是接下来讲的定位方法,在后面就是定位的具体内容

想获得测试网页的定位具体内容,也就是前端的实现代码中的具体内容

可以打开浏览器自带的开发者工具 ,或者直接右键目标测试模块点击检 查直接找到对应代码

①根据id去定位元素

python 复制代码
find_element(By.ID, "element_id")

id是具有唯一性的,很好用

但有些元素是没有id的,不通用,可以优先考虑

②根据name去定位元素

python 复制代码
find_element(By.NAME, "element_name")

name也好用,但名字不具有唯一性,可以多次出现

得保证name值唯一,否则定位失败

③根据class_name去定位元素

python 复制代码
find_element(By.CLASS_NAME, "class_name")

class是元素的类名,更不具有唯一性

不推荐

④根据tag_name去定位元素

python 复制代码
find_element(By.TAG_NAME, "Tag Name")

这个是通过标签名称(html tag)定位

更不稳定,不推荐

python 复制代码
find_element(By.LINK_TEXT, "Link Text")

这个是通过超链接的文字来定位,只使用在链接位置处

只能用精准的匹配,也就是得告诉它目标链接处的全名(对应名字,比如'分类'等),不支持模糊查找

好用,推荐

⑥根据partialLinktext去定位元素

python 复制代码
find_element(By.PARTIAL_LINK_TEXT, "LinkText")

这个和link_text类似,但这个可以进行模糊查找

⑦根据CSS去定位元素

python 复制代码
find_element(By.CSS_SELECTOR,"css_selector")

CSS定位是通过元素的CSS属性进行定位,

定位速度快

⑧根据去xpath定位元素

python 复制代码
find_element(By.XPATH, "xpath")

xpath是根据路径来定位的,分绝对路径和相对路径

这个就相当于把你要测的点直接盒了,照着地址找到目标测试点

挺好用

5.操作元素信息

这里我们说的操作就是在找到find_element之后要测试什么操作,比如点击某个地方,输入文字等等

①输入信息

python 复制代码
send_keys("输入信息")
clear()清除原来的信息

②展示文本内容

text展示

可以对打印的数据进行断言来判断是否和预期的一致

③点击页面

左键点击:click()

右键点击:context_click()

④等待

因为有时我们一个操作完成可能会跳转新页面或者加载新内容,中间需要时间,而我们单纯写代码它只会依次执行,不会停下来,我们有两种方式做到等待

  • 直接等待 time.sleep(几秒)
    这种作用是暂停整个程序,单纯的等待时间,适合我们去本地调试观察结果
  • 显式等待 WebDriverWait + until(EC)
    定义:专门盯着某一个元素,直到它满足条件(能点击/出现),最多等N秒,没满足就报错。
    我们针对单个元素进行自定义,会设置一个有限时间,在期间内完成操作就结束等待,如果没有完成操作到时间就报错,结束运行,很适合我们的测试。

    这个显式等待需要先进行导包:
python 复制代码
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
python 复制代码
wait = WebDriverWait(driver,10)#创建一个等待对象driver,最大等待时间10秒

#这个wait要搭配until使用(直到满足条件为止)
res = wait.until(EC.element_to_be_clickable((By.LINK_TEXT,'网络游戏')))
#一旦找到就绪元素,就把这个网页控件赋值给这个res
#后面就可以对这个找到的控件执行操作了👇
res.click()#点击操作

完整一句话流程

1.打开浏览器打开网页

2.创建等待工具:最多等 10 秒

3.循环检测:这个搜索框能不能点击

4.一旦可以点击 → 停止等待,拿到这个输入框

5.输入文字

6.如果 10 秒还不行 → 程序报错停止

⑤关闭浏览器

.close():关当前标签页 ,局部关闭

.quit():关掉整个浏览器 + 驱动程序,完全结束

使用建议

  • 脚本运行完毕、程序收尾:统一用 driver.quit(),防止后台残留驱动占用资源
  • 多窗口切换,只关闭其中一个页面:用 driver.close()
相关推荐
子兮曰4 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰4 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
默_笙4 天前
🍙 给每个请求过安检:FastAPI 是怎么把校验写进类型注解的
python
前端小万4 天前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
爱勇宝4 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
qq_426003964 天前
启动playwright录制codegen生成自动化测试脚本
python·自动化
虎头金猫4 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
三十而立洋4 天前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
长沙三为智能科技4 天前
家政小程序开发从0到上线:五阶段交付流程与验收清单
python
伞伞悦读4 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python