appium使用相对坐标定位元素
最近在用appium做自动化时发现,有一些元素无法通过uiautomatorviewer进行定位,这样就只能通过相对坐标来进行定位了。但是,问题又来了:如何获取元素的坐标呢?
在网上找了半天也没找到相应的解决方法,后来在一篇文章中看到打开手机指针位置来确定元素所在坐标。具体方法:设置--开发者选项--指针位置
开启指针位置之后,点击手机屏幕就会显示该位置的具体坐标,这样就获取到了元素的绝对坐标 然后通过webdriver的tap()函数点击该坐标就可以了。
我们获取到的是绝对坐标,如果换一个屏幕分辨率不同的手机那这个坐标自然会发生变化,要实现不同手机均能实现点击同一控件自然要用到相对坐标了,具体方法如下:
1.获取当前空间的绝对坐标(x1,y1),开启指针位置后,通过点击控件位置获取坐标;
2.获取当前手机的屏幕大小(x2,y2),通过driver.get_window_size()['width'],dirver.get_window_size()['height']分辨获取当前手机的x、y坐标;
3.获取测试手机的屏幕大小(x3,y3),获取方式同上一步;
4.获取指定控件在测试手机中的坐标:((x1/x2)*x3,(y1/y2)*y3)
5.获取到坐标之后同样使用tap()函数点击该控件。
具体代码如下:
# -*-encoding:utf-8 -*-
import os
import unittest
import HTMLTestRunner
from test_platform import URL
from test_platform import platform
from appium import webdriver
from time import sleep
# 设定系数
a = 554.0/1080
b = 1625.0/1794
class Login(unittest.TestCase):
def setUp(self):
platform['appPackage'] = 'com.xxxxxxxxx'
platform['appActivity'] = '.ui.activity.LoginActivity'
#platform['appWaitActivity'] = '.MainActivity_'
desired_caps = platform
self.driver = webdriver.Remote(URL,desired_caps)
self.driver.implicitly_wait(30)
def tearDown(self):
self.driver.quit()
def test_login(self):
el = self.driver.find_element_by_xpath("\
//android.widget.TextView[contains(@resource-id,'com.xxxxx/etRole')]")
if el:
el.click()
# 以xml格式打印当前页面内容
# print self.driver.page_source.encode("utf-8")
# self.driver.find_element_by_name("家长").click()
# 获取当前手机屏幕大小X,Y
X = self.driver.get_window_size()['width']
Y = self.driver.get_window_size()['height']
# 屏幕坐标乘以系数即为用户要点击位置的具体坐标,当前app内为选择用户角色为“家长”
self.driver.tap([(a*X, b*Y)],)
# 输入手机号码
self.driver.find_element_by_xpath("\
//android.widget.EditText[contains(@resource-id,'com.xxxxx:id/etAccount')]")\
.send_keys("***********")
# 输入密码
self.driver.find_element_by_xpath("\
//android.widget.EditText[contains(@resource-id,'com.xxxxxx.qh:id/etPasswd')]") \
.send_keys("123456")
# 点击登录按钮
self.driver.find_element_by_xpath("\
//android.widget.Button[contains(@resource-id,'com.xxxxxx:id/btnLogin')]").click()
sleep(5)
# 当前账号存在多个孩子,选择孩子后登录app
self.driver.find_element_by_xpath("\
//android.widget.TextView[contains(@text,'徐熙媛')]").click()
if __name__ == '__main__':
unittest.main()
本文转自:https://blog.csdn.net/qq_37695583/article/details/79320116
appium使用相对坐标定位元素的更多相关文章
- Python+Appium自动化测试(12)-通过坐标定位元素
在使用appium做app自动化测试的过程中,可能会遇到元素的属性值不是唯一的情况,导致不能通过find_element_bi_xx()方法定位元素,这个时候我们就可以通过坐标来定位元素. 1,通过绝 ...
- Appium学习路—Android定位元素与操作
一.常用识别元素的工具 uiautomator:Android SDK自带的一个工具,在tools目录下 monitor:Android SDK自带的一个工具,在tools目录下 Appium Ins ...
- 【appium】根据xpath定位元素
1. 背景 本文尝试使用的试验对象是SDK自带的NotePad应用实例,假设已经有两个Notes分别是“note1”和“note2”添加到Notepad上面,我们要做的就是尝试用xpath的方法来定位 ...
- appium+python测试app使用相对坐标定位元素
我们获取到的是绝对坐标,如果换一个屏幕分辨率不同的手机那这个坐标自然会发生变化,要实现不同手机均能实现点击同一控件自然要用到相对坐标了,具体方法如下: 1.获取当前空间的绝对坐标(x1,y1),开启指 ...
- 【appium】根据UIAutomator定位元素
text属性的方法 driver.find_element_by_android_uiautomator('new UiSelector().text("Custom View") ...
- 【appium】根据accessibility_id定位元素
如何获得AccessibilityId 可以通过UIAutomatorViewer或者Appium Inspector获得.Accessibility ID在Android上面就等同于contentD ...
- appium使用H5怎么定位元素
允许是一个class,如果遇到有多个class,只能填写一个. 对于移动端H5元素定位采用Chromedriver的解决方案,具体操作如下: 1.手机安装Chrome浏览器 2.开启USB调试模式,并 ...
- 【appium】根据UIAutomator定位元素等等资料
https://www.cnblogs.com/paulwinflo/p/4742529.html http://www.cnblogs.com/meitian/p/6103391.html http ...
- Appium+Python自动化 2 定位元素方式
1.找到 Android SDK安装路径tools 下面的 uiautomatorviewer.bat,如下截图 2.点击uiautomatorviewer.bat进行启动,左上角一共四个按钮,作用分 ...
随机推荐
- swoole使用异步进程通信
$process = new swoole_process(function($pro){ $pro->exec('//linux中的php命令所在绝对路径', ['//执行文件绝对路径']); ...
- Python3.7离线安装Requests无法正常使用问题
继续搬砖...... 春节前,克服了网络受限的情况下离线安装Python库文件问题,传送门如下: https://www.cnblogs.com/mrgavin/p/12202214.html htt ...
- 脚本kafka-configs.sh用法解析
引用博客来自李志涛:https://www.cnblogs.com/lizherui/p/12275193.html 前言介绍 网络上针对脚本kafka-configs.sh用法,也有一些各种文章,但 ...
- Office 2019 for Mac(office办公套件) v16.34中文版
Microsoft Office 2019 Mac中文版下载是微软在Mac发行的Office办公软件套件.包含了新版本的Word.Excel.PowerPoint以及现有的OneNote和Outlo ...
- 基于JWT的Token认证机制及安全问题
[干货分享]基于JWT的Token认证机制及安全问题 https://bbs.huaweicloud.com/blogs/06607ea7b53211e7b8317ca23e93a891
- c++17 optional 简介
c++17 的optional 作为返回值,提高异常的处理 对于构造可能失败的对象,似乎在构造函数里抛异常不太合适.所以 首先是使用静态方法来返回对象,在外部申请资源后,再通过传参给构造函数. 这样的 ...
- CF1137E Train Car Selection(单调栈维护凸函数)
首先本题的关键是一次性加0操作只有第一个0是有用的.然后对于1 k操作,其实就是把之前的所有数删除.对于其他的情况,维护一次函数的和,将(i,a[i])看成平面上的一个点,用单调栈维护一下. #inc ...
- Exchange Onine 公用文件夹
公用文件夹专为共享访问设计,为收集.组织信息及工作组织中的其他人共享信息提供提供了一种轻松.有效的方式.公用文件夹帮助以易于浏览的层次结构来组织内容. 一.公用文件夹的适用环境 公用文件夹在以下out ...
- vmware ubuntu 解决 宿主机与虚拟机互相ping不通,虚拟机无线上网的解决办法
首先 virtual network editor 设为桥接 选定无线网卡 虚拟机的网络设置 选桥接. 其次, 如果不能互相ping通,注意主机是否关闭了防火墙,是否退掉了360(没验证), 还要注意 ...
- Python2 和 Python3的区别 更新中
py2和py3的区别 1.默认解释器编码 py2: ascii py3: utf-8 2.输入 输出 输入 py2: name = raw_input('请输入你的姓名:') py3: name = ...