写在前面
又有很久没更新小法式自动化测试框架「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-id
- class挑选器(可以持续指定多个):.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-nodes
- xpath:可以在真机调试的wxml pannel挑选节点->右键->copy->copy full xpath获得,暂不支持[text()='xxx']这类xpath条件
- 「自界说组件不支持穿透, 需要先get自界说组件, 再利用Element.get_element获得其子节点, 或利用[>>>]毗连自界说组件及厥后代元素, 如发现没法一般定位, 可按照这个方式分辨自界说组件」
- 更多元素定位实例
「Returns:」
实例代码以下:- 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:」
示例代码以下:- 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:」
示例代码以下:- 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:」
「示例代码以下:」- 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_element
get_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:」
示例代码以下:- # 一个元素
- 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 示例代码以下:
- # tap
- self.page.get_element('view',inner_text='视图容器',max_timeout=2).tap()
- # click
- self.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_class
- class 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(
「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:」
示例代码以下:- 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("文本内容")
复制代码 写在最初
越写越发现自己的盲区越多,关于小法式的一些组件我还是不太大白,待我去研讨大白。后续再来更新,只管做到浅显易懂,还请列位同学可以继续关注、支持我,有题目接待文末留言给我,一路交换进修! |