一、模拟坐标定位
在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()