专栏首页测试开发社区appium使用相对坐标定位元素

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

本文分享自微信公众号 - 测试开发社区(TestDevHome)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-05-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 移动端自动化测试-远程设备调度

    “云测” 是近几年业内的热词, 不仅仅商用的云测平台越来越多,各大厂也早早的着手构建适合自己的云测平台上 ,经常可以听到相关的分享,十分精彩,受益匪浅...

    测试开发社区
  • 接口用例设计

    一个系统可为其他系统提供能力或者直接为UI层提供数据,在设计系统测试方案时应考虑上游调用的各种场景,不仅考虑顺利且正向思维操作的场景,还应逆向的场景。例如:人为...

    测试开发社区
  • 软件测试之性能测试

    性能测试是通过自动化的测试工具模拟各种正常、峰值以及异常负载条件来对系统的各项性能指标的测试。

    测试开发社区
  • iOS 瀑布流之栅格布局

    且行且珍惜_iOS
  • Python之极验滑动验证码的识别(教程+案例)

    Python知识大全
  • 深度学习之BP神经网络识别手写数字(五)

    根据MNIST数据集的特性: 每张图片为28*28,其中大约有60000个手写字体训练样本。因为是对数字的识别,所以输出的范围为0~9。这就类似于一个10分类...

    李小白是一只喵
  • [转载] python 解析xml 文件

    首先新建一个xml文件,countries.xml。内容是在python官网上看到的。

    py3study
  • Python中动态创建类的方法

    在Python中,类也是作为一种对象存在的,因此可以在运行时动态创建类,这也是Python灵活性的一种体现。

    drunkdream
  • Python中动态创建类的方法

    在Python中,类也是作为一种对象存在的,因此可以在运行时动态创建类,这也是Python灵活性的一种体现。

    drunkdream
  • AVPlayer初体验之视频解纹理

    xferris

扫码关注云+社区

领取腾讯云代金券