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