上节课最后,我终于下载完了playwright的综合驱动。据说,之后再也不用因为用不同的浏览器而去找不同的驱动,还要区分各种版本号闹心了。受到了一致好评....
上次第一节后收到了超多小伙伴的追更和建议,所以本教程作为弥补市面上其他的流水式官方教程,决定采用测试实践的方案来教学,也就是真实的去执行一些自动化,写自动化脚本,不断的测试出各种知识点(猜测-测试-总结-复测确认)的方法,再结合官网的词典教程,大家不但学起来轻松生动,还印象深刻。
之前我又去了解了一下playwright,发现了一些新的有用的信息:
- playwright并非某个小作坊的产品,其实是微软推出的新一代轻量级自动化框架,所以这产品的后续更新,发展和生态建设可以得到保障,大家可以放心无脑学。
- 从描述上看,playwright对python相当友好,甚至可以说专为python量身定做,而它本身也完全符合python的低门槛快速简单的风格。学python的小伙伴发财了哦~
- playwright支持录制操作,相比较selenium的录制,这个录制的更靠谱和更简单更稳定等等,但具体效果如何还需要我亲自测试才知道,别看广告看疗效嘛。不过,录制自动化这个领域因为各种垃圾的效果,一直被大佬们所歧视,希望playwright可以一举改掉这个现象。
接下来,我们要体验一下具体的录制效果。测试网站,我的一个小小的宣传页面:woqurefan.cn
按照官网教程为:在cmd或者终端输入命令启动。
python3 -m playwright codegen -o 'test_526.py' -b chromium http://woqurefan.cn/
其中python3 -m playwright codegen为录制命令的固定写法。
-o '文件名' 意思是保存代码成某个文件。
-b 驱动 网址 意思是用什么浏览器打开哪个页面,可以不写网址,自己手动输入也会被记载下来。
执行后效果为,自动打开了一个谷歌浏览器并且进入了网站页面,还同时弹出了一个代码编辑页:
并且页面自动进入了调试模式,鼠标悬浮任何元素,都可以直接显示该元素的获取定位代码。
当我点击了一下这个按钮之后,神奇的一幕发生了,这个生成的代码编辑框中居然自动添加了这一句代码:
然后我试着又点击了一下面试题进入按钮,不出意外,这句代码又自动生成了:
然后我再随便点击了一道面试题:
可以看到再次生成代码,不过这次的定位是用text文案。关于为什么会使用text文案,而非具体name等属性,请等待咱接下来的文章中会进行具体测试。
我关闭了这个页面后,可以看到刚刚的代码已经保存好了:
用pycharm打开后,我们来好好研究下这个demo脚本。
1行是导入,从这个叫sync_api的模块导入。这个名称读起来是同步接口的意思。这么想来,那么palywright应该还支持异步模式才对。看来我们之后可以再去研究下异步模式。
接着是一个def run函数 和一个主程序代码块with。with代码块只负责去调用run函数。后续如果有什么一开始要进行设置的代码可以尝试放在这个with代码块中,比如并发去调用run函数启动多个浏览器并发测试。
run函数内部,则先定义了一个变量broswer,目的应该是定义驱动和有头模式。这么看来,playwright应该还支持无头模式,并且这行代码可以修改启动不同的驱动。那我们后续如果要做多浏览器并发兼容性测试的时候,就可以从browswer这行着手(大家要经常这样举一反三的去学习和思考哦)
6行是一个context变量声明,并且是依靠browser的某个函数来实现。那么我可以认定context就是browser的一个实例。就好像browser是一张图纸,而context就是按照这个图纸做的一台实际的产品。之后我们要测试一下,如果多个声明的话,那是启动多个浏览器窗口,还是在一个浏览器下的多个标签页。
7行是page变量声明,依靠context的创建,看英文名字起来是新建了一个页面。并且下面的代码都是page.xxxxx ,看起来很像selenium的driver,但此刻我有一些疑惑,driver是可以控制多个页面多个标签页的,而这个page听起来就好像只能在当前标签页进行操作。这点需要我们后续的测试才能知晓。就不提前公布答案了,不然印象不深刻。
8行是页面的跳转,goto函数。
9-11行是具体的定位和操作,形式和selenium如出一辙。目前学到的两个方法:get_by_role("tag名",name="") get_by_text("具体文案") 操作上学到了一种:.click() 单击。
12行是关闭页面
15行是关闭context实例
16行是关闭浏览器实例
以上三个关闭看起来比较麻烦。我们实际工作中要根据需要来选择关闭到何种程度,在pytest或者unitest中,也要把这几个关闭放在恰当的位置来让多个用例进行正常执行。尤其是在并发串联混合异步的模式下使用,这三个关闭更应该注意,后面我们会单独写一篇文章来测试三个关闭的具体效果和原理。
好,今天的课程到此为止,各位不用自己去尝试了,看这一个教程足够了。