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

简介: 【小程序自动化Minium】二、元素定位-Page接口中的 get_element() 与 get_elements()

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个方法里还存在几个相同的参数:


1268169-20220623075009757-193662488.png


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


1268169-20220623075054523-39787539.png


二、参数介绍


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="视图容器"指的就是小程序上出现的控件文本内容,很多时候我们可以根据这种特征进一步帮助定位。


1268169-20220629082623698-2053246904.png


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 识别控件。


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


1268169-20220629082048702-103971912.png


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


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


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


1268169-20220629082228955-1267450310.png


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


1268169-20220629214658562-1484152847.png


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


5.参数:max_timeout


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


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


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


1268169-20220629220437143-1344014331.png


6.参数:index


默认值为-1


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


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


1268169-20220629221105867-1702573746.png


上图中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。

相关文章
|
3月前
|
测试技术 Python
Python接口自动化测试框架(基础篇)-- 流程控制之循环语句for&while
本文介绍了Python中的循环语句,包括while和for循环的使用,range()函数的运用,以及continue、break和pass关键字的说明,同时提出了关于while循环是否能与成员运算符结合使用的思考。
50 1
Python接口自动化测试框架(基础篇)-- 流程控制之循环语句for&while
|
3月前
|
测试技术 索引 Python
Python接口自动化测试框架(练习篇)-- 数据类型及控制流程(一)
本文提供了Python接口自动化测试中的编程练习,包括计算器、猜数字、猜拳和九九乘法表等经典问题,涵盖了数据类型、运算、循环、条件控制等基础知识的综合应用。
47 1
|
2月前
|
JSON 移动开发 监控
快速上手|HTTP 接口功能自动化测试
HTTP接口功能测试对于确保Web应用和H5应用的数据正确性至关重要。这类测试主要针对后台HTTP接口,通过构造不同参数输入值并获取JSON格式的输出结果来进行验证。HTTP协议基于TCP连接,包括请求与响应模式。请求由请求行、消息报头和请求正文组成,响应则包含状态行、消息报头及响应正文。常用的请求方法有GET、POST等,而响应状态码如2xx代表成功。测试过程使用Python语言和pycurl模块调用接口,并通过断言机制比对实际与预期结果,确保功能正确性。
246 3
快速上手|HTTP 接口功能自动化测试
|
3月前
|
IDE 测试技术 开发工具
Python接口自动化测试框架(基础篇)-- 不只是txt的文件操作
本文介绍了Python中的文件操作方法,包括使用open()打开文件、close()关闭文件、read()读取内容、readline()读取单行、readlines()读取多行、write()写入内容以及writelines()写入多行的方法。同时,探讨了文件操作模式和编码问题,并扩展了上下文管理器with...as的使用,以及对图片和音频文件操作的思考和练习。
30 1
Python接口自动化测试框架(基础篇)-- 不只是txt的文件操作
|
3月前
|
测试技术 索引 Python
Python接口自动化测试框架(基础篇)-- 函数与内置函数
本文详细介绍了Python中的函数概念,包括自定义函数、参数传递、局部与全局变量,以及内置函数的使用,还扩展了匿名函数、return和yield、exec()、vars()、iter()、map()、zip()、reversed()和sorted()等高级函数和概念。
33 1
Python接口自动化测试框架(基础篇)-- 函数与内置函数
|
3月前
|
测试技术 Python
Python接口自动化测试框架(基础篇)-- 流程控制之if条件控制
Python中的流程控制语句if条件控制,涵盖了比较运算符、成员运算符、身份运算符、逻辑运算符的使用,if语句的嵌套,以及如何使用input和print函数进行交互式编程练习。
30 1
Python接口自动化测试框架(基础篇)-- 流程控制之if条件控制
|
3月前
|
存储 测试技术 数据库
Python接口自动化测试框架(练习篇)-- 函数编程(一)
本文通过实际的编程练习,讲解了面向过程编程的概念和应用,包括如何定义函数、处理文件读写以及实现用户注册功能,最终将这些过程封装成函数,体现了Python作为脚本语言的面向过程编程特性。
27 2
|
3月前
|
IDE Java 测试技术
Python接口自动化测试框架(基础篇)-- 基础语法(真的很基础)
这篇文章是关于Python编程语言的基础语法介绍,包括编码、标识符、注释、行和缩进、输入输出以及导包等基础知识点,旨在帮助初学者理解并掌握Python编程的基础。
27 2
|
3月前
|
测试技术 Python
Python接口自动化测试框架(练习篇)-- 函数编程(二)
本文通过具体的编程练习,深入探讨了Python中的函数编程,包括如何定义函数、使用参数和返回值,以及函数式编程的技巧和应用,如使用lambda表达式和递归函数解决实际问题。
27 1
|
3月前
|
测试技术 索引 Python
Python接口自动化测试框架:回顾Python3基础语法知识总览
本文是Python 3基础语法知识的全面总结,涵盖了标识符、数据类型、运算符、控制流程、函数、模块和文件操作、异常处理以及面向对象编程的各个方面,旨在为编写Python接口自动化测试框架提供必要的语法知识支持。
34 1