UI自动化中的重要工作就是元素定位了,高效精准的定位方法可以让工作事半功倍。

在过去的一段web自动化经历中,使用的selenium库支持了多种定位方法,我们可以利用这些定位方法来做进一步封装,写出符合项目更高效的定位器。

一、get_element() 与 get_elements()

那么在小程序的Minium框架中,是如何定位元素的呢?先来回归下上一节中演示用的代码:

import miniumclass ComponentTest(minium.MiniTest):def test_ui_op(self):self.page.get_element("view", inner_text="视图容器").click()self.page.get_element(".navigator-text", inner_text="swiper").click()self.page.get_elements("switch")[0].click()self.page.get_elements("switch")[1].click()print("test_ui_op执行测试")print(self.mini.get_system_info())

代码里的get_elementget_elements就是框架中Page接口提供的方法,可以用来获取元素。

  • get_element:在当前页面查询控件, 如果匹配到多个结果, 则返回第一个匹配到的结果
  • get_elements: 在当前页面查询控件, 并返回一个或者多个结果

顾名思义,get_elements多加了个s表示负数,方法返回的是元素element对象组成的list,在代码里print出来后是这样的(手动换行方便查看):

[<minium.miniprogram.base_driver.element.FormElement object at 0x000002C26893AE50>,<minium.miniprogram.base_driver.element.FormElement object at 0x000002C26893AAC0>
]

在这2个方法里还存在几个相同的参数:

以及一个不同的参数,这个是get_elements方法用到的:

二、参数介绍

1.参数:selector

这是一个必填的参数,内容是css选择器或以///开头的xpath,定位元素主要也是靠这个参数。

框架支持多种选择器,示例代码中的选择器就是".navigator-text",关于选择器下一章再详细介绍。

而关于xpath,目前看官方介绍是说暂时不支持一些[text()='xxx']这类xpath条件,目前就先不做优先介绍了,使用CSS选择器也足够了。

另外,也可以自行搜索xpath语法进一步了解,以前在做web ui自动化的时候我是很热衷于使用xpath定位的,辅以xpath轴,定位器写的很好用。

2.参数:inner_text

非必填参数,默认None,可以通过控件内的文字识别控件。

self.page.get_element("view", inner_text="视图容器").click()

在示例代码中,inner_text="视图容器"指的就是小程序上出现的控件文本内容,很多时候我们可以根据这种特征进一步帮助定位。

3.参数:text_contains

非必填参数,默认None,可以通过控件内的文字模糊匹配控件。

跟上面的inner_text参数一样,只不过这里可以模糊匹配,也就是说在页面可以确定文本内容唯一的情况下,这2种写法是等价的。

self.page.get_element("view", inner_text="视图容器").click()
self.page.get_element("view", text_contains="图容").click()

4.参数:value

非必填参数,默认None,可以通过控件的 value 识别控件。

比如这个单选框控件,可以使用微信开发者工具的选择元素按钮,点击控件。

通过 value 值来定位的话可以这样写:

self.page.get_element("radio", value="radio1").click()

但是这里一直出现报错TypeError: 'str' object is not callable,是在源码page.py第319行。

后来我去翻阅了官方issues,找到一个2年前有人提出的问题跟我这个很像,但是官方也没回复问题关闭了。这里我也就尝试修改了一下,才能正常定位。

我重新把这个问题提交了下,如果得到回复届时再更新出来。

5.参数:max_timeout

默认值是0,表示超时时间,单位是s 。而在超时之前会每隔一秒重试一次

示例中,我修改下定位,使其必然定位不到。那么加了max_timeout=5之后,就会等待5s,期间一直定位不到的话,则抛出元素不存在错误。

self.page.get_element(".navigator-text", inner_text="form1", max_timeout=5).click()

6.参数:index

默认值为-1

  • index==-1: 获取所有符合的元素,
  • index>=0: 获取前index+1符合的元素。

简单来说,get_elements()获取的是元素在一个list中,注意下列表中索引是从0开始的。

上图中class为kind-list-item存在9个元素,现在使用get_elements获取前2个元素:

    def test_ui_op(self):print(self.page.get_elements("view.kind-list-item", index=2))

遗憾的是运行结果结束仍然返回了9个元素出来,继续给官方提了个issues,等待回复吧 T_T。

【小程序自动化Minium】二、元素定位-Page接口中的 get_element() 与 get_elements()相关推荐

  1. 学会这一招,轻松玩转小程序自动化

    上次给同学们介绍了 app 中混合应用自动化怎么做,今天我们再来学习下,app 自动化之--小程序自动化. 一.环境要求 微信版本 weixin7.0.10.apk 版本,否则 uc-devtools ...

  2. 微信小程序自动化框架minium实践,手把手带你玩minium

    一.背景需求 精选小程序发生了一次线上问题,测试阶段的小程序开发码测试ok,但是小程序正式码由于打包问题,"我的订单"页面文件打包失败,导致线上用户访问我的页面白屏. 当前并不能避 ...

  3. Appium 解决微信公众号、小程序切换 webview 后无法定位元素的问题

    Appium 解决微信公众号.小程序切换 webview 后无法定位元素的问题 参考文章: (1)Appium 解决微信公众号.小程序切换 webview 后无法定位元素的问题 (2)https:// ...

  4. 微信小程序自动化之miniprogram-automator快速上手

    新近项目组大佬要求学习使用这个小程序自动化测试miniprogram-automator,但本小白从未接触使用过相关测试类任务,鉴于网上能查找到的相关资料也较为稀少,故在此提记我在使用过程的具体使用过 ...

  5. android微信小程序自动填表_微信小程序自动化,记录趟过的坑!

    项目思想:关键字+数据驱动混合测试 基于Android-微信小程序自动化的关键是:webview的切换 对于微信App来说如何从NATIVE切换到webview的过程 测试版本信息 1.微信版本:7. ...

  6. 微信上python小课 骗局_聊聊 Python 做微信小程序自动化,那些踩过的坑?

    1. 场景 之前写过 微信小程序的几种方式,对于有源码的小程序推荐使用微信开放的 SDK 来做自动化,否则只能使用原生或 WebView 的方式. 最近在用 Python + Appium 在微信小程 ...

  7. android微信自动化脚本,appium——微信小程序自动化

    由于腾讯系QQ.微信是基于腾讯自研X5内核-类似webview,不是谷歌原生webview,所以调试会有些许差异(有很 多app厂商也开始采用X5内核) 微信小程序自动化测试只能够支持手机,模拟器是不 ...

  8. 逆战:微信小程序开发(二)

    一.常用组件 在上一个章节中讲解了封装请求数据的模块,在此处请求轮播图的数据 1.首页轮播图数据的请求以及渲染 1.1 轮播图数据的请求 pages/home/home.js import { req ...

  9. 黯然微信小程序杂记(二):小程序最新版登录并进行缓存模块的实现 附源码

    黯然微信小程序杂记(二):小程序最新版登录进行缓存模块的实现 附源码 一.功能描述 二.mine.wxml界面图片 三.mine.wxml代码 四.mine.wxss代码 五.mine.js代码 六. ...

最新文章

  1. iptables实现字符串匹配
  2. MySQL----ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes
  3. 潘越云《面朝海子》:诗里的人都会终成眷属
  4. Cannot unwrap to requested type [javax.sql.DataSource]
  5. verilog中值滤波算法实现及仿真
  6. linux内核模块配置,如何为linux内核模块开发配置clang_complete?
  7. C语言 程序代码编写规范
  8. 【三维深度学习】多视角场景点云重建模型PointMVS
  9. 二叉树中的和为某一值的路径(二)(C++)
  10. HTML/CCS初学的小小收获(大虾表鄙视小白)(1)
  11. binwalk、foremost、dd隐藏文件分离
  12. IDEA删除文件如何恢复
  13. 全球及中国EDM放电加工机行业盈利投资分析及运营现状调研报告2021-2027年版
  14. python中类对象和实例对象_python基础之类和对象、对象之间的交互、类名称空间与对象/实例名称空间...
  15. Unity初级(十二)
  16. 鸿蒙系统什么时候用于pc,浅谈鸿蒙系统与三大主流PC系统(Windows、MacOS、Linux)...
  17. Roman Numeral Converter--将给定的数字转换为罗马数字
  18. 词霸天下---词根234【-zo(o)- 动 物】
  19. 8.0强行转换后变成了7_干货|从中式英语,到雅思听力8.0,外研社英语演讲省一,非英专的她做了这些...
  20. 复旦大学苏教授火了!扯出600多个假博士

热门文章

  1. Android 用HorizontalScrollView实现ListView的Item滑动删除
  2. 【NOI2007】社交网络
  3. [mybatis] sql语句无错误,但是执行多条sql语句时,抛出java.sql.SQLSyntaxErrorException...
  4. macos 管理员权限 黑苹果_自己安装黑苹果,其实黑苹果也没那么难~
  5. 第十四届蓝桥杯要开始了(2022年)
  6. 2048和多地址入口_邮箱163登录入口?邮箱163注册格式是什么?
  7. ajax读取文件的小总结
  8. Latex公式与Word公式相互转换(使用MathType)
  9. 阈值、阙值 有没有阀值?
  10. 怎么判断机械表上满弦_机械手表上弦是什么意思,怎么看手表有没有上满弦