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

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

一、get_element() 与 get_elements()

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

import minium

class 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. 【小程序自动化Minium】三、元素定位- WXSS 选择器的使用

    最近更新略疲,主要是业余时间多了几个变化.比如忙活自己的模拟赛车驾舱升级.还跟朋友筹备一个小程序项目.另外早上的时间留给背单词了... 上一章中讲到Page接口的get_element()与get_e ...

  2. 【小程序自动化Minium】一、框架介绍和环境搭建

    微信小程序自动化测试系列分享 一.Minium 简介 minium 是微信团队为小程序专门开发的自动化框架,我们可以用它来做小程序的UI自动化测试,但是它的能力却不仅仅在于UI自动化. 正是得益于官方 ...

  3. 关于微信小程序 textarea组件在fixed定位的模块中随页面移动问题

    具体的情况: 在模拟器中没问题,可是在真机下就出现以下问题,  <textarea  />在一个view盒子中,view盒子是固定定位,页面滑动时候,固定定位的盒子会定在屏幕的相对位置,但 ...

  4. 小程序UI自动化(一):appium小程序自动化尝试

    appium 进行 小程序自动化尝试: 由于工作中进行app自动化用的是appium,故首先尝试用appium进行小程序自动化,以美团小程序为例(python脚本实现) 一.配置基础信息 启动微信ap ...

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

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

  6. 微信小程序自动化,记录趟过的坑!

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

  7. 微信小程序学习笔记二 数据绑定 + 事件绑定

    微信小程序学习笔记二 1. 小程序特点概述 没有DOM 组件化开发: 具备特定功能效果的代码集合 体积小, 单个压缩包体积不能大于2M, 否则无法上线 小程序的四个重要的文件 *js *.wxml - ...

  8. 小程序实践(二):swiper组件实现轮播图效果

    swiper组件类似于Android中的ViewPager,实现类似轮播图的效果,相对于Android的Viewpager,swiper实现起来更加方便,快捷. 效果图: 首先看下swiper支持的属 ...

  9. appium自动化测试之UIautomatorviewer元素定位

    appium自动化测试之UIautomatorviewer元素定位 标签(空格分隔): uiautomatorviewer元素定位 前面的章节,已经总结了怎么搭建环境,怎样成功启动一个APP了,这里具 ...

随机推荐

  1. Java语言学习day34--8月09日

    ##13Math类的方法_1 A:Math类中的方法 /* * static double sqrt(double d) * 返回参数的平方根 */ public static void functi ...

  2. 使用 sh -x 进行 shell 脚本调试

    转载请注明出处:   sh  -x 命令的执行,会将shell 命令的每一个执行步骤进行打印,可以查看到 整个命令或脚本的执行过程的 debug. sh -n 只读取shell脚本,检测语法错误,但不 ...

  3. 今天遇到 Could not determine type for: java.util.List

    今天遇到 Could not determine type for: java.util.List 用hibernate 映射好好的竟然出现这个问题 以前也遇到过,但不知道怎么给解决了,今天又遇到了, ...

  4. RAID5加热备盘

    RAID 5加热备盘 RAID 10磁盘阵列中最多允许50%的硬盘设备发生故障,但是存在这样一种极端情况,即同一RAID 1磁盘阵列中的硬盘设备若全部损坏,也会导致数据丢失.换句话说,在RAID 10 ...

  5. 华硕主板安装Ubuntu双系统无法启动解决办法

    问题描述: 在安装完Ubuntu后,开机后没有启动项可以选择,而是直接进入win10系统. 解决办法: 开机进入bios,选择 高级模式 (Advance model),进入 启动(boot)选项卡, ...

  6. 【HashMap】浅析HashMap的构造方法及put方法(JDK1.7)

    目录 引言 代码讲解 属性 HashMap的空参构造方法 HashMap的put方法 put inflateTable initHashSeedAsNeeded putForNullKey hash ...

  7. ONNX Runtime 源码阅读:Graph::SetGraphInputsOutputs() 函数

    目录 前言 正文 总结 前言 为了深入理解ONNX Runtime的底层机制,本文将对 Graph::SetGraphInputsOutputs() 的代码逐行分析. 正文 首先判断Graph是否从O ...

  8. 【位运算】剑指offer 56. 数组中数字出现的次数

    这是一系列位运算的题目,本文将由浅入深,先从最简单的问题开始: 问题1: 一个数组中只有一个数字出现过1次,其余数字都出现过两次,请找到那个只出现1次的数字.要求时间复杂度是 \(O(n)\),空间复 ...

  9. 【Docker入门】Docker的常用命令

    ​ ​ 了解和安装完docker之后,我们学习一下docker的常用命令就和当初学linux命令一样,放心命令其实大致相同只不过细节不同. 一.Docker启动类命令 1.启动docker:syste ...

  10. 聊聊 HTTPS

    聊聊 HTTPS 本文写于 2021 年 6 月 30 日 最近工作也是越来越忙了,不像上学的时候,一天下来闲着没事可以写两篇博客. 今天来聊一下 HTTPS. HTTP HTTP 是不安全的协议. ...