云裂变营销网

标题: 腾讯出品小程序自动化测试框架【Minium】系列(五)API ... [打印本页]

作者: 匿名    时间: 2023-3-30 10:54
标题: 腾讯出品小程序自动化测试框架【Minium】系列(五)API ...
写在前面

又有好久没更新小程序自动化测试框架「Minium」系列文章了,主要真的太忙,尽量做到每周一更吧,还请大家能够理解!
上篇文章为大家分享关于Minium中Minium、App模块的API 使用,接下来将为大家继续分享Minium中API的使用。
Page中API的使用

data
当前页面数据, 可直接赋值
  1. Page({
  2.     data: {"testdata1": 1}
  3. })
复制代码
「示例代码如下:」
  1. def test_data(self):
  2.     """
  3.     data演示数据
  4.     :return:
  5.     """
  6.     self.app.navigate_to("/packageComponent/pages/view/view/view")
  7.     page = self.app.get_current_page()
  8.     data = page.data
  9.     self.assertDictEqual({'theme': 'light'}, data)
  10.     data["theme"] = "red"
  11.     page.data = data
  12.     page.data = {"theme1": "light1"}
  13.     page = self.app.get_current_page()
  14.     print(page.data)
  15.     self.assertDictEqual({'theme': 'red', 'theme1': 'light1'}, page.data)
复制代码
element_is_exists()
在当前页面查询元素是否存在
「Parameters:」
名称类型默认值说明
selectorstrNot Nonecss选择器或以/或//开头的xpath
max_timeoutint10超时时间,单位 s
inner_textstrNone通过控件内的文字识别控件
text_containsstrNone通过控件内的文字模糊匹配控件
valuestrNone通过控件的 value 识别控件
xpathstrNone显式指定xpath
「示例代码如下:」
  1. def test_element_is_exists(self):
  2.     """
  3.     验证在当前页面元素是否存在
  4.     :return:
  5.     """
  6.     self.app.navigate_to("/packageComponent/pages/view/view/view")
  7.     is_exists = self.page.element_is_exists("view", inner_text="B", max_timeout=5)
  8.     self.assertEqual(True, is_exists," 在当前页面元素存在")
复制代码
get_element()
获取页面元素
「Parameters:」
名称类型默认值说明
selectorstrNot NoneCSS选择器或以/或//开头的XPath
inner_textstrNone通过控件内的文字识别控件
text_containsstrNone通过控件内的文字模糊匹配控件
valuestrNone通过控件的 value 识别控件
max_timeoutint0超时时间,单位 s
xpathstrNone显式指定XPath, 小程序基础库2.19.5后支持
「PS: selector 仅支持下列语法:」
「Returns:」
实例代码如下:
  1. def test_get_element(self):
  2.     '''
  3.     获取页面当前元素
  4.     :return:
  5.     '''
  6.     self.app.navigate_to("/packageComponent/pages/view/view/view")
  7.     element = self.page.get_element("view",inner_text="A", max_timeout=5)
  8.     print(element.inner_text)
  9.     print(element.inner_wxml)
复制代码
get_elements()
获取一组元素
「PS: 支持的选择器同 get_element()」
「Parameters:」
名称类型默认值说明
selectorstrNot Nonecss选择器或以/或//开头的xpath
max_timeoutint0超时时间,单位 s
inner_textstrNone通过控件内的文字识别控件, xpath暂不支持
text_containsstrNone通过控件内的文字模糊匹配控件, xpath暂不支持
valuestrNone通过控件的 value 识别控件, xpath暂不支持
indexint-1index==-1: 获取所有符合的元素, index>=0: 获取前index+1符合的元素
xpathstrNone显式指定xpath, 小程序基础库2.19.5后支持
「Returns:」
示例代码如下:
  1. def test_get_elements(self):
  2.     '''
  3.     获取一组元素
  4.     :return:
  5.     '''
  6.     element = self.page._get_elements_by_css("[class='kind-list-text']")
  7.     for el in element:
  8.         print(el.inner_text)
复制代码
scroll_to()
滚动到指定高度
「Parameters:」
名称类型默认值说明
scroll_topintNot None高度,单位 px
durationint300滚动动画时长,单位 ms
「Returns:」
示例代码如下:
  1. def test_scroll_to(self):
  2.     '''
  3.     500ms内页面滚动到高度为200px的位置
  4.     :return:
  5.     '''
  6.     page = self.app.navigate_to("/packageComponent/pages/view/scroll-view/scroll-view")
  7.     # 500ms内页面滚动到高度为200px的位置
  8.     page.scroll_to(200, 500)
  9.     time.sleep(1)
  10.     self.assertEqual(page.scroll_y, 200, "scroll success")
复制代码
wait_for()
等待直到指定的条件成立, 条件可以是页面元素, 也可以是自定义的函数或者是需要等待的时间(单位秒)
「Parameters:」
名称类型默认值说明
conditionintstrfunction
max_timeoutint10超时时间,单位 s
「Returns:」
「示例代码如下:」
  1. def test_wait_for(self):
  2.     '''
  3.     5秒内等待页面页面元素出现,返回布尔类型
  4.     :return:
  5.     '''
  6.     self.app.navigate_to("/packageComponent/pages/view/view/view")
  7.     isTrue = self.page.wait_for("[class='flex-item demo-text-2']", max_timeout=5)
  8.     self.assertEqual(True, isTrue, "元素成功加载!")
复制代码
Element中API的使用

get_element()
查找一个元素
「Parameters:」
名称类型默认值说明
selectorstrNot None选择器
inner_textstrNone通过控件内的文字识别控件
text_containsstrNone通过控件内的文字模糊匹配控件
valuestrNone通过控件的 value 识别控件
max_timeoutint0超时时间,单位 s
「PS: selector 支持的语法:」
get_elements()
查找一组元素
「Parameters:」
名称类型默认值说明
selectorstrNot None选择器
max_timeoutint0超时时间,单位 s
inner_textstrNone通过控件内的文字识别控件
text_containsstrNone通过控件内的文字模糊匹配控件
valuestrNone通过控件的 value 识别控件
indexint-1index==-1: 获取所有符合的元素, index>=0: 获取前index+1符合的元素
「PS: 支持的css选择器同 get_element()」
「Returns:」
示例代码如下:
  1. # 一个元素
  2. element = self.page.get_element("selector")
  3. element = element.get_element("selector")
  4. # 一组元素
  5. elements = self.page.get_elements("selector")
  6. elements = element.get_elements("selector")
复制代码
attribute()
获取元素属性
示例代码如下:
  1. def test_attribute(self):
  2.     '''
  3.     获取页面元素属性,返回集合
  4.     :return:
  5.     '''
  6.     self.app.navigate_to("/packageComponent/pages/view/view/view")
  7.     attribute = self.page.get_element("[class='flex-item demo-text-2']").attribute("class")
  8.     print(attribute)
  9.     self.assertEqual(['flex-item demo-text-2'], attribute, "元素成功加载!")
复制代码
tap()
点击元素
click()
在tap()之前检查元素pointer-events样式是否为none 示例代码如下:
  1. # tap
  2. self.page.get_element('view',inner_text='视图容器',max_timeout=2).tap()
  3. # click
  4. self.page.get_element('view',inner_text='视图容器',max_timeout=2).click()
复制代码
long_press()
长按元素
示例代码如下:
  1. # 长按操作
  2. e = page.get_element("#testlongtap") e.long_press()
复制代码
move()
移动元素(触发元素的 touchstart、touchmove、touchend 事件)
「Parameters:」
名称类型默认值说明
x_offsetintNot Nonex 方向上的偏移,往右为正数,往左为负数
y_offsetintNot Noney 方向上的偏移,往下为正数,往上为负数
move_delayint350移动前摇,ms
smoothboolFalse平滑移动
  1. import minium, time
  2. @minium.ddt_class
  3. class TestElement(minium.MiniTest):
  4.     @classmethod
  5.     def setUpClass(cls):
  6.         super(TestElement, cls).setUpClass()
  7.         cls.page = cls.app.redirect_to("/pages/testelement/testelement")
  8.     def _reset_movable_view(self):
  9.         # 重置元素位置
  10.         element = self.page.get_element("movable-view")
  11.         element.move_to(0, 0)
  12.         time.sleep(1)
  13.     def test_move(self):
  14.         """
  15.         测试move方法, movable-view元素横向移动30像素, 纵向移动70像素
  16.         """
  17.         self._reset_movable_view()
  18.         element = self.page.get_element("movable-view")
  19.         rect = element.rect
  20.         element.move(30, 70, 500)  # 横向移动30像素, 纵向移动70像素
  21.         self.assertDictEqual(
  22.             {
  23.                 "left": rect["left"] + 30,
  24.                 "top": rect["top"] + 70,
  25.                 "width": rect["width"],
  26.                 "height": rect["height"],
  27.             },
  28.             element.rect,
  29.         )
  30.     def test_move_smooth(self):
  31.         self._reset_movable_view()
  32.         element = self.page.get_element("movable-view")
  33.         rect = element.rect
  34.         element.move(30, 70, 750, smooth=True)
  35.         time.sleep(2)
  36.         self.assertDictEqual(
  37.             {
  38.                 "left": rect["left"] + 30,
  39.                 "top": rect["top"] + 70,
  40.                 "width": rect["width"],
  41.                 "height": rect["height"],
  42.             },
  43.             element.rect,
  44.         )
复制代码
styles()
获取元素的样式属性
「Parameters:」
名称类型默认值说明
namesstrlistNot None
示例代码如下:
  1. def test_styles(self):
  2.     '''
  3.     获取元素的样式属性
  4.     :return:
  5.     '''
  6.     self.app.navigate_to("/packageComponent/pages/view/view/view")
  7.     attribute = self.page.get_element("[class='flex-item demo-text-2']").styles("color")
  8.     print(attribute)
  9.     self.assertEqual(['rgb(255, 255, 255)'], attribute, "获取元素的样式属性成功!")
复制代码
scroll_to(
元素滚动

基础库v2.23.4版本后支持
「Parameters:」
名称类型默认值说明
topintNonex 轴上滚动的距离
leftintNoney 轴上滚动的距离
示例代码如下:
  1. def test_scroll_to(self):
  2.     '''
  3.     元素滚动
  4.     :return:
  5.     '''
  6.     self.app.navigate_to("/packageComponent/pages/view/view/view")
  7.     x=self.page.scroll_width
  8.     y=self.page.scroll_height
  9.     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:」
名称类型默认值说明
textstrNone输入文本
示例代码如下:
  1. def test_input(self):
  2.     '''
  3.     元素输入操作
  4.     :return:
  5.     '''
  6.     # input框
  7.     self.app.navigate_to("/packageComponent/pages/form/input/input")
  8.     self.page.get_element('[placeholder="最大输入长度为10"]').input("文本内容")
  9.     # textarea输入框
  10.     self.app.navigate_to("/packageComponent/pages/form/textarea/textarea")
  11.     self.page.get_element('.textarea-wrp > textarea').input("文本内容")
复制代码
写在最后

越写越发现自己的盲区越多,关于小程序的一些组件我还是不太明白,待我去研究明白。后续再来更新,尽量做到通俗易懂,还请各位同学能够继续关注、支持我,有问题欢迎文末留言给我,一起交流学习!
作者: exodus_xt    时间: 2023-3-30 10:55
这不是magicApi 吗  [好奇]




欢迎光临 云裂变营销网 (https://www.yunliebian.com/yingxiao/) Powered by Discuz! X3.4