写在前面

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

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

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:

  • 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 支持的语法:

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(

元素滚动

基础库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("文本内容")

写在最后

越写越发现自己的盲区越多,关于小程序的一些组件我还是不太明白,待我去研究明白。后续再来更新,尽量做到通俗易懂,还请各位同学能够继续关注、支持我,有问题欢迎文末留言给我,一起交流学习!

腾讯出品小程序自动化测试框架【Minium】系列(五)API详解(中)的更多相关文章

  1. Java生鲜电商平台-APP/小程序接口传输常见的加密算法及详解

    Java生鲜电商平台-APP/小程序接口传输常见的加密算法及详解 说明:Java生鲜电商平台-APP/小程序接口传输常见的加密算法及详解,加密算法,是现在每个软件项目里必须用到的内容. 广泛应用在包括 ...

  2. 小程序学习笔记三:页面文件详解之视图层WXML、WXS、WXSS文件

      视图层:Pages主要有 wxml页面文件和模板文件.wxs脚本文件.wxss样式文件:component是抽取出来的业务单元,同样拥有wxml页面文件和模板文件.wxs脚本文件.wxss样式文件 ...

  3. 微信小程序wx:key以及wx:key=" *this"详解:

    今天写微信小程序无意中看到控制台给出了这样一行提示: 求解百度才知道,给大家分享一下: 1.wx:for定义 官方文档:在组件上使用 wx:for 控制属性绑定一个数组,即可使用数组中各项的数据重复渲 ...

  4. 小程序学习笔记二:页面文件详解之 .json文件

       页面配置文件—— pageName.json 每一个小程序页面可以使用.json文件来对本页面的窗口表现进行配置,页面中配置项会覆盖 app.json 的 window 中相同的配置项. 页面的 ...

  5. 「微信小程序」PHP异步进程async-helper实例详解

    PHP异步进程async-helper实例详解 PHP 的异步进程助手,借助于 AMQP 实现异步执行 PHP 的方法,将一些很耗时.追求高可用.需要重试机制的操作放到异步进程中去执行,将你的 HTT ...

  6. 微信小程序上拉加载:onReachBottom详解+设置触发距离

    前端经常遇到上拉加载更多的需求,一般还涉及到翻页.小程序里已经给了下拉到底的触发方法onReachBottom(),这里记录下怎样使用这个方法实现下拉加载更多,有需要的直接看代码,有详细注释: 1.首 ...

  7. 十一、微信小程序-var、let、const用法详解

    let命令 基本用法 ES6 新增了let命令,用来声明变量.它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效. { let a = 10; var b = 1; } a // ...

  8. 微信小程序获取当前地址以及选择地址详解 地点标记

    首先定义事件: bindtap='getLocation' <view class='store-bot' bindtap='getLocation'> <view class='c ...

  9. 自动化测试框架selenium+java+TestNG——TestNG详解

    TestNG按顺序执行case package com.testngDemo; import org.testng.annotations.AfterClass; import org.testng. ...

  10. 微信小程序 导航 4种页面跳转 详解

    1.wx.navigateTo   保留当前页面,跳转到应用内的某个页面,目前页面路径最多只能十层.  参数:url(可携带参数) .success .fail .complete 可用wxml代替: ...

随机推荐

  1. Xpath 高级用法

    xpath 高级用法 1. 匹配当前节点下的所有: .// . 表示当前 // 表示当前标签下的所有标签 注: 要配合使用 2. 匹配某标签的属性值: /@属性名称 这里以input里的value值为 ...

  2. Elasticsearch Analyzer 内置分词器

    Elasticsearch Analyzer 内置分词器 篇主要介绍一下 Elasticsearch中 Analyzer 分词器的构成 和一些Es中内置的分词器 以及如何使用它们 前置知识 es 提供 ...

  3. 长事务 (Long Transactions)

    长事务 长事务用于支持 AutoCAD 参照编辑功能,对于 ObjectARX 应用程序非常有用.这些类和函数为应用程序提供了一种方案,用于签出实体以进行编辑并将其签回其原始位置.此操作会将原始对象替 ...

  4. redis的几个优化点

    1. redis读写速度慢 可以将redis单实例改为redis集群 2. redis报OOM redis内存溢出,调大redis内存:增加redis.conf中的maxmemory 的值.如果red ...

  5. 第2-2-4章 常见组件与中台化-常用组件服务介绍-分布式ID-附Snowflake雪花算法的代码实现

    目录 2.3 分布式ID 2.3.1 功能概述 2.3.2 应用场景 2.3.3 使用说明 2.3.4 项目截图 2.3.5 Snowflake雪花算法的代码实现 2.3 分布式ID 2.3.1 功能 ...

  6. 2022春每日一题:Day 18

    题目:[JSOI2007]字符加密 很常见的做法,破环为链,然后以2n为总长再后缀排序,然后对于SA[i] < n 的,说明第i小后缀的编号是小于n的,也就是说,以i开头的编号是合法的,那么输出 ...

  7. .NET跨平台框架选择之一 - Avalonia UI

    本文阅读目录 1. Avalonia UI简介 Avalonia UI文档教程:https://docs.avaloniaui.net/docs/getting-started 随着跨平台越来越流行, ...

  8. mybatis中xml的sql之test中文报错

    在mybatis中sql,test中文报错( java.lang.NumberFormatException 这句话明确告诉了我们是数字格式异常).需加.tostring(). <if test ...

  9. 论文解读(CDCL)《Cross-domain Contrastive Learning for Unsupervised Domain Adaptation》

    论文信息 论文标题:Cross-domain Contrastive Learning for Unsupervised Domain Adaptation论文作者:Rui Wang, Zuxuan ...

  10. 数电第六周周结_by_yc

    时序逻辑电路的设计要点:   ①只有时钟信号和复位信号可以放在敏感列表里:   ②使用非阻塞赋值,即使用"<=";   ③无需对所有分支进行描述,对于未描述的分支,变量将保持 ...