浏览器类自动化测试

浏览器类

提示

需要安装 selenium chrome浏览器或者Firefox浏览器

本地调试下需要安装 chrome浏览器 chromedriver驱动 或者 Firefox geckodriver驱动

window macos ubuntu 使用 浏览器初始化本地环境() 就可以自动检测驱动和自动下载配置

使用 docker 部署远程浏览器 无需安装驱动

部署时建议使用docker部署远程浏览器

安装 selenium

pip install selenium

docker部署远程浏览器

linux

docker run --name chrome -d -p 4444:4444 -p 5900:5900 -v /dev/shm:/dev/shm selenium/standalone-chrome-debug:3.141.59-20210422

window

docker run --name chrome -d -p 4444:4444 -p 5900:5900 selenium/standalone-chrome-debug:3.141.59-20210422

vpc连接远程桌面

VNC Viewer https://www.realvnc.com/en/connect/download/viewer/

127.0.0.1:5900 即可连接至远程桌面

../_images/vnc_viewer.png
代码示例
 1import unittest
 2import warnings
 3
 4from .seleniumUtil import *
 5from pyefun import *
 6
 7
 8class TestseleniumUtil(unittest.TestCase):
 9
10    def test_1(self):
11        pass
12        浏览器初始化本地环境()
13
14        浏览器 = 浏览器类()
15        浏览器.打开chrome()
16
17        浏览器.浏览网页("https://www.baidu.com")
18        print(浏览器.取页面标题())
19        print(浏览器.取名称())
20        # print(浏览器.取页面链接())
21        # print(浏览器.取页面源码())
22        with 时间统计("就绪"):
23            print(浏览器.等待元素显示(5, "s_ipt"))
24
25        延时(1)
26
27        搜索输入框 = 浏览器.取元素从id("kw")
28        百度一下按钮 = 浏览器.取元素从id("su")
29
30        搜索输入框.输入("pyefun")
31        百度一下按钮.点击()
32
33        延时(1)
34
35        with 时间统计("结果就绪"):
36            print(浏览器.等待元素显示(5, "result"))
37
38        搜索结果 = 浏览器.取元素从class_name("result")
39        print("搜索结果多少条", len(搜索结果))
40        for 元素 in 搜索结果:
41            print(元素.取文本())
42            # print(元素.取源码())
43
44        延时(1)
45        浏览器.退出()
46
47    def test_2(self):
48        pass
49
50        warnings.simplefilter('ignore', ResourceWarning) # 屏蔽一堆错误
51
52        浏览器 = 浏览器类()
53        远程浏览器地址 = "http://127.0.0.1:4444/wd/hub"
54        while 浏览器.远程浏览器是否就绪(远程浏览器地址) == False:
55            延时(1)
56            print("浏览器未就绪")
57
58        浏览器.获取远程chrome(远程浏览器地址)
59
60        浏览器.浏览网页("https://www.baidu.com")
61        print(浏览器.取页面标题())
62        print(浏览器.取名称())
63        # print(浏览器.取页面链接())
64        # print(浏览器.取页面源码())
65        with 时间统计("就绪"):
66            print(浏览器.等待元素显示(5, "s_ipt"))
67
68        延时(1)
69
70        搜索输入框 = 浏览器.取元素从id("kw")
71        百度一下按钮 = 浏览器.取元素从id("su")
72
73        搜索输入框.输入("pyefun")
74        百度一下按钮.点击()
75
76        延时(1)
77
78        with 时间统计("结果就绪"):
79            print(浏览器.等待元素显示(5, "result"))
80
81        搜索结果 = 浏览器.取元素从class_name("result")
82        print("搜索结果多少条", len(搜索结果))
83        for 元素 in 搜索结果:
84            print(元素.取文本())
85            # print(元素.取源码())
86
87        延时(1)
88        浏览器.退出()
class pyefun.seleniumUtil.seleniumUtil.浏览器元素操作(浏览器, 元素)[源代码]

基类:object

下拉框全部取消选中()[源代码]
下拉框取全部选中项()[源代码]

返回属于此选择标记的所有选择的选项的列表

下拉框取列表项()[源代码]

返回属于该选择标签的所有选项的列表

下拉框取消选中值(value)[源代码]
下拉框取消选中文本(text)[源代码]
下拉框取消选中索引(id)[源代码]
下拉框取选中项()[源代码]

该选择标记中的第一个选择的选项(或正常选择中的当前选择的选项)

下拉框选择值(value)[源代码]

select标签的value属性的值

下拉框选择文本(text)[源代码]

下拉框的文本值

下拉框选择索引(id)[源代码]

下拉框的索引

取CSS属性值(属性名称)[源代码]

获取CSS属性值

取坐标()[源代码]
取宽度高度()[源代码]
取属性值(属性名称)[源代码]

获取元素属性值,如:value,str,img等属性

取文本()[源代码]

获取文本

取标签名称()[源代码]

返回元素的tagName

取源码()[源代码]

获取文本

取矩形()[源代码]
截图base64()[源代码]

以base64编码字符串的形式获取当前元素的屏幕快照

截图png()[源代码]

以二进制数据获取当前元素的屏幕截图

截图保存(文件名)[源代码]

将当前元素的屏幕快照保存到PNG图像文件中

按下全选()[源代码]
按下剪切()[源代码]
按下复制()[源代码]
按下粘贴()[源代码]
提交表单()[源代码]

查找到表单(from)直接调用submit即可

是否启用()[源代码]

判断元素是否是否启用

是否显示可见()[源代码]

判断元素是否显示

是否选中()[源代码]

判断元素是否选中状态

清空()[源代码]
点击()[源代码]
输入(*args)[源代码]

模拟按键输入,将密钥发送到当前的焦点元素,包括上传文件可以直接发送文件路径,可使用 键盘_* ,如 按键_输入(键盘_CTRL,”a”) 即为全选

键盘指定输入(键值)[源代码]

将键发送到元素,可以使用 键盘_*

鼠标原地偏移(X偏移量, Y偏移量)[源代码]

将鼠标移动到当前鼠标位置的偏移处

鼠标双击()[源代码]
鼠标右键按下()[源代码]
鼠标左键按住()[源代码]

按下鼠标左键在一个元素上

鼠标悬停()[源代码]

执行鼠标悬停操作,一些网页鼠标悬停后才会加载下拉列表

鼠标抬起()[源代码]

释放元素上按住的鼠标键

鼠标拖动(d.标识)[源代码]
鼠标拖动距离(X偏移量, Y偏移量)[源代码]

然后移至目标偏移量并释放鼠标按钮

鼠标移到元素中间()[源代码]

将鼠标移到元素的中间

鼠标移动(X偏移量, Y偏移量)[源代码]

将鼠标移动指定元素的偏移量

pyefun.seleniumUtil.seleniumUtil.浏览器初始化本地环境()[源代码]

提示

自动检测环境 自动下载驱动 如果使用远程浏览器则无需安装驱动 也无需调用本函数

class pyefun.seleniumUtil.seleniumUtil.浏览器类[源代码]

基类:object

下载隐藏特征文件()[源代码]
全屏()[源代码]

等于按了F11 浏览器窗口全屏显示

关闭当前页面()[源代码]

如果只有一个页面标签则会关闭浏览器

切换页面(页面句柄)[源代码]

用于不同窗口的切换

删除所有Cookie()[源代码]

删除所有cookie信息

删除指定Cookie(name)[源代码]

删除cookie信息。“name”是要删除的cookie的名称

刷新页面()[源代码]
前进()[源代码]

控制浏览器前进

取元素从class_name(name)[源代码]

通过类名进行定位,匹配多个则返回对象列表

取元素从css_selector(css)[源代码]

通过css选择器进行定位,匹配多个则返回对象列表

取元素从id(id)[源代码]

通过元素id定位,匹配多个则返回对象列表

通过完整超链接定位,匹配多个则返回对象列表

取元素从name(name)[源代码]

通过元素name定位,匹配多个则返回对象列表

通过部分链接定位,匹配多个则返回对象列表

取元素从tag_name(tagname)[源代码]

通过标签定位,匹配多个则返回对象列表

取元素从xpath(xpath)[源代码]

通过xpath表达式定位,匹配多个则返回对象列表

取名称()[源代码]

查看浏览器的名字

取当前页面句柄()[源代码]

获得当前窗口句柄

取所有Cookie()[源代码]

获得所有cookie信息

取所有页面句柄()[源代码]

返回所有窗口的句柄到当前会话

取指定Cookie(name)[源代码]

返回字典的key为“name”的cookie信息

取窗口坐标()[源代码]

获取当前窗口的坐标

取窗口宽度高度()[源代码]

获取当前窗口的尺寸

取窗口矩形()[源代码]

获取窗口的x,y坐标以及当前窗口的高度和宽度

取页面标题()[源代码]
取页面源码()[源代码]
取页面链接()[源代码]
后退()[源代码]

控制浏览器后退

截图base64()[源代码]

以base64编码的字符串获取当前窗口的屏幕快照

截图png()[源代码]

以二进制数据获取当前窗口的屏幕快照。

截图保存(保存地址)[源代码]

用于截取当前窗口,并把图片保存到本地

打开chrome(驱动路径='chromedriver', 无痕模式=True, 无头模式=False, 隐藏自动化提示=True, 隐藏滚动条=False, 禁止加载图片=False, 禁用插件=False, 禁止Javascript=False, 禁用JAVA=False, 禁止密码保存提示=True, 禁用弹窗=False, 禁止策略化=False, 初始运行=False, 沙盒运行=True, user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', 代理='', 编码='lang=zh_CN.UTF-8', 禁止使用GPU=False, 谷歌浏览器路径='')[源代码]

代理格式:127.0.0.1:8888 带账号密码验证的自行百度修改

提示框发送文本(内容)[源代码]

发送文本至警告框。keysToSend:将文本发送至警告框

提示框取文本()[源代码]

返回 alert/confirm/prompt 中的文字信息

提示框取消()[源代码]

解散现有警告框

提示框同意()[源代码]

接受现有警告框

提示框置焦点()[源代码]

返回 alert/confirm/prompt 中的文字信息

新建页面(URL)[源代码]

通过javascript打开新页面

最大化()[源代码]

浏览器窗口最大化

最小化()[源代码]

浏览器窗口最小化

浏览网页(URL地址, 隐藏Navigator=True)[源代码]

浏览指定网页。本命令为初级对象成员命令。

添加Cookie(cookie_dict)[源代码]

添加cookie。“cookie_dict”指字典对象,必须有name 和value 值

滚动条靠右()[源代码]

通过javascript设置浏览器窗口的滚动条位置

滚动条靠左()[源代码]

通过javascript设置浏览器窗口的滚动条位置

滚动条靠底()[源代码]

通过javascript设置浏览器窗口的滚动条位置

滚动条靠顶()[源代码]

通过javascript设置浏览器窗口的滚动条位置

窗口截图保存(保存地址)[源代码]

将当前窗口的屏幕快照保存到PNG图像文件中

等待元素加载(By元素类型=0, 元素名称='', 等待秒数=60)[源代码]

成功返回真,失败返回假 ,By元素类型参数0是css_selector 谷歌直接复制 1 是id属性 2是name属性, 3 是链接名称 4是xpath属性 5是class_name属性 6是tag_name属性 7,模糊 链接名称

等待元素显示(等待时间=5, className='')[源代码]
置JS超时时间(秒数)[源代码]

设置脚本在执行过程中应等待的时间

置上一层Frame框架()[源代码]
置最外层Frame框架()[源代码]
置浏览器位置(左边=None, 顶边=None, 宽度=None, 高度=None)[源代码]

设置窗口的x,y坐标以及当前窗口的高度和宽度。

置浏览器宽度高度(宽度, 高度)[源代码]
置滚动条位置(横向=0, 纵向=0)[源代码]

通过javascript设置浏览器窗口的滚动条位置

置页面超时时间(秒数)[源代码]

设置等待页面加载完成的时间

获取本地Firefox()[源代码]
获取本地chrome(驱动路径='chromedriver', ChromeOptions=<selenium.webdriver.chrome.options.Options object>)[源代码]
获取远程chrome(server_url='http://127.0.0.1:4444/wd/hub')[源代码]
运行JS(*args)[源代码]

执行js代码,算加密需要自己声明调用的对象

运行JS异步(*args)[源代码]

执行js代码

进入Frame页面(Frame标识)[源代码]

默认可以直接取表单的id 或name属性。如果iframe没有可用的id和name属性可以通过定位获取的标识直接传入

远程浏览器是否就绪(远程浏览器地址='http://127.0.0.1:4444/wd/hub')[源代码]
while 浏览器.远程浏览器是否就绪(远程浏览器地址) == False:

延时(1) print(“浏览器未就绪”)

退出()[源代码]

关闭浏览器

退出Frame页面()[源代码]
隐藏特征()[源代码]
鼠标抬起()[源代码]

释放按住的鼠标键