目录
根据知识星球山豆根老师的系列视频学习记录的笔记,来源:
一 安装
Pip install pytest-playwright 安装playwright相关的库
playwright install 安装playwright内置的浏览器:Chromium/firefox/webkit
二 编写第一条case
1.引入页面
deftest_baidu(page:Page):
page:Page 引入一个page类,下面page.就能出来东西了
2.页面等待
page.wait_for_timeout(5_000) 等待5秒
不用sleep,因为有些是异步的,sleep会阻碍线程,可以用wait_for_timeout
3.浏览器在可视化页面执行
一般是在内存跑,想让浏览器在可视化界面跑,在终端,执行:pytest --headed my_search_baidu.py
也可以在工程文件的设置-编辑-其他参数里加上--headed,每次跑就会打开浏览器了
4.web页面元素查找
Ctrl+F后,在元素页面定位到编辑框后,确认关键词是否唯一://input[@name="wd"]
5.debug模式下对表达式求值
debug模式下,在更多里找到对表达式求值,可以实验找到的元素是否正确
先#su看下数量多不多,多的话再重新找
表达式输入:page.locator('//input[@name="wd"]').fill("playwright") 点击求值,返回none时可以看到浏览器已经输入内容了
6.断言
断言:expect,要引入后再调(默认是在5毫秒内完成)
运行到这句报错:expect(page.get_by_text("https://github.com/microsoft/playwright")).to_be_visible()
解决:第一行from的sync_api多写了个a,去掉ok了
(Async api是异步的,可以同时执行多个任务。Sync api是同步的,执行完当前才能进行下一个)
7.pytest命令行参数
在根目录下新建pytest.ini,添加addopts: --headed,就会全局生效
多个参数:addopts:--headed--browser=firefox
查看有哪些参数可以用,在终端用pytest --help的命令,找到playwright的查看
--slowmo=2_000 在每个操作前等待2秒
--video=on 录制视频开启
--output=test_res 指定录制视频和截图文件的目录
8.通过录制的方式自动生成代码
1)在终端执行:playwright codegen 百度一下,你就知道
会调出playwright inspector的框显示代码,和浏览器
调出浏览器后,人在编辑框输入内容,及点击百度一下,就会在playwright inspector里显示对应的代码
2)在终端执行:playwright open 百度一下,你就知道
这种方式开始时未录制,在playwright inspector的框里点击record就开始录制了
录制生成的代码可以选择(lirbary是无任何框架的写法,可以选择pytest后看python代码)
9.url地址配置baseurl(切换测试地址)
在全局配置文件pytest.ini中加上参数:--base-url=http://www.xxx.com
case里只调用后续路径即可
10.点击方法click 使用
可进入click方法里查看有哪些方法再调用。
1)组合按键,click里加参数modifiers配置
page.get_by_text("点击我试试1").click(modifiers=["Control"])
2)给出按钮坐标点击
选中page.get_by_text("点击我试试1"),右键点击表达式求职,再输入.bounding_box(),可查看元素坐标
- `x`:元素左边缘相对于视口的 x 坐标。
- `y`:元素上边缘相对于视口的 y 坐标。
- `width`:元素的宽度。
- `height`:元素的高度。
3)鼠标右键点击
page.get_by_text("点击我试试1").click(button="right")
4)鼠标点击次数
page.get_by_text("点击我试试1").click(click_count=3, delay=1_1000)
这里的delay是鼠标点下去,再松开的时间,不是点击次数的间隔时间
5)force (不用等按钮状态加载好就可以点击)
playwright里提供了auto-waiting的操作,只有如下等的状态都ok了才进行点击操作。
- locator resolves to exactly one element
- element is Visible
- element is Stable, as in not animating or completed animation
- element Receives Events, as in not obscured by other elements
- element is Enabled
当rorce=True时,就是不做等待直接点击
page.get_by_text("点击我试试1").click(force=True)
6)no_wait_after (点击后不等待页面弹窗加载就可以点击)
这个点击会触发弹窗,弹窗是阻断性的,属性=True,click就可以忽略弹窗继续点击
7)trial
auto-waiting的操作要进行等待,可当做等待来使用。设置force时不做等待
page.get_by_text("点击我试试1").click(trial=True)
8)双击
page.get_by_text("点击我试试1").dblclick()
也可以用click_count=2调
总结,click操作的整体流程
1.自动等待,除非有force设置
2.尽量滚动到你可见的页面去操作
3.点击操作
4.等待初始化完成