• Appium之选择/操作元素


    Appium是如何选择、操作元素的呢?

         appium自动化  ------  选择界面 元素

         操作元素  ------- ① 点击

                                ② 输入字符

                                ③ 拖拽

                                ④ 获取页面元素的各种属性

         根据appium获取的数据进行分析和处理

    如何查看界面元素呢?

          用到工具    在Androidsdk目录下  tools ->bin ->uiautomatorviewer.bat  双击打开

    选择APP页面元素的三种方式

          选择元素的代码

                  与selenium基本相同

                  * find_element_by_xxx  符合条件的第一个元素,找不到抛出异常

                  * find_elements_by_xxx  符合条件的所有元素的列表,找不到返回空列表

                  * 通过webDriver 查找范围是整个界面树形结构

                  * 通过webelement 查找范围是该节点的子节点

          选择元素的方法

              ① 根据ID     ------    driver.find_element_id('xxxx')

              ② 根据class  name   --------   driver.find_element_by_class_name("android.widget.TextView")

                       class属性决定了界面元素的类型

                       如果我们要查找的是某种类型的界面元素,而且这种类型的界面元素在当前界面中只有一个

              ③ 根据accessibility  id     ------   driver.find_element_by_accessibility_id('unique name')

                       content-desc属性是用来描述该元素的作用

                       如果要查询的界面元素的content-desc属性,在当前页面中唯一就用它

                       不过,一般开发人员不喜欢填写它。

              ④ 根据xpath

                        在appium中,我们没法使用css,因为css是web专用的。appium支持xpath来定位元素。

                        举例:   driver.find_element_by_xpath('//ele/ele2[@attr="a1"]')

                                    xpath = "//*[@resource-id='io.manong.developerdaily:id/tab_bar_container']//android.widget.TextView[3]"

                                    xpath = "//*[@resource-id='io.manong.developerdaily:id/tab_bar_container']//android.widget.TextView[@text='发现']"

                                    eles = driver.find_element_by_xpath(xpath)[2]

                        注意:在xpath中表示下标是从1开始的,而在python中表示下标是从0开始的。

                        每个节点对应class属性   相对不成熟,很多时候是正确的语法也不能找出元素来

    定位元素时遇到过的坑: 经常报EOF错误,几种解决办法

            - 关掉appium server ,然后再次打开uiautomatorviewer.bat

            - 电脑上不能有手机助手,有的话都关掉

            - 重启手机,重新连接  adb devices

            - 删除测试包,重新下载,重启uiautomatorviewer

    Inspetor定位:

          因为用UIAutomator viewer工具不能实时定位元素,可以在appium server 界面上点击放大镜,填写相应的name  value,然后start session一下,

    就可以实现图形与元素实时定位。当然Inspetor还可以验证xpath表达式。

         通过Inspactor中的Attach to Session就可以知道是什么设备。

         如何查看session id   可以在代码中加入  print(driver.session_id)

    tap方法:与click方法类似,都是点击界面。

          区别是:tap方法是针对坐标定位;而click方法是点击方法。

          tap方法适用场景:在选择不到元素的情况下,我们就可以通过坐标来实现定位。

            driver.find_element_by_class_name('...')   #  等待界面出现

            driver.tap([918,413], 4556)    #  有两个参数  元素位置和点击持续时间(ms)

     ==如果是不同分辨率的手机,用坐标定位就很不准确。可以将不同分辨率的对应元素坐标统统写在配置文件里,然后调用。

          config.py文件里这样写:

             coordinates = {

                     '1080p':{

                           '首页_+' : (548, 1839),

                           '登录页 _邮箱图标' :(147, 1802),

                           '登录页_邮箱地址'  :(264, 370),

                           '登录页_邮箱密码'  :(264, 570),

                           ‘登录页_登录按钮’  :(264, 780)

                      },

                      '720p':{

                           '首页_+' : (640, 1250),

                           .......

                      },

                      '2k':{

                           .......

                       }

             }

             cfg_phone_resolution = '1080p'

        调用的时候,先导包  如 :from appium_code.configs import coordinates,cfg_phone_resolution

         然后需要用到时,如:coordinate = coordinates['1080p']

                                             driver.tap([coordinate['首页_+']], 300)

                                             .....

  • 相关阅读:
    华为云招募工业智能领域合作伙伴,强力扶持+商业变现
    “不敢去怀疑代码,又不得不怀疑代码”记一次网络请求超时分析
    详解openGauss多线程架构启动过程
    站在数字化风口,工装企业如何“飞起来”
    如何化解35岁危机?华为云数据库首席架构师20年技术经验分享
    解读2022年度敏捷教练行业现状报告
    理论+案例,带你掌握Angular依赖注入模式的应用
    机器学习实践:基于支持向量机算法对鸢尾花进行分类
    8种桌面IDE CodeArts智能代码补全类型
    【CVPR2022】用于域适应语义分割的域无关先验
  • 原文地址:https://www.cnblogs.com/peipei-Study/p/11989229.html
Copyright © 2020-2023  润新知