又有良久没更新小法式主动化测试框架「Minium」系列文章了,次要实的太忙,尽量做到每周一更吧,还请各人可以理解!
上篇文章为各人分享关于Minium中Minium、App模块的API 利用,接下来将为各人继续分享Minium中API的利用。
Page中API的利用data❝
当前页面数据, 可间接赋值
❞
Page({ data: {"testdata1": 1}})「示例代码如下:」
def test_data(self): """ data演示数据 :return: """ self.app.navigate_to("/packageComponent/pages/view/view/view") page = self.app.get_current_page() data = page.data self.assertDictEqual({'theme': 'light'}, data) data["theme"] = "red" page.data = data page.data = {"theme1": "light1"} page = self.app.get_current_page() PRint(page.data) self.assertDictEqual({'theme': 'red', 'theme1': 'light1'}, page.data)element_is_exists()❝
在当前页面查询元素能否存在
❞
「Parameters:」
名称 类型 默认值 申明 selector str Not None css选择器或以/或//开头的xpath max_timeout int 10 超不时间,单元 s inner_text str None 通过控件内的文字识别控件 text_contains str None 通过控件内的文字模糊婚配控件 value str None 通过控件的 value 识别控件 xpath str None 显式指定xpath
「示例代码如下:」
def test_element_is_exists(self): """ 验证在当前页面元素能否存在 :return: """ self.app.navigate_to("/packageComponent/pages/view/view/view") is_exists = self.page.element_is_exists("view", inner_text="B", max_timeout=5) self.assertEqual(True, is_exists," 在当前页面元素存在")get_element()❝
获取页面元素
❞
「Parameters:」
名称 类型 默认值 申明 selector str Not None CSS选择器或以/或//开头的XPath inner_text str None 通过控件内的文字识别控件 text_contains str None 通过控件内的文字模糊婚配控件 value str None 通过控件的 value 识别控件 max_timeout int 0 超不时间,单元 s xpath str None 显式指定XPath, 小法式根底库2.19.5后撑持
「PS: selector 仅撑持下列语法:」
ID选择器:#the-iDClass选择器(能够持续指定多个):.a-class.another-class标签选择器:view子元素选择器:.the-parent > .the-child后代选择器:.the-ancestor .the-descendant跨自定义组件的后代选择器:custom-element1>>>.custom-element2>>>.the-descendant「custom-element1 和 .custom-element2必需是自定义组件标签或者能获取到自定义组件的选择器」多选择器的并集:#a-node, .some-other-nodesxpath:能够在实机调试的wxml pannel选择节点->右键->copy->copy full xpath获取,暂不撑持[text()='xxx']那类xpath前提「自定义组件不撑持穿透, 需要先get自定义组件, 再利用Element.get_element获取其子节点, 或利用[>>>]毗连自定义组件及其后代元素, 如发现无法一般定位, 可按照那个办法分辨自定义组件」更多元素定位实例「Returns:」
Element实例代码如下:
def test_get_element(self): ''' 获取页面当前元素 :return: ''' self.app.navigate_to("/packageComponent/pages/view/view/view") element = self.page.get_element("view",inner_text="A", max_timeout=5) print(element.inner_text) print(element.inner_wxml)get_elements()❝
获取一组元素
❞
「PS: 撑持的选择器同 get_element()」
「Parameters:」
名称 类型 默认值 申明 selector str Not None css选择器或以/或//开头的xpath max_timeout int 0 超不时间,单元 s inner_text str None 通过控件内的文字识别控件, xpath暂不撑持 text_contains str None 通过控件内的文字模糊婚配控件, xpath暂不撑持 value str None 通过控件的 value 识别控件, xpath暂不撑持 index int -1 index==-1: 获取所有契合的元素, index>=0: 获取前index+1契合的元素 xpath str None 显式指定xpath, 小法式根底库2.19.5后撑持
「Returns:」
List[Element]示例代码如下:
def test_get_elements(self): ''' 获取一组元素 :return: ''' element = self.page._get_elements_by_css("[class='kind-list-text']") for el in element: print(el.inner_text)scroll_to()❝
滚动到指定高度
❞
「Parameters:」
名称 类型 默认值 申明 scroll_top int Not None 高度,单元 px duration int 300 滚动动画时长,单元 ms
「Returns:」
None示例代码如下:
def test_scroll_to(self): ''' 500ms内页面滚动到高度为200px的位置 :return: ''' page = self.app.navigate_to("/packageComponent/pages/view/scroll-view/scroll-view") # 500ms内页面滚动到高度为200px的位置 page.scroll_to(200, 500) time.sleep(1) self.assertEqual(page.scroll_y, 200, "scroll success")wait_for()❝
期待曲到指定的前提成立, 前提能够是页面元素, 也能够是自定义的函数或者是需要期待的时间(单元秒)
❞
「Parameters:」
名称 类型 默认值 申明 condition int str function max_timeout int 10 超不时间,单元 s
「Returns:」
bool「示例代码如下:」
def test_wait_for(self): ''' 5秒内期待页面页面元素呈现,返回布尔类型 :return: ''' self.app.navigate_to("/packageComponent/pages/view/view/view") isTrue = self.page.wait_for("[class='flex-item demo-text-2']", max_timeout=5) self.assertEqual(True, isTrue, "元素胜利加载!")Element中API的利用get_element()❝
查找一个元素
❞
「Parameters:」
名称 类型 默认值 申明 selector str Not None 选择器 inner_text str None 通过控件内的文字识别控件 text_contains str None 通过控件内的文字模糊婚配控件 value str None 通过控件的 value 识别控件 max_timeout int 0 超不时间,单元 s
「PS: selector 撑持的语法:」
除xpath外,同page.get_elementget_elements()❝
查找一组元素
❞
「Parameters:」
名称 类型 默认值 申明 selector str Not None 选择器 max_timeout int 0 超不时间,单元 s inner_text str None 通过控件内的文字识别控件 text_contains str None 通过控件内的文字模糊婚配控件 value str None 通过控件的 value 识别控件 index int -1 index==-1: 获取所有契合的元素, index>=0: 获取前index+1契合的元素
「PS: 撑持的css选择器同 get_element()」
「Returns:」
List[Element]示例代码如下:
# 一个元素element = self.page.get_element("selector")element = element.get_element("selector")# 一组元素elements = self.page.get_elements("selector")elements = element.get_elements("selector")attribute()❝
获取元素属性
❞
示例代码如下:
def test_attribute(self): ''' 获取页面元素属性,返回集合 :return: ''' self.app.navigate_to("/packageComponent/pages/view/view/view") attribute = self.page.get_element("[class='flex-item demo-text-2']").attribute("class") print(attribute) self.assertEqual(['flex-item demo-text-2'], attribute, "元素胜利加载!")tap()❝
点击元素
❞
click()❝
在tap()之前查抄元素pointer-events款式能否为none 示例代码如下:
❞
# tapself.page.get_element('view',inner_text='视图容器',max_timeout=2).tap()# clickself.page.get_element('view',inner_text='视图容器',max_timeout=2).click()long_press()❝
长按元素
❞
示例代码如下:
# 长按操做e = page.get_element("#testlongtap") e.long_press() move()❝
挪动元素(触发元素的 touchstart、touchmove、touchend 事务)
❞
「Parameters:」
名称 类型 默认值 申明 x_offset int Not None x 标的目的上的偏移,往右为正数,往左为负数 y_offset int Not None y 标的目的上的偏移,往下为正数,往上为负数 move_delay int 350 挪动前摇,ms smooth bool False 光滑挪动
import minium, time@minium.ddt_classclass TestElement(minium.MiniTest): @classmethod def setUpClass(cls): suPEr(TestElement, cls).setUpClass() cls.page = cls.app.redirect_to("/pages/testelement/testelement") def _reset_movable_view(self): # 重置元素位置 element = self.page.get_element("movable-view") element.move_to(0, 0) time.sleep(1) def test_move(self): """ 测试move办法, movable-view元素横向挪动30像素, 纵向挪动70像素 """ self._reset_movable_view() element = self.page.get_element("movable-view") rect = element.rect element.move(30, 70, 500) # 横向挪动30像素, 纵向挪动70像素 self.assertDictEqual( { "left": rect["left"] + 30, "top": rect["top"] + 70, "width": rect["width"], "height": rect["height"], }, element.rect, ) def test_move_smooth(self): self._reset_movable_view() element = self.page.get_element("movable-view") rect = element.rect element.move(30, 70, 750, smooth=True) time.sleep(2) self.assertDictEqual( { "left": rect["left"] + 30, "top": rect["top"] + 70, "width": rect["width"], "height": rect["height"], }, element.rect, )styles()❝
获取元素的款式属性
❞
「Parameters:」
名称 类型 默认值 申明 names str list Not None
示例代码如下:
def test_styles(self): ''' 获取元素的款式属性 :return: ''' self.app.navigate_to("/packageComponent/pages/view/view/view") attribute = self.page.get_element("[class='flex-item demo-text-2']").styles("color") print(attribute) self.assertEqual(['rgb(255, 255, 255)'], attribute, "获取元素的款式属性胜利!")scroll_to(❝
元素滚动
❞
❝
根底库v2.23.4版本后撑持
❞
「Parameters:」
名称 类型 默认值 申明 top int None x 轴上滚动的间隔 left int None y 轴上滚动的间隔
示例代码如下:
def test_scroll_to(self): ''' 元素滚动 :return: ''' self.app.navigate_to("/packageComponent/pages/view/view/view") x=self.page.scroll_width y=self.page.scroll_height self.page.get_element('view',inner_text='B').scroll_to(x/2,y/2)input()❝
input & textarea 组件输入文字
❞
❝
IDE上不会改动element上的value属性,建议利用变革的Page.data/hook绑定的input办法判断能否生效
❞
「Parameters:」
名称 类型 默认值 申明 text str None 输入文本
示例代码如下:
def test_input(self): ''' 元素输入操做 :return: ''' # input框 self.app.navigate_to("/packageComponent/pages/form/input/input") self.page.get_element('[placeholder="更大输入长度为10"]').input("文本内容") # textarea输入框 self.app.navigate_to("/packageComponent/pages/form/textarea/textarea") self.page.get_element('.textarea-wrp > textarea').input("文本内容")写在最初越写越发现本身的盲区越多,关于小法式的一些组件我仍是不太大白,待我去研究大白。后续再来更新,尽量做到通俗易懂,还请列位同窗可以继续存眷、撑持我,有问题欢送文末留言给我,一路交换进修!
发表评论