前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >腾讯出品小程序自动化测试框架【Minium】系列(五)API详解(中)

腾讯出品小程序自动化测试框架【Minium】系列(五)API详解(中)

作者头像
软件测试君
发布2023-02-24 19:13:32
7370
发布2023-02-24 19:13:32
举报
文章被收录于专栏:测试人生测试人生
写在前面

又有好久没更新小程序自动化测试框架「Minium」系列文章了,主要真的太忙,尽量做到每周一更吧,还请大家能够理解!

上篇文章为大家分享关于MiniumMinium、App模块的API 使用,接下来将为大家继续分享MiniumAPI的使用。

Page中API的使用

data

❝当前页面数据, 可直接赋值 ❞

代码语言:javascript
复制
Page({
    data: {"testdata1": 1}
})

「示例代码如下:」

代码语言:javascript
复制
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

「示例代码如下:」

代码语言:javascript
复制
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:」

  • Element

实例代码如下:

代码语言:javascript
复制
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]

示例代码如下:

代码语言:javascript
复制
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

示例代码如下:

代码语言:javascript
复制
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

「示例代码如下:」

代码语言:javascript
复制
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:」

  • List[Element]

示例代码如下:

代码语言:javascript
复制
# 一个元素
element = self.page.get_element("selector")
element = element.get_element("selector")
# 一组元素
elements = self.page.get_elements("selector")
elements = element.get_elements("selector")
attribute()

❝获取元素属性 ❞

示例代码如下:

代码语言:javascript
复制
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示例代码如下: ❞

代码语言:javascript
复制
# 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()

❝长按元素 ❞

示例代码如下:

代码语言:javascript
复制
# 长按操作
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

平滑移动

代码语言:javascript
复制

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

示例代码如下:

代码语言:javascript
复制
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 轴上滚动的距离

示例代码如下:

代码语言:javascript
复制
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

输入文本

示例代码如下:

代码语言:javascript
复制
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("文本内容")

写在最后

越写越发现自己的盲区越多,关于小程序的一些组件我还是不太明白,待我去研究明白。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-02-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 软件测试君 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Page中API的使用
    • data
      • element_is_exists()
        • get_element()
          • get_elements()
            • scroll_to()
              • wait_for()
              • Element中API的使用
                • get_element()
                  • get_elements()
                    • attribute()
                      • tap()
                        • click()
                          • long_press()
                            • move()
                              • styles()
                                • scroll_to(
                                  • input()
                                  • 写在最后
                                  相关产品与服务
                                  文字识别
                                  文字识别(Optical Character Recognition,OCR)基于腾讯优图实验室的深度学习技术,将图片上的文字内容,智能识别成为可编辑的文本。OCR 支持身份证、名片等卡证类和票据类的印刷体识别,也支持运单等手写体识别,支持提供定制化服务,可以有效地代替人工录入信息。
                                  领券
                                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档