【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()
相关推荐
张张123y几秒前
后端第九课:部署上线(把你的 FastAPI 后端真正跑起来给别人用)
python·docker·部署·fastapi
云勤通6 分钟前
智慧后勤系统哪家定制能力强
大数据·python
赵大仁13 分钟前
官网性能优化实战:LCP 3.2s → 2.1s、CLS 0.107 → 0,以及被我推翻的 6 个判断
前端·性能优化·cls·lcp·core web vitals
xiancai_xianyu16 分钟前
Text2SQL落地生产库前,SQL要过哪三道闸
前端·数据库·sql·sql注入·text2sql·ai agent开发·企业级ai框架
想七想八不如1140825 分钟前
元学习简单入门
人工智能·pytorch·python·深度学习·学习·机器学习
小羊没烦恼!30 分钟前
T-SQL查询进阶--理解SQL SERVER中的分区表
服务器·开发语言·前端·javascript·html
Zucker n32 分钟前
一款适合研究生科研工作安排的日历
linux·数据库·python
史瓦辛格43 分钟前
给 DeepSeek Harness 写费用插件:把「这次会话花了多少钱」算准
前端·deepseek
星光不问赶路人1 小时前
Vue 3 + TypeScript 中 enum 的使用实践
前端·vue.js
鸥梨菌Honevid1 小时前
UVM 中 REQ 和 RSP 类型详解:从通信模型到 item_done 与 put_response
java·前端·servlet