您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“Appium常用操作之元素定位、swipe滑屏的操作方法是什么”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
用這個(gè)工具來給大家定位:
實(shí)現(xiàn)一個(gè)截屏(通常情況下這樣用,可以截屏成功)。
建議不用 layui
。layui
在有些情況下定位元素是有問題的。在環(huán)境基本上是正確的情況下,它截圖截不到。所以可以舍棄 layui
,直接用自帶的 uiautomatorviewer
(現(xiàn)在擁有的定位方式,它全部都支持)。
和 Web 自動(dòng)化一樣,Appium 執(zhí)行這個(gè)命令也是需要時(shí)間的。這一行代碼,是進(jìn)入到 app 當(dāng)中,app 在這個(gè)過程中做一件事(一堆的東西),所以即便你運(yùn)行的這只有這一行代碼,它做的事比較多。
感覺上比 Web 等待的時(shí)間要長(zhǎng),但是如果你是用真機(jī)的話比用模擬器快。
所以這個(gè)之前需要等待一下。在 Web 自動(dòng)化等待的時(shí)候用的是這個(gè)WebDriverWait
以及EC
條件表達(dá)。在這里也是一樣,因?yàn)槎际且撁娴却爻霈F(xiàn),等待元素可見。
from selenium.webdriver.common.by import By
from appium.webdriver.common.mobileby import MobileBy
再也不需要用By
了,By
有的id、class
,它都有的。所以,在這個(gè)地方要等到這個(gè)id
出現(xiàn),那就是:
WebDriverWait(driver,20).until(EC.visibility_of_element_located((MobileBy.ID,'com.huyu.yuncaidian:id/id_text')))
這個(gè)是打開 app 之后一定要做的等待工作。
如果默認(rèn)進(jìn)入的就是歡迎界面,要我們左滑右滑的這種,那就sleep
,因?yàn)槟銢]有可識(shí)別的元素。
通過 Activity 的名字來識(shí)別沒有用,因?yàn)樗步?Activity。
可以找到,但是不代表這個(gè)東西出來了。
如果有明確元素的時(shí)候,就不要用time.sleep
了。就等到元素出現(xiàn),再去操作元素。
這個(gè)元素定位和 Web 元素定位一樣的,有多種方式。
安卓和 ios 的手機(jī)屏幕有大小的限制,所以一個(gè)頁面當(dāng)中元素不會(huì)太多,也不會(huì)很密密麻麻。因?yàn)樗枰悴坏芸吹们宄€能用手點(diǎn)得著。所以它會(huì)做的格局上面內(nèi)容偏少,間距也會(huì)比較大。
點(diǎn)擊“我的”
后,頁面內(nèi)容切換。頁面內(nèi)容切換,你就要等,它也是要加載時(shí)間的。
# 某app 2.9.0準(zhǔn)環(huán)境
from appium import webdriver
import time
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from appium.webdriver.common.mobileby import MobileBy
desired_caps={}
# 平臺(tái)類型
desired_caps["platformName"]="Android"
# 平臺(tái)版本號(hào)
desired_caps["platformVersion"]="7.0"
# 設(shè)備名稱
desired_caps["deviceName"]="XPUDU17713003790"
# app 包名
desired_caps["appPackage"]="保密"
# app 入口 acitivity
desired_caps["appActivity"]="保密"
# 連接Appium server。前提:appium desktop要啟動(dòng)。有監(jiān)聽端口。
# 將desired_caps發(fā)送給appium server。打開app
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps)
# 運(yùn)行代碼之前:
#1.appium server啟動(dòng)成功。處于監(jiān)聽狀態(tài)
#2.模擬器/真機(jī)必須能夠被電腦識(shí)別。即adb devices能夠識(shí)別到要操作的設(shè)備。
# 點(diǎn)擊“我的”
time.sleep(5)
# 元素定位-組合定位方式
driver.find_element_by_xpath("//*[@resource-id='com.tfffc.cf:id/id_text' and @text='我的']").click()
#點(diǎn)擊手機(jī)密碼登錄
WebDriverWait(driver,20).until(EC.visibility_of_element_located((MobileBy.ID,'com.tfffc.cf:id/tv_phone_passwad')))
driver.find_element_by_id('com.tfffc.cf:id/tv_phone_passwad').click()
#輸入用戶名、密碼、點(diǎn)擊登錄按鈕
WebDriverWait(driver,20).until(EC.visibility_of_element_located((MobileBy.ID,'com.tfffc.cf:id/editview_phone')))
driver.find_element_by_id('com.tfffc.cf:id/editview_phone').send_keys('輸入手機(jī)號(hào)')
driver.find_element_by_id('com.tfffc.cf:id/editview_phone_password').send_keys('輸入密碼')
driver.find_element_by_id('com.tfffc.cf:id/phone_password_login').click()
Appium 的swipe函數(shù)
是針對(duì)屏幕上的坐標(biāo)來滑動(dòng)的。swipe函數(shù)
是安卓和 IOS 兩種設(shè)備同時(shí)通用。
從一個(gè)點(diǎn)滑到另外一個(gè)點(diǎn),那么每個(gè)點(diǎn)都有 x 值和 y 值。swipe
有 4 個(gè)參數(shù)。所以起始 x,起始 y,結(jié)束 x,結(jié)束 y。
手機(jī)有 5 寸、4.4 寸、5.7 寸的。分辨率是 1280x700,所以它最大的坐標(biāo)點(diǎn)就是 1280x700。不同的安卓廠商、不同的大小,它的分辨率都不一樣,它的坐標(biāo)值是絕對(duì)不一樣的。
這個(gè)怎么辦?怎么兼容下這個(gè)特征比較好?
不需要針對(duì)每個(gè)版型的手機(jī)寫一段代碼,全部通用。
「用坐標(biāo)有個(gè)缺陷:可能適用于某一種手機(jī),換個(gè)手機(jī)就不行了,因?yàn)樽鴺?biāo)值對(duì)不上。」
直接獲取下它的寬和高是多少。針對(duì)屏幕上的某個(gè)坐標(biāo)點(diǎn)來滑動(dòng)的,又不是針對(duì)某一個(gè)元素。整屏滑動(dòng)就是左滑右滑,上滑下滑。
設(shè)置下滑動(dòng)的百分比,如果滑動(dòng)40%-50%
,感覺根本滑動(dòng)不過去。如果能夠獲取到整屏的大小,按百分比來滑動(dòng),滑動(dòng)的距離在70%-90%
,那肯定就能滑過去了。
根據(jù)每個(gè)手機(jī)的 x 軸和 y 軸,確定它的滑屏百分比,那隨便什么樣的手機(jī)都是可以滑屏的。所以在實(shí)現(xiàn)這個(gè)滑屏的時(shí)候,首先獲取屏幕的size
。
get_window_size 返回窗口的寬和高。
返回的是個(gè)字典。
swipe
有 2 個(gè)坐標(biāo)點(diǎn),首先要得到start_x
。
x 軸是width
。size['width']
是 x 軸的最大值。
「所有人的使用習(xí)慣:」 滑屏都是在正中間滑屏或者稍微偏下一點(diǎn)。從一個(gè)頁面滑動(dòng)到另外一個(gè)頁面,y 軸沒有變化。
#height、width
size= driver.get_window_size()
start_x=size['width']*0.9
start_y=size['height']*0.5
#height、width
size= driver.get_window_size()
start_x=size['width']*0.9
start_y=size['height']*0.5
end_x=size["width"]*0.1
swipe
還有個(gè)參數(shù)叫做duration(時(shí)長(zhǎng))
,這個(gè)單位是毫秒
。
看過手機(jī)的操作,如果滑動(dòng)的太快了,根本沒有效果。有的時(shí)候滑動(dòng)的太快了,它還沒來得及響應(yīng)就結(jié)束了。所以可以設(shè)置下duration(時(shí)長(zhǎng))
,放緩一點(diǎn)呢,相對(duì)來說更穩(wěn)定些。
上下滑動(dòng),x 軸不變,x 軸同樣取中間值。但是 y 軸從下往上,值越來越小。
這個(gè)可以把它封裝起來,以后需要的時(shí)候直接調(diào)用就好了,隨便什么設(shè)備都是一樣的。如果webdriver
中有些方法標(biāo)明了僅僅是 ios 或者安卓,那就只能在對(duì)應(yīng)的平臺(tái)上使用。
如果一個(gè)函數(shù)并沒有說明,那么就是大家一起用的,不分彼此。
#height、width
size= driver.get_window_size()
start_x=size['width']*0.9
start_y=size['height']*0.5
end_x=size["width"]*0.1
end_y=size['height']*0.5
#從右向左滑
driver.swipe(start_x,start_y,end_x,end_y,200)
#從左向右滑
driver.swipe(end_x,end_y,start_x,start_y,200)
#向下滑動(dòng)
#向上滑動(dòng):x軸不變,y從大到小
driver.swipe(size["width"]*0.5,size["heigth"]*0.9,size["width"]*0.5,size["heigth"]*0.1)
#向上滑動(dòng):x軸不變,y從小到大
driver.swipe(size["width"]*0.5,size["heigth"]*0.1,size["width"]*0.5,size["heigth"]*0.9)
“Appium常用操作之元素定位、swipe滑屏的操作方法是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。