做者:清菡
博客:oschina、雲+社區、知乎等各大平臺都有。ios
用這個工具來給你們定位:web
實現一個截屏(一般狀況下這樣用,能夠截屏成功)。app
建議不用 layui
。layui
在有些狀況下定位元素是有問題的。在環境基本上是正確的狀況下,它截圖截不到。因此能夠捨棄 layui
,直接用自帶的 uiautomatorviewer
(如今擁有的定位方式,它所有都支持)。函數
和 Web 自動化同樣,Appium 執行這個命令也是須要時間的。這一行代碼,是進入到 app 當中,app 在這個過程當中作一件事(一堆的東西),因此即使你運行的這隻有這一行代碼,它作的事比較多。工具
感受上比 Web 等待的時間要長,可是若是你是用真機的話比用模擬器快。測試
因此這個以前須要等待一下。在 Web 自動化等待的時候用的是這個WebDriverWait
以及EC
條件表達。在這裏也是同樣,由於都是要頁面等待元素出現,等待元素可見。ui
from selenium.webdriver.common.by import By
code
from appium.webdriver.common.mobileby import MobileBy
orm
不再須要用By
了,By
有的id、class
,它都有的。因此,在這個地方要等到這個id
出現,那就是:server
WebDriverWait(driver,20).until(EC.visibility_of_element_located((MobileBy.ID,'com.huyu.yuncaidian:id/id_text')))
這個是打開 app 以後必定要作的等待工做。
若是默認進入的就是歡迎界面,要咱們左滑右滑的這種,那就sleep
,由於你沒有可識別的元素。
經過 Activity 的名字來識別沒有用,由於它也叫 Activity。
能夠找到,可是不表明這個東西出來了。
若是有明確元素的時候,就不要用time.sleep
了。就等到元素出現,再去操做元素。
這個元素定位和 Web 元素定位同樣的,有多種方式。
安卓和 ios 的手機屏幕有大小的限制,因此一個頁面當中元素不會太多,也不會很密密麻麻。由於它須要你不但要能看得清楚還能用手點得着。因此它會作的格局上面內容偏少,間距也會比較大。
點擊「個人」
後,頁面內容切換。頁面內容切換,你就要等,它也是要加載時間的。
# 某app 2.9.0準環境 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={} # 平臺類型 desired_caps["platformName"]="Android" # 平臺版本號 desired_caps["platformVersion"]="7.0" # 設備名稱 desired_caps["deviceName"]="XPUDU17713003790" # app 包名 desired_caps["appPackage"]="保密" # app 入口 acitivity desired_caps["appActivity"]="保密" # 鏈接Appium server。前提:appium desktop要啓動。有監聽端口。 # 將desired_caps發送給appium server。打開app driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps) # 運行代碼以前: #1.appium server啓動成功。處於監聽狀態 #2.模擬器/真機必須可以被電腦識別。即adb devices可以識別到要操做的設備。 # 點擊「個人」 time.sleep(5) # 元素定位-組合定位方式 driver.find_element_by_xpath("//*[@resource-id='com.tfffc.cf:id/id_text' and @text='個人']").click() #點擊手機密碼登陸 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() #輸入用戶名、密碼、點擊登陸按鈕 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('輸入手機號') 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函數
是針對屏幕上的座標來滑動的。
swipe函數
是安卓和 IOS 兩種設備同時通用。
從一個點滑到另一個點,那麼每一個點都有 x 值和 y 值。swipe
有 4 個參數。因此起始 x,起始 y,結束 x,結束 y。
手機有 5 寸、4.4 寸、5.7 寸的。分辨率是 1280x700,因此它最大的座標點就是 1280x700。不一樣的安卓廠商、不一樣的大小,它的分辨率都不同,它的座標值是絕對不同的。
這個怎麼辦?怎麼兼容下這個特徵比較好?
不須要針對每一個版型的手機寫一段代碼,所有通用。
用座標有個缺陷:可能適用於某一種手機,換個手機就不行了,由於座標值對不上。
直接獲取下它的寬和高是多少。針對屏幕上的某個座標點來滑動的,又不是針對某一個元素。整屏滑動就是左滑右滑,上滑下滑。
設置下滑動的百分比,若是滑動40%-50%
,感受根本滑動不過去。若是可以獲取到整屏的大小,按百分比來滑動,滑動的距離在70%-90%
,那確定就能滑過去了。
根據每一個手機的 x 軸和 y 軸,肯定它的滑屏百分比,那隨便什麼樣的手機都是能夠滑屏的。因此在實現這個滑屏的時候,首先獲取屏幕的size
。
get_window_size 返回窗口的寬和高。
返回的是個字典。
swipe
有 2 個座標點,首先要獲得start_x
。
x 軸是width
。size['width']
是 x 軸的最大值。
全部人的使用習慣: 滑屏都是在正中間滑屏或者稍微偏下一點。從一個頁面滑動到另一個頁面,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
還有個參數叫作duration(時長)
,這個單位是毫秒
。
看過手機的操做,若是滑動的太快了,根本沒有效果。有的時候滑動的太快了,它還沒來得及響應就結束了。因此能夠設置下duration(時長)
,放緩一點呢,相對來講更穩定些。
上下滑動,x 軸不變,x 軸一樣取中間值。可是 y 軸從下往上,值愈來愈小。
這個能夠把它封裝起來,之後須要的時候直接調用就行了,隨便什麼設備都是同樣的。若是webdriver
中有些方法標明瞭僅僅是 ios 或者安卓,那就只能在對應的平臺上使用。
若是一個函數並無說明,那麼就是你們一塊兒用的,不分彼此。
#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) #向下滑動 #向上滑動:x軸不變,y從大到小 driver.swipe(size["width"]*0.5,size["heigth"]*0.9,size["width"]*0.5,size["heigth"]*0.1) #向上滑動:x軸不變,y從小到大 driver.swipe(size["width"]*0.5,size["heigth"]*0.1,size["width"]*0.5,size["heigth"]*0.9)
公衆號清菡軟件測試首發,更多原創文章:清菡軟件測試 94+原創文章,歡迎關注、交流,禁止第三方擅自轉載。
感謝支持清菡原創,歡迎點擊在看和轉發!