溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Appium常用操作之元素定位、swipe滑屏的操作方法是什么

發(fā)布時(shí)間:2021-10-25 17:14:26 來源:億速云 閱讀:231 作者:iii 欄目:編程語言

本篇內(nèi)容介紹了“Appium常用操作之元素定位、swipe滑屏的操作方法是什么”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

一、打開 uiautomatorviewer

用這個(gè)工具來給大家定位:

Appium常用操作之元素定位、swipe滑屏的操作方法是什么  
Appium常用操作之元素定位、swipe滑屏的操作方法是什么  

實(shí)現(xiàn)一個(gè)截屏(通常情況下這樣用,可以截屏成功)。

 

二、Appium 常用操作

 

1.用 layui 做 app 元素定位的時(shí)候會(huì)報(bào)錯(cuò)怎么辦?

建議不用 layui。layui 在有些情況下定位元素是有問題的。在環(huán)境基本上是正確的情況下,它截圖截不到。所以可以舍棄 layui,直接用自帶的 uiautomatorviewer(現(xiàn)在擁有的定位方式,它全部都支持)。

 

2.不等待,直接去找這個(gè)元素會(huì)報(bào)錯(cuò)嗎?

和 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),等待元素可見。

 

3.如果是 Web 自動(dòng)化,會(huì) import By,在 Appium 中 MobileBy 有 8 種定位方式。如果現(xiàn)在還用 By,就沒辦法用到 uiautomator 以及 accessibility_id。

 
所以在移動(dòng)端當(dāng)中代碼:

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 之后一定要做的等待工作。

 

4.如果是歡迎頁面,沒有這種元素怎么辦?

如果默認(rèn)進(jìn)入的就是歡迎界面,要我們左滑右滑的這種,那就sleep因?yàn)槟銢]有可識(shí)別的元素。

通過 Activity 的名字來識(shí)別沒有用,因?yàn)樗步?Activity。

Appium常用操作之元素定位、swipe滑屏的操作方法是什么  

可以找到,但是不代表這個(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 并登錄

#  某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()

   

四、移動(dòng)端特有的操作

 

1.swipe 滑屏操作

Appium 的swipe函數(shù)是針對(duì)屏幕上的坐標(biāo)來滑動(dòng)的。swipe函數(shù)是安卓和 IOS 兩種設(shè)備同時(shí)通用。

Appium常用操作之元素定位、swipe滑屏的操作方法是什么  

從一個(gè)點(diǎn)滑到另外一個(gè)點(diǎn),那么每個(gè)點(diǎn)都有 x 值和 y 值。swipe有 4 個(gè)參數(shù)。所以起始 x,起始 y,結(jié)束 x,結(jié)束 y。

 

2.如果寫一個(gè)操作,所有的手機(jī)都能適用,是不是應(yīng)該考慮屏幕的尺寸呢?

手機(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ì)不上。」

 

3.有沒有什么辦法可以獲取整個(gè)設(shè)備的尺寸大???

直接獲取下它的寬和高是多少。針對(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。

 

4.屏幕的 size 怎么獲取呢?

 
有個(gè)專門的函數(shù):

get_window_size 返回窗口的寬和高。

Appium常用操作之元素定位、swipe滑屏的操作方法是什么  
 
get_window_size()這個(gè)函數(shù)的返回值:

返回的是個(gè)字典。

Appium常用操作之元素定位、swipe滑屏的操作方法是什么  
 

5.這個(gè)東西想一口氣把它滑過來,不能出現(xiàn)滑動(dòng)到半路上又回去了。如果我要從右邊滑到左邊,起點(diǎn)和終點(diǎn)怎么選?

swipe有 2 個(gè)坐標(biāo)點(diǎn),首先要得到start_x

x 軸是width。size['width']是 x 軸的最大值。

「所有人的使用習(xí)慣:」 滑屏都是在正中間滑屏或者稍微偏下一點(diǎn)。從一個(gè)頁面滑動(dòng)到另外一個(gè)頁面,y 軸沒有變化。

 
所以 y 值是固定的,就取個(gè)中間值 0.5:
#height、width
size= driver.get_window_size()
start_x=size['width']*0.9
start_y=size['height']*0.5
   
滑動(dòng)的間距最好是達(dá)到 80%以上,這樣寫,間距就是 0.8 了:
#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è)單位是毫秒。

 

6.準(zhǔn)備花多長(zhǎng)時(shí)間去滑動(dòng)呢?

看過手機(jī)的操作,如果滑動(dòng)的太快了,根本沒有效果。有的時(shí)候滑動(dòng)的太快了,它還沒來得及響應(yīng)就結(jié)束了。所以可以設(shè)置下duration(時(shí)長(zhǎng)),放緩一點(diǎn)呢,相對(duì)來說更穩(wěn)定些。

 
向上向下滑動(dòng)的時(shí)候,start_x 是?

上下滑動(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í)用文章!

向AI問一下細(xì)節(jié)

免責(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)容。

AI