小程序自动化测试神器(五)API详解(下)
写在前面
又有好久没更新小程序自动化测试框架Minium系列文章了,主要真的太忙,尽量做到每周一更吧,还请大家能够理解!
上篇文章为大家分享关于Minium中Minium、App模块的API使用,接下来将为大家继续分享Minium中API的使用。Page中API的使用data
当前页面数据,可直接赋值
Page({data:{testdata1:1}})
示例代码如下:deftestdata(self):data演示数据:return:self。app。navigateto(packageComponentpagesviewviewview)pageself。app。getcurrentpage()datapage。dataself。assertDictEqual({theme:light},data)data〔theme〕redpage。datadatapage。data{theme1:light1}pageself。app。getcurrentpage()print(page。data)self。assertDictEqual({theme:red,theme1:light1},page。data)elementisexists()
在当前页面查询元素是否存在
Parameters:
名称类型默认值说明selectorstrNotNonecss选择器或以或开头的xpathmaxtimeoutint10超时时间,单位sinnertextstrNone通过控件内的文字识别控件textcontainsstrNone通过控件内的文字模糊匹配控件valuestrNone通过控件的value识别控件xpathstrNone显式指定xpath
示例代码如下:deftestelementisexists(self):验证在当前页面元素是否存在:return:self。app。navigateto(packageComponentpagesviewviewview)isexistsself。page。elementisexists(view,innertextB,maxtimeout5)self。assertEqual(True,isexists,在当前页面元素存在)getelement()
获取页面元素
Parameters:
名称类型默认值说明selectorstrNotNoneCSS选择器或以或开头的XPathinnertextstrNone通过控件内的文字识别控件textcontainsstrNone通过控件内的文字模糊匹配控件valuestrNone通过控件的value识别控件maxtimeoutint0超时时间,单位sxpathstrNone显式指定XPath,小程序基础库2。19。5后支持
PS:selector仅支持下列语法:ID选择器:theidclass选择器(可以连续指定多个):。aclass。anotherclass标签选择器:view子元素选择器:。theparent。thechild后代选择器:。theancestor。thedescendant跨自定义组件的后代选择器:customelement1。customelement2。thedescendant
customelement1和。customelement2必须是自定义组件标签或者能获取到自定义组件的选择器多选择器的并集:anode,。someothernodesxpath:可以在真机调试的wxmlpannel选择节点右键copycopyfullxpath获取,暂不支持〔text()xxx〕这类xpath条件自定义组件不支持穿透,需要先get自定义组件,再使用Element。getelement获取其子节点,或使用〔〕连接自定义组件及其后代元素,如发现无法正常定位,可根据这个方法辨别自定义组件更多元素定位实例
Returns:Element
实例代码如下:deftestgetelement(self):获取页面当前元素:return:self。app。navigateto(packageComponentpagesviewviewview)elementself。page。getelement(view,innertextA,maxtimeout5)print(element。innertext)print(element。innerwxml)getelements()
获取一组元素
PS:支持的选择器同getelement()
Parameters:
名称类型默认值说明selectorstrNotNonecss选择器或以或开头的xpathmaxtimeoutint0超时时间,单位sinnertextstrNone通过控件内的文字识别控件,xpath暂不支持textcontainsstrNone通过控件内的文字模糊匹配控件,xpath暂不支持valuestrNone通过控件的value识别控件,xpath暂不支持indexint1index1:获取所有符合的元素,index0:获取前index1符合的元素xpathstrNone显式指定xpath,小程序基础库2。19。5后支持
Returns:List〔Element〕
示例代码如下:deftestgetelements(self):获取一组元素:return:elementself。page。getelementsbycss(〔classkindlisttext〕)forelinelement:print(el。innertext)scrollto()
滚动到指定高度
Parameters:
名称类型默认值说明scrolltopintNotNone高度,单位pxdurationint300滚动动画时长,单位ms
Returns:None
示例代码如下:deftestscrollto(self):500ms内页面滚动到高度为200px的位置:return:pageself。app。navigateto(packageComponentpagesviewscrollviewscrollview)500ms内页面滚动到高度为200px的位置page。scrollto(200,500)time。sleep(1)self。assertEqual(page。scrolly,200,scrollsuccess)waitfor()
等待直到指定的条件成立,条件可以是页面元素,也可以是自定义的函数或者是需要等待的时间(单位秒)
Parameters:
名称类型默认值说明conditionintstrfunctionmaxtimeoutint10超时时间,单位s
Returns:bool
示例代码如下:deftestwaitfor(self):5秒内等待页面页面元素出现,返回布尔类型:return:self。app。navigateto(packageComponentpagesviewviewview)isTrueself。page。waitfor(〔classflexitemdemotext2〕,maxtimeout5)self。assertEqual(True,isTrue,元素成功加载!)Element中API的使用getelement()
查找一个元素
Parameters:
名称类型默认值说明selectorstrNotNone选择器innertextstrNone通过控件内的文字识别控件textcontainsstrNone通过控件内的文字模糊匹配控件valuestrNone通过控件的value识别控件maxtimeoutint0超时时间,单位s
PS:selector支持的语法:除xpath外,同page。getelementgetelements()
查找一组元素
Parameters:
名称类型默认值说明selectorstrNotNone选择器maxtimeoutint0超时时间,单位sinnertextstrNone通过控件内的文字识别控件textcontainsstrNone通过控件内的文字模糊匹配控件valuestrNone通过控件的value识别控件indexint1index1:获取所有符合的元素,index0:获取前index1符合的元素
PS:支持的css选择器同getelement()
Returns:List〔Element〕
示例代码如下:一个元素elementself。page。getelement(selector)elementelement。getelement(selector)一组元素elementsself。page。getelements(selector)elementselement。getelements(selector)attribute()
获取元素属性
示例代码如下:deftestattribute(self):获取页面元素属性,返回集合:return:self。app。navigateto(packageComponentpagesviewviewview)attributeself。page。getelement(〔classflexitemdemotext2〕)。attribute(class)print(attribute)self。assertEqual(〔flexitemdemotext2〕,attribute,元素成功加载!)tap()
点击元素
click()
在tap()之前检查元素pointerevents样式是否为none示例代码如下:
tapself。page。getelement(view,innertext视图容器,maxtimeout2)。tap()clickself。page。getelement(view,innertext视图容器,maxtimeout2)。click()longpress()
长按元素
示例代码如下:长按操作epage。getelement(testlongtap)e。longpress()move()
移动元素(触发元素的touchstart、touchmove、touchend事件)
Parameters:
名称类型默认值说明xoffsetintNotNonex方向上的偏移,往右为正数,往左为负数yoffsetintNotNoney方向上的偏移,往下为正数,往上为负数movedelayint350移动前摇,mssmoothboolFalse平滑移动importminium,timeminium。ddtclassclassTestElement(minium。MiniTest):classmethoddefsetUpClass(cls):super(TestElement,cls)。setUpClass()cls。pagecls。app。redirectto(pagestestelementtestelement)defresetmovableview(self):重置元素位置elementself。page。getelement(movableview)element。moveto(0,0)time。sleep(1)deftestmove(self):测试move方法,movableview元素横向移动30像素,纵向移动70像素self。resetmovableview()elementself。page。getelement(movableview)rectelement。rectelement。move(30,70,500)横向移动30像素,纵向移动70像素self。assertDictEqual({left:rect〔left〕30,top:rect〔top〕70,width:rect〔width〕,height:rect〔height〕,},element。rect,)deftestmovesmooth(self):self。resetmovableview()elementself。page。getelement(movableview)rectelement。rectelement。move(30,70,750,smoothTrue)time。sleep(2)self。assertDictEqual({left:rect〔left〕30,top:rect〔top〕70,width:rect〔width〕,height:rect〔height〕,},element。rect,)styles()
获取元素的样式属性
Parameters:
名称类型默认值说明namesstrlistNotNone
示例代码如下:defteststyles(self):获取元素的样式属性:return:self。app。navigateto(packageComponentpagesviewviewview)attributeself。page。getelement(〔classflexitemdemotext2〕)。styles(color)print(attribute)self。assertEqual(〔rgb(255,255,255)〕,attribute,获取元素的样式属性成功!)scrollto(
元素滚动
基础库v2。23。4版本后支持
Parameters:
名称类型默认值说明topintNonex轴上滚动的距离leftintNoney轴上滚动的距离
示例代码如下:deftestscrollto(self):元素滚动:return:self。app。navigateto(packageComponentpagesviewviewview)xself。page。scrollwidthyself。page。scrollheightself。page。getelement(view,innertextB)。scrollto(x2,y2)input()
inputtextarea组件输入文字
IDE上不会改变element上的value属性,建议使用变化的Page。datahook绑定的input方法判断是否生效
Parameters:
名称类型默认值说明textstrNone输入文本
示例代码如下:deftestinput(self):元素输入操作:return:input框self。app。navigateto(packageComponentpagesforminputinput)self。page。getelement(〔placeholder最大输入长度为10〕)。input(文本内容)textarea输入框self。app。navigateto(packageComponentpagesformtextareatextarea)self。page。getelement(。textareawrptextarea)。input(文本内容)写在最后
越写越发现自己的盲区越多,关于小程序的一些组件我还是不太明白,待我去研究明白。后续再来更新,尽量做到通俗易懂,还请各位同学能够继续关注、支持我,有问题欢迎文末留言给我,一起交流学习!