一、环境搭建
airtest内置python 和selenium库,并且进行封装,所以用来做web 自动化也是非常方便的
操作原理:
airtest web 自动化测试是基于python 语言和selenium 库,通过调用chrome浏览器Devtools Protoco协议,将用户
操作解析成python 脚本
1、准备安装chrome浏览器最(新版本为89版本)
特别注意:airtest 自带chromedriver 是不支持最新的版本chrome 浏览器,需要重新下载chrome 浏览器对应chromedriver 去覆盖airtest里面的版本,否则chrome
会启动不起来
下载地址:http://chromedriver.storage.googleapis.com/index.html
2、启动airtest设置chrome 浏览器的启动文件路径
选项->设置->selenium->chromepath 设置chrome 启动路径->ok
3、在airtest 的窗口中勾选上selenium window
4、新建.air Airtest项目
1) 新建.air 项目
2)点击启动浏览器,导入相应的包和初始化代码
包的导入和初始化代码
5、windows 窗口操作
1)windows窗口连接
1、选择游戏窗口
打开正在运行chrome的窗口,然后对需要的进行框选,则该窗口会展示在窗口界面
框选浏览器
选中后,该chrome 会在设备窗口展示
2、搜索窗口
搜索选择对应的窗口和选择游戏窗口差不多
3、其他
由于Windows应用的底层实现各不相同,有些应用窗口如果使用默认的一键嵌入方法,在嵌入到AirtestIDE里之后会遇到一些问题(例如嵌入后无法用鼠标操作、无法正常嵌入、 嵌入后无法显示图像等)。
针对这些问题,我们提供了一种无嵌入连接的方案,请在AirtestIDE的设置面板中,找到Device
-Windows Embed Backup Method
,勾选后即可使用备用方案来连接窗口。
接下来的连接方式和常规方法一样,点击选定窗口,然后选择待测窗口程序:
二、selenium 常用的操作
1、窗口操作
Web 录制无法模拟的按键操作,可以手动通过代码来完成,比如send keys, keys.ENTER 等等。
2、元素操作
· clear() 清楚元素输入的内容
·send_keys() 模拟键盘按键输入内容
·click() 模拟鼠标对元素的点击
·submit()提交表单 sendkeys(Keys.RETURN)相当于回车登录, 如果需要输入中文,防止编码错误使用sendkeys(u"中文用户名")
3、WebElement接口可以获取常用的值:
·size() 获取元素的尺寸
·text()获取元素的文本
·get_attribute(id) 获取元素的属性值
·location()获取元素的坐标值,先找到要获取的元素,再调用该方法
·page_source()返回页面的源码
·driver.title() 返回页面的标题
·current_url()获取当前页面的url 地址
·is_displayed()设置该元素是否可见
·is_enabled() 判断元素是否被选用
·is_selected()判断元素是否被选中
·tag_name()返回tagname 的元素
4、常见键盘操作
- send_keys(Keys.ENTER) 按下回车键
- send_keys(Keys.TAB) 按下Tab制表键
- send_keys(Keys.SPACE) 按下空格键space
- send_keys(Kyes.ESCAPE) 按下回退键Esc
- sendkeys(Keys.BACKSPACE) 按下删除键BackSpace
- send_keys(Keys.SHIFT) 按下shift键
- send_keys(Keys.CONTROL) 按下Ctrl键
- sendkeys(Keys.ARROWDOWN) 按下鼠标光标向下按键
- send_keys(Keys.CONTROL,'a') 组合键全选Ctrl+A
- send_keys(Keys.CONTROL,'c') 组合键复制Ctrl+C
- send_keys(Keys.CONTROL,'x') 组合键剪切Ctrl+X
- send_keys(Keys.CONTROL,'v') 组合键粘贴Ctrl+V
5、元素定位
·find_element_by_id:确定元素的id名称,直接通过id查找可定位到元素,将返回页面查找到的第一个id元素
·find_element_by_name:与id同样,当确定元素的name名称时,可直接通过name查找定位元素,同样地,selenium将会返回页面查找到的第一个name元素
·find element by xpath:xpath在xml文档中可遍历节点元素和属性,是XML路径语言。xpath同时扩展了通过id/name查找元素的方式,即是说,如果当前元素是id值,xpath会自动识别成("//*[@id="top-menu"]),同时诸多类型如input、button、锚点a、iamge等都可以进行判断,比如 ("//button[@data-role='submit']") ,xpath的形式复杂多变,对于网站页面千变万化的内容而言,xpath能够很好的自适应。
使用相对路径的写法以双斜线开头,绝对路径以单斜线开头从html最顶层开始遍历,如下图:
一般格式为//tagname[a href="https://testerhome.com/attribute">@attribute='value']/路径/路径,如//[@id="J_PmTaskInput"]/div/label , [*]表示包含所有
但不推荐使用绝对路径,因为页面可能经常元素变化,稍有改动可能就会导致定位失败;相对路径定位相对而言位置关系改动的概率更低,更靠谱,这样脚本健壮性适应性更强。
·find_elment_by_css_selector:通过css选择器定位元素,将返回页面第一个匹配到的元素。
常用的选择器:
#表示id,查找id名称为J_Milestone的属性,以及该属性的下一级div
.表示class,查找该id下一级的div的class为os-milestone-check
*表示所有元素,>表示下一级
[]表示attribute,属性名称,[attribute=value] 指某属性值的该属性
:nth-child(n) 表示该父元素的第几个子元素
css selector 相较于xpath的优点就是性能比xpath好,另外就是页面排版布局位置有时候会变,但css selector相对更稳定,名称一般不会经常变更。
·find_element_by_class_name:确定元素的class name,可通过class name直接查找定位元素,将会返回该页面第一个匹配的class属性的元素。
·find_element_by_link_text:这是一个查找超链接非常方便的一个定位方法,当确切知道页面的某个超链接使用的标签文本名称,那可以直接通过findelementbylinktext 查找,将会返回页面第一个匹配的锚点标签。
·find element by partial link text:这也是一个查找超链接的方法,跟findelementbylinktext的区别在于,前者是精确查找,后者是模糊查找,也是相当好用的定位方法;同样地,也是会返回页面第一个匹配的锚点标签。
6、返回多个元素
find elements 查找元素的方法跟find element 是类似的,不同的是find elements会返回一个list列表。
- find_elements_by_name
- find_elements_by_xpath
- find_elements_by_link_text
- find_elements_by_partiallink_text
- find_elements_by_tagname
- find_elements_by_classname
- find_elements_by_cssselector
三、断言
一个完整的测试脚本一定会包含对测试结果是否与预测结果一致的对比,从而判断脚本是否执行成功,Airtest提供了以下断言方法:
- assert_exists
- assert_not_exists
- assert_equal
- assert_not_equal