Airtest之web⾃动化(⼀)
Airtest之web⾃动化(⼀)
[此⽂档有许多涉及到gif动图的地⽅,请全屏观看]
了解Airtest:
简介:
Airtest是由⽹易团队开发的⼀款⾃动化框架,前期运⽤与游戏测试(通过截图识别),后来⼜被运⽤到安卓测试以及web测试。这款⾃动化框架如此强⼤的原因来⾃其团队⾃⼰开发的⼀个图像识别框架,这个框架的祖宗就是⼀种新颖的图形脚本语⾔Sikuli。Sikuli这个框架的原理是这样的,计算机⽤户不需要⼀⾏⾏的去写代码,⽽是⽤屏幕截屏的⽅式,⽤截出来的图形摆列组合成神器的程序,这是Airtest的⼀部分。另外,Airtest也基于poco这个UI控件搜索框架,这个框架也是⽹易⾃家的跨平台UI测试框架,原理类似于appium,通过控件的名称,id之类的来定位⽬标控件,然后调⽤函数⽅法,例如click(),send_keys()之类的⽅法来对⽬标控件进⾏点击或者是操作。
Airtest展⽰:
这个动图是Airtest官⽅⽂档中截取的,细⼼的同学可能已经发现:Airtest实现的脚本是python+selenium,刚刚接触到这款框架的时候,我在想这不就是python+selenium的再封装吗,也没有什么新颖的地⽅。但是细⼼认真的看,才会发现Airtest强⼤的之处...
⼀:Airtest打开浏览器,导⼊必须的类
在配置好chrome浏览器,以及webdriver之后(此操作很简单),点击AirtestIDE中selenium窗左上⽅的像地球⼀样的图标,打开浏览器,然后脚本编辑窗会提⽰你是否导⼊必要的模块,点击yes(已经导⼊了的就点击No)
点击yes后结果:可以看到此处除了导⼊必要的类以外,还实例化了driver:(driver = WebChrome()),并设置了隐性等待时间:(driver.implicitly_wait(20)),这些都是可以编辑的
start_web按钮:实现()操作
selenium xpath定位start_web按钮点击就会⽣成代码,这样类型的按钮还有许多,他们被称为直接⽣成代码按钮:(这⼀类按钮,点击后直接⽣成代码。不需多余操作,不过部分按钮会根据当前浏览器实际情况⽣成不同的参数。 对于Firefox,不会在页⾯上显⽰检视器,⽽是直接⽣成代码)
start_web: 点击该按钮后⽣成当前浏览器所访问的页⾯地址的语句。例: ("github/
AirtestProject")
snapshot: 点击该按钮后⽣成对当前页⾯进⾏截图的语句。例: driver.snapshot()
new_tab: 点击该按钮⽣成⼀条跳转在最新出现的标签页的语句,⼀般⽤在⼀个⽣成新的标签页的语句后⾯。例:driver.switch_to_latest_window()
previous_tab: 点击该按钮⽣成⼀条跳转到当前标签页之前的标签页(⽗标签)的语句。例:driver.switch_to_last_window()
back: 点击该按钮,⽣成后退到上⼀个页⾯的语句。例:driver.back()
forward: 点击该按钮,⽣成前进到下⼀个页⾯的语句。例:driver.forward()
airtest—录制:
如动图所⽰:点击AirtestIDE中selenium窗中右上⾓摄像头的图标之后便可以开始录制,在浏览器中的每⼀步操作都会变为python代码保存在脚本编辑窗中。当然录制也会有些弊端,所以需要酌情使⽤。弊端:元素定位时不能通过id,name这种简单⽅式定位,且xpath过长时可能会出现bug(此处可以⾃⼰尝试⼀下),解决⽅案,所有的元素定位都可以⾃⼰写,也可以通过airtest_touch(图像识别点击)跳过元素定位——后⾯细讲
类似于录制的按钮也还存在许多,这类按钮被称作: Inspect类按钮(这⼀类按钮点击后,不会直接⽣成代码;浏览器会进⼊inspect模式,⽤户可以在浏览器中选择⾃⼰想要操作的元素进⾏点击,然后编辑框内会⽣成代码定位到对应元素,并⽣成对应操作的代码)
Inspect按钮: 点击这个按钮后,选取页⾯元素,会⽣成⼀个定位到该元素的语句。但不会在后⾯⽣成对应的操作代码,⽤户可以⾃⾏补充想要执⾏的selenium语句。例:
driver.find_element_by_xpath("//*[@id=\"navbarContent\"]/ul/li[2]/a") 还⽀持其他查元素的⽅法*
touch按钮:这个按钮,点击后会⽣成点击对应元素的代码。例: driver.find_element_by_xpath("//*[@id=\"navbarContent\"]/ul/li[2]/a").click()
text按钮:点击这个按钮,会⽣成⼀条在指定元素内输⼊⽂本的语句,⽣成代码后,⽤户需⾃⾏在内部填⼊需要输⼊的⽂本。同时,⽤户可以定义在输⼊后执⾏某个键盘事件,如回车。例: driver.find_element_by_xpath("//input[@placeholder='Search']").send_keys("Airtest Project", Keys.ENTER)
assert按钮:assert按钮在点击后,⽣成⼀条assert页⾯元素是否存在的语句。这是⼀条Airtest-Selenium封装的语句,在运⾏时会尝试⽤参数代表的⽅法去寻元素,如果到会返回True,如果没
到会返回False。可⽤于测试脚本是否成功的判读。例: driver.assert_exist("//*[@id=\"js-pjax-container\"]/div/header/div/nav/a[2]", "xpath")
Airtest——Airtest_touch
可以避免复杂的元素定位,以及框架的频繁切换的情况
airtest—assert_template(基于图⽚识别的断⾔)
上⾯的两个按钮是Airtest⾃带的图像识别按钮(这⼀类按钮,点击后进⼊截取图像模式,对当前屏幕进⾏框选区域并截图。)
airtest_touch: 点击该按钮开启截屏模式,对当前屏幕进⾏截屏,可从浏览器中截取区域图⽚。表⽰对截取图⽚进⾏点击。例:
1_airtest_touch
assert_template: 点击该按钮后,对当前屏幕截图。表⽰断⾔当前浏览器存在该图⽚。例
1_assert_template
airtest——测试报告:
Airtest脚本运⾏完成之后会⾃动⽣成测试报告,点击IDE上⽅的LOG页签按钮及可查看,测试报告会将整个脚本的每⼀个步骤记录下来,最新版本的测试报告与动图展⽰的样式还有些不⼀样,但是内容是差不多的:
Airtest其他操作:
Airtest⽣成的代码是纯python代码,所以还有很多其他操作可以直接⽤python+selenium实现
上传⽂件:
1、定位页⾯上⽤于上传⽂件的input元素,其属性应该是type为file(通常为上传⽂件的那个框或按钮)
2、⽤driver.find_定位该元素
3、对该元素进⾏send_Keys()操作,内容为你要上传的⽂件
加载⽤户配置⽂件:有时候需要绕过验证码,或者⽤到浏览器中其他配置时使⽤
1、在浏览器启动代码之前创建ChromeOptions()属性option
2、在option中通过add_argument()⽅法添加属性‘--user--data--dir’
3、在调⽤webChrome⽅法启动浏览器之前,加上chrome_options = option参数加载⽤户配置⽂件
4、访问⽹站,就可以加载本地浏览器已经记录的cookie
代码如下:
option = ChromeOptions()
option.add_argument(‘--user--data--dir = "你的浏览器存储配置⽂件的路径"’)
driver = WebChrome(chrome_options = option)
附:
附⼀个之前为了这⽚介绍⽽写的⼀个⼩脚本:
本来想⽤这个脚本的实现过程来⾃⼰来录制gif讲解的,但是太录制出来的效果不怎么好,也太耗时了,于是就放弃了。
总结⼀波Airtest的亮点:
1、能够快速定位元素,⼀键实现许多我们常⽤的动作(点击,输⼊,前进,后退,截图...)
2、将selenium关于元素的断⾔实现了封装
3、可以录制脚本,降低了⾃动化的难度
4、⼀键切换窗⼝,少去了通过句柄切换窗⼝的烦恼
5、基于图⽚识别的点击和断⾔,避免了元素难定位,iframe切换频繁的问题
整个脚本实现过程就在2分钟左右,⽤Airtest来辅助写⾃动化脚本的效率真的很⾼,但是现在的唯⼀的问题是不到整套可以预期配合的⾃动化框架,也难以实现PO设计理念,测试报告对于整个项⽬来说也是相当冗余的。
但是Airtest录制的脚本是可以在其他python环境中运⾏,需要我们安装其依赖的两个库:’atrtest‘以及’poco‘,这样的话,上⾯所讲的缺点还是有办法解决的(下⼀贴再讲)。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。