zoukankan      html  css  js  c++  java
  • appium之模拟坐标方法介绍

    一、模拟坐标定位 

    在appium中模拟坐标定位不到万不得已不要使用,因为不同手机分辨率不同,同样的元素在不同手机的位置不同。

    模拟坐标点击用到了两个方法

    driver.get_window_size()    获取屏幕的宽和高,下面的例子中也可以不用这个方法,将坐标写死。

    driver.tap([(x,y)],3000)    tap 方法和 click 类似,都是点击界面。但是最大的区别是,tap 是针对做坐标而不是针对找到的元素

     第一个参数positions最多可以有五个坐标,代表5根手指,是 list 类型。第二个参数 duration按住停留的时间,单位是毫秒

    以boss直聘为例

    #导包
    from appium import webdriver
    import time
    #准备自动化配置信息
    desired_caps={
        #移动设备平台
        'platformName':'Android',
        #平台OS版本号,写整数位即可
        'plathformVersion':'10',
        #设备的名称--值可以随便写
        'deviceName':'MIUI12.0.1',
        #提供被测app的信息-包名,入口信息:
        #使用命令adb shell dumpsys activity recents | findstr intent={      获取包名和入口信息以/分隔
        'appPackage':'com.hpbr.bosszhipin',
        'appActivity':'.module.launcher.WelcomeActivity',
        #确保自动化之后不重置app
        'noReset':True,
        #设置session的超时时间,单位秒
        'newCommandTimeout':6000,
        #设置底层测试驱动-1.15默认使用的底层驱动就是UiAutomator1
        'automationName':'UiAutomator2',#指定为UiAutomator2
        'skipServerInstallation':True#跳过UI2的安装,如果第一次运行程序,不要添加该配置
    }
    #初始化driver对象-用于控制手机-启动被测应用
    #IP-appium-server所在机器的网络ip,port-监听的端口号,path固定/wd/hub
    driver=webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps)
    driver.implicitly_wait(10)#稳定元素
    
    time.sleep(5)
    #模拟相对坐标
    #获取到手机屏幕的宽度和高度,它是一个字典
    size=driver.get_window_size()
    #将它的宽度赋值给width
    width=size['width']
    #将它的高度赋值给height
    height=size['height']
    y=height/4
    x=width/2
    #模拟坐标点击,positions参数是时间单位ms
    driver.tap([(x,y)],3000)
    input('输入任意字符退出')
    driver.quit()

    二、使用坐标滑动屏幕

    滑动使用的是driver.swipe(x1,y1,x2,y2,duration)

    解释:x1,y1是起始坐标,x2,y2是终止坐标,duration参数时滑动时长

    用法:坐标原点是屏幕的左上角,当x2与x1相等时,我们只需要更改y1和y2的值就可以控制滑动的距离

    更改y1和y2的值大小,就可以控制是向上滑动,还是向下滑动,左右滑动类似。

    #导包
    from appium import webdriver
    import time
    #准备自动化配置信息
    desired_caps={
        #移动设备平台
        'platformName':'Android',
        #平台OS版本号,写整数位即可
        'plathformVersion':'10',
        #设备的名称--值可以随便写
        'deviceName':'MIUI12.0.1',
        #提供被测app的信息-包名,入口信息:
        #使用命令adb shell dumpsys activity recents | findstr intent={      获取包名和入口信息以/分隔
        'appPackage':'com.hpbr.bosszhipin',   #手机桌面包
        'appActivity':'.module.launcher.WelcomeActivity',   #入口
        #确保自动化之后不重置app
        'noReset':True,
        #设置session的超时时间,单位秒
        'newCommandTimeout':6000,
        #设置底层测试驱动-1.15默认使用的底层驱动就是UiAutomator1
        'automationName':'UiAutomator2',#指定为UiAutomator2
        'skipServerInstallation':True#跳过UI2的安装,如果第一次运行程序,不要添加该配置
    }
    #初始化driver对象-用于控制手机-启动被测应用
    #IP-appium-server所在机器的网络ip,port-监听的端口号,path固定/wd/hub
    driver=webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps)
    driver.implicitly_wait(10)
    
    time.sleep(8)
    #模拟滑动
    x1=500
    y1=1300
    x2=x1
    y2=y1-1000
    driver.swipe(x1,y1,x2,y2)
    input('滑动结束')
    driver.quit()

     三、使用坐标模拟长按效果

    需求:我们对手机桌面应用长按

    首先,获取手机桌面包名和入口信息,在命令行输入:使用命令adb shell dumpsys activity recents | findstr intent={ 

    然后,使用tap方法,获取想要长按的坐标,时间参数可根据长按的时间来定

    最后,尝试下面的代码

    #导包
    from appium import webdriver
    import time
    #准备自动化配置信息
    desired_caps={
        #移动设备平台
        'platformName':'Android',
        #平台OS版本号,写整数位即可
        'plathformVersion':'10',
        #设备的名称--值可以随便写
        'deviceName':'MIUI12.0.1',
        #提供被测app的信息-包名,入口信息:
        'appPackage':'com.miui.home',   #手机桌面包
        'appActivity':'.launcher.Launcher',   #入口
        #确保自动化之后不重置app
        'noReset':True,
        #设置session的超时时间,单位秒
        'newCommandTimeout':6000,
        #设置底层测试驱动-1.15默认使用的底层驱动就是UiAutomator1
        'automationName':'UiAutomator2',#指定为UiAutomator2
        'skipServerInstallation':True#跳过UI2的安装,如果第一次运行程序,不要添加该配置
    }
    #初始化driver对象-用于控制手机-启动被测应用
    #IP-appium-server所在机器的网络ip,port-监听的端口号,path固定/wd/hub
    driver=webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps)
    driver.implicitly_wait(10)#稳定元素
    
    time.sleep(5)
    #设置手指停留时间---模拟长按效果
    driver.tap([(530,650)],5000)
    
    input('输入任意键退出代码')
    driver.quit()
  • 相关阅读:
    vue 中 vue-router、transition、keep-alive 怎么结合使用?
    vue 对列表数组删除和增加
    eclipse如何快速查找某个类
    在 eclipse 中设置每行的字数
    如何查看某个端口被谁占用
    sql只修改第一二行数据
    android真机自动化测试
    appium自动化测试中获取toast消息的解决方法【转】
    eclipse下python的selenium自动化环境的搭建
    Xpath用法官方手册
  • 原文地址:https://www.cnblogs.com/king2/p/13682138.html
Copyright © 2011-2022 走看看