Appium之选择/操作元素

时间:2021-12-03 22:57:47

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)

.....

Appium之选择/操作元素的更多相关文章

  1. Web自动化 - 选择操作元素 2

    文章转自 白月黑羽教Python 前面我们看到了根据 id.class属性.tag名 选择元素. 如果我们要选择的 元素 没有id.class 属性, 这时候我们通常可以通过 CSS selector ...

  2. Web自动化 - 选择操作元素 1

    文章转自 白月黑羽教Python 所有的 UI (用户界面)操作 的自动化,都需要选择界面元素. 选择界面元素就是:先让程序能找到你要操作的界面元素. 先找到元素,才能操作元素. 选择元素的方法 程序 ...

  3. Appium -选择、操作元素

    选择界面元素 操作元素(点击.输入字符.拖拽.获取页面元素的各种属性) 根据Appium获取的数据进行分析和处理 desired_capabilities 查看appPackage 和appActiv ...

  4. Python+Appium自动化测试(9)-自动选择USB用于传输文件(不依赖appium对手机页面元素进行定位)

    一,问题 app自动化测试使用Android真机连接电脑时,通常会遇到两种情况: 1.测试机连接电脑会弹窗提示USB选项,选择USB用于"传输文件",有些手机不支持设置默认USB选 ...

  5. 『与善仁』Appium基础 — 18、元素定位工具(二)

    目录 1.Appium Inspector介绍 2.Appium Inspector打开方式 3.Appium Inspector布局介绍 4.Appium Inspector工具的配置 5.Appi ...

  6. 抛弃jQuery:DOM API之操作元素

    原文链接:http://blog.garstasio.com/you-dont-need-jquery/dom-manipulation/ 我的Blog:http://cabbit.me/you-do ...

  7. 基于MVC4+EasyUI的Web开发框架经验总结(14)--自动生成图标样式文件和图标的选择操作

    在很多Web系统中,一般都可能提供一些图标的选择,方便配置按钮,菜单等界面元素的图标,从而是Web系统界面看起来更加美观和协调.但是在系统中一般内置的图标样式相对比较有限,而且硬编码写到样式表里面,这 ...

  8. jQuery的区别:$().click()和$(document).on('click','要选择的元素',function(){})的不同

    jQuery的出现,大大简化了对dom的操作,但是如果不是仔细阅读api和进行操作,就不知道其中最大的优点和使用方式.就拿$().click()和$(document).on('click','要选择 ...

  9. JQuery官方学习资料(译):操作元素

      获取和设置元素的信息     有很多种方式可以改变现有的元素,最常见的是改变HTML内容或者元素的属性.JQuery提供了简单的夸浏览器的方法来帮助你实现元素信息的获取和设置. .html():获 ...

随机推荐

  1. Android中点击事件的实现方式

    在之前博文中多次使用了点击事件的处理实现,有朋友就问了,发现了很多按钮的点击实现,但有很多博文中使用的实现方式有都不一样,到底是怎么回事.今天我们就汇总一下点击事件的实现方式. 点击事件的实现大致分为 ...

  2. [原]Hrbust1053 Warcraft III (完全背包)

    本文出自:http://blog.csdn.net/svitter 原题:http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProbl ...

  3. hdu 4111 Alice and Bob 博弈论

    这里有2种方法: 方法一:求SG函数 sg[i][j]:i表示1的个数,j表示合并操作的步数. 这共有4种操作: 1.消除一个1: 2.减掉一个1: 3.合并2个1: 4.把1合并到另外不是1中. 代 ...

  4. (七)boost库之单例类

    (七)boost库之单例类 一.boost.serialzation的单件实现 单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例类的特殊类.通过单例模式可以保证系统中一个类只有一 ...

  5. RabbitMQ之工作队列

    工作队列 工作队列(又称:任务队列Task Queues)是为了避免等待一些占用大量资源.时间的操作,当我们把任务Task当做消息发送队列中,一个运行在后台的工作者worker进程就会取出任务然后处理 ...

  6. Android平台 Psensor传感器调试方法

    一. 驱动层调试1.在板级dts文件中增加相应的dts代码,如:调试sensor类,在代码中找到已经有的代码在修改,I2C使用那根(一般为I2C3),I2C地址(找datasheet或者FAE),哪个 ...

  7. shell练习题4

    需求如下: 系统logrotate工具,可以完成日志切割.归档.写一个shell脚本实现类似功能. 举例:假如服务的输出日志是1.log,要求每天归档一个,1.log第二天就变成1.log.1, 第三 ...

  8. Matplotlib学习---用matplotlib画饼图/面包圈图(pie chart, donut chart)

    我在网上随便找了一组数据,用它来学习画图.大家可以直接把下面的数据复制到excel里,然后用pandas的read_excel命令读取.或者直接在脚本里创建该数据. 饼图: ax.pie(x,labe ...

  9. 第三个Sprint ------第十一天

    四则运算APP推广: 1通过微信公众平台推广APP,写一片软文,然后推送出去.分享朋友圈.QQ空间. 2通过微博推广APP,@各微博大户. 3让之前内侧的同学转发给自己的小弟小妹或者侄女侄子! 总结: ...

  10. 手动下载 Xcode 文档

    下载Xcode文档的方法有两个: 1. 自动下载:到在Xcode的Preserences中Downloads页面的Documentation,点击对应文档的下载. 2. 手动下载:到这个页面:http ...