• 【小程序自动化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())
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    代码里的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>
    ]
    
    • 1
    • 2
    • 3
    • 4

    在这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()
    
    • 1

    在示例代码中,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()
    
    • 1
    • 2

    4.参数:value

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

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

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

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

    但是这里一直出现报错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()
    
    • 1

    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))
    
    • 1
    • 2

    遗憾的是运行结果结束仍然返回了9个元素出来,继续给官方提了个issues,等待回复吧 T_T。
    在这里插入图片描述

  • 相关阅读:
    高校学生消费行为分析系统
    前端内存泄漏和溢出的情况以及解决办法
    常见的传输介质及其特性
    java开放式教学评价管理系统计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
    【视觉检测】电源线圈上的导线弯直与否视觉检测系统软硬件方案
    前端面试那些事【dt/dd、audio、onerror、标签、类、ID选择器、伪类选择器......
    vue.js—v-bind绑定Class与Style
    如何建立开源战略
    6-10 单链表分段逆转 分数 15
    SpringMVC
  • 原文地址:https://blog.csdn.net/wessonlan/article/details/125533051