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)
.....
Appium之选择/操作元素的更多相关文章
- Web自动化 - 选择操作元素 2
文章转自 白月黑羽教Python 前面我们看到了根据 id.class属性.tag名 选择元素. 如果我们要选择的 元素 没有id.class 属性, 这时候我们通常可以通过 CSS selector ...
- Web自动化 - 选择操作元素 1
文章转自 白月黑羽教Python 所有的 UI (用户界面)操作 的自动化,都需要选择界面元素. 选择界面元素就是:先让程序能找到你要操作的界面元素. 先找到元素,才能操作元素. 选择元素的方法 程序 ...
- Appium -选择、操作元素
选择界面元素 操作元素(点击.输入字符.拖拽.获取页面元素的各种属性) 根据Appium获取的数据进行分析和处理 desired_capabilities 查看appPackage 和appActiv ...
- Python+Appium自动化测试(9)-自动选择USB用于传输文件(不依赖appium对手机页面元素进行定位)
一,问题 app自动化测试使用Android真机连接电脑时,通常会遇到两种情况: 1.测试机连接电脑会弹窗提示USB选项,选择USB用于"传输文件",有些手机不支持设置默认USB选 ...
- 『与善仁』Appium基础 — 18、元素定位工具(二)
目录 1.Appium Inspector介绍 2.Appium Inspector打开方式 3.Appium Inspector布局介绍 4.Appium Inspector工具的配置 5.Appi ...
- 抛弃jQuery:DOM API之操作元素
原文链接:http://blog.garstasio.com/you-dont-need-jquery/dom-manipulation/ 我的Blog:http://cabbit.me/you-do ...
- 基于MVC4+EasyUI的Web开发框架经验总结(14)--自动生成图标样式文件和图标的选择操作
在很多Web系统中,一般都可能提供一些图标的选择,方便配置按钮,菜单等界面元素的图标,从而是Web系统界面看起来更加美观和协调.但是在系统中一般内置的图标样式相对比较有限,而且硬编码写到样式表里面,这 ...
- jQuery的区别:$().click()和$(document).on('click','要选择的元素',function(){})的不同
jQuery的出现,大大简化了对dom的操作,但是如果不是仔细阅读api和进行操作,就不知道其中最大的优点和使用方式.就拿$().click()和$(document).on('click','要选择 ...
- JQuery官方学习资料(译):操作元素
获取和设置元素的信息 有很多种方式可以改变现有的元素,最常见的是改变HTML内容或者元素的属性.JQuery提供了简单的夸浏览器的方法来帮助你实现元素信息的获取和设置. .html():获 ...
随机推荐
- hdu 1754 I Hate It (线段树、单点更新)(PS:ios::sync_with_stdio(false)可以加快cin、cout的读取写出速度)
I Hate ItTime Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- Serlvet之cookie和session学习
HTTP 协议 Web通信需要一种语言,就像中国人讲中文,欧美说英文,Web使用的HTTP协议,也叫超文本协议. 使用HTTP协议的人分为两类:客户端和服务端.请求资源的角色是客户端,提供资源的是服务 ...
- java中hashmap容量的初始化
HashMap使用HashMap(int initialCapacity)对集合进行初始化. 在默认的情况下,HashMap的容量是16.但是如果用户通过构造函数指定了一个数字作为容量,那么Hash会 ...
- Python print函数使用
本文链接:https://www.cnblogs.com/zyuanlbj/p/11905405.html 函数定义 def print(self, *args, sep=' ', end='\n', ...
- 力扣(LeetCode)平方数之和 个人题解
给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a2 + b2 = c. 示例1: 输入: 5 输出: True 解释: 1 * 1 + 2 * 2 = 5 示例2: 输入: 3 ...
- vue项目页面切换到默认显示顶部
页面切换到默认显示顶部 方法一 使用前端路由,当切换到新路由时,想要页面滚到顶部,或者是保持原先的滚动位置,就像重新加载页面那样. vue-router 能做到,而且更好,它让你可以自定义路由切换时页 ...
- ASP.NET Aries 高级开发教程:如何写WebAPI接口
前提: 最近,有不少同学又问到,Aries里如何提供WebAPI接口? 针对这个问题,今天给顺路写个教程,其实呢,很简单的. 方式一:直接用WebService提供接口. 用这种方式,直接添加接口就可 ...
- Flex带CheckBox的Tree(修改ItemRenderer)
此文代码参考了:http://summerofthatyear-gmail-com.iteye.com/blog/326302 在此表示感谢! 前文提到了,实现带CheckBox的Tree有两种方法: ...
- ASP使用ajax来传递中文参数的编码处理
背景 asp的第一版是0.9测试版,自从1996年ASP1.0诞生,迄今20余载.虽然asp在Windows2000 IIS服务5.0所附带的ASP 3.0发布后好像再没有更新过了,但是由于其入手简单 ...
- iOS开发调试概览
概述 我们都知道Xcode默认的调试器是LLDB(在此之前使用的是GDB),但是关于LLDB的debug技巧并非所有人都比较清楚,可能所有人都知道p或者po命令打印一些变量.但是实际的情况时这些还远远 ...