史上最全 Appium 自動化測試從入門到框架實戰(zhàn)精華學習筆記(二)
本系列文章匯總了從 Appium 自動化測試從基礎(chǔ)到框架高級實戰(zhàn)中,所涉及到的方方面面的知識點精華內(nèi)容(如下所示),希望對大家快速總結(jié)和復習有所幫助。

1.Appium 基礎(chǔ) 1 (環(huán)境搭建和簡介)
2.Appium 基礎(chǔ) 2 (元素定位和元素常用方法)
3.Appium 基礎(chǔ) 3 (手勢操作和 uiautomator 查找元素)
4.Appium 基礎(chǔ) 4 (顯式等待)
5.Appium 基礎(chǔ) 5 (toast 和參數(shù)化)
6.Appium 基礎(chǔ) 6 (webview)
7.Appium_ 企業(yè)微信練習 (非 PO,增加和刪除聯(lián)系人)
8.Appium_ 企業(yè)微信練習 ( PO–增加聯(lián)系人)
本文為第二篇,主要講解 Appium 手勢操作、查找元素、顯示等待(附實例代碼)。
9.進入雪球應(yīng)用
10.再主頁從下往上滑動
11.避免使用坐標(代碼用獲取屏幕的長寬來解決這個問題)
12.得下載一個叫手勢密碼鎖的 App,百度一下有
13.進入解鎖的頁面
14.設(shè)置解鎖密碼為一個7字
15.意外發(fā)現(xiàn) Appium 可以指定去不同的初始的 activity,好像也是看應(yīng)用的
優(yōu)點
xpath 定位速度慢
UIAutomator 是 Android 的工作引擎,速度快
滾動查找很方便
缺點
表達式書寫復雜,容易寫錯 IDE 沒有提示
通過 resource-id 定位
通過 classname 定位
通過 content-desc 定位
通過文本定位
組合定位
通過父子關(guān)系定位
driver.find_element_by_android_uiautomator(“表達式”)
注:外層要用單引號,內(nèi)層的字符串用雙引號,因為本來就是 Java,Java 雙引號才表示字符串
通過文本定位
new UiSelector().text(“text文本”)
通過 textContains 模糊匹配
new UiSelector().textContains(“text文本”)
通過某個文本開頭匹配
new UiSelector().textStartWith(“text文本”)
正則表達式匹配
new UiSelector().textMatches(“text文本”)
組合定位
比如 id 與 text 的屬性組合:driver.find_element_by_android_uiautomator(‘new UiSelector().resourceId(“com.xueqiu.android:id/login_account”).text(“我的”)’)
父子關(guān)系定位:childSelector,先定位到父類,再用 childSelector 來定位子類
driver.find_element_by_android_uiautomator(‘new UiSelector().resourceId(“com.xueqiu.android:id/login_account”).childSelector(text(“股票”))’)
兄弟定位:fromParent
driver.find_element_by_android_uiautomator(‘new UiSelector().resourceId(“com.xueqiu.android:id/login_account”).fromParent(text(“股票”))’)
有一些頁面有持續(xù)滑動的能力,比如微博,沒有分頁,可以一直滑動,UIAutomator 提供了滑動的很好的方法。
driver.find_element_by_android_uiautomator(‘new UiScrollable(new UiSelector().’
‘scrollable(true).instance(0)).’
‘scrollIntoView(new UiSelector().textContains(“病人”).’
‘instance(0));’).click()
注意:虛擬機和真機不一樣,有時候真機的滑動是ok的,有時候虛擬機的不ok
強制等待是 sleep,強烈不推薦,設(shè)定的時間太固定,如果是模擬器等待3秒,真機可能只需要等待2秒
driver.implicitly.wat(timeout),貫穿全部元素的等待,只需要設(shè)定一次即可,通常是在創(chuàng)建 driver 的時候后的代碼運行,是 dom 建立之后的等待;
顯示等待是在客戶端的等待:引用兩個包和一個例子
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions
WebDriverWait(self.driver,10).until(expected_conditions.element_to_be_clickable(locator))
顯示等待與隱式等待相對,顯示等待必須在每一個需要等待的元素前面進行聲明
是針對某個特定的元素設(shè)置等待時間,在設(shè)置時間內(nèi),默認美格一段時間檢測一次當前某個元素是否存在
如果在規(guī)定的時間內(nèi)找到元素,則直接執(zhí)行,即找到元素就執(zhí)行相關(guān)操作
如果超過設(shè)置時間檢測不到就拋出異常,默認檢測頻率為0.5s,默認拋出的異常時NoSuchElementException
用到的兩個常用類
WebDriverWait
expected_condition
顯示等待可以等待動態(tài)加載的 AJax 元素,需要配合 expected_condition 來檢查條件
一般頁面上元素的呈現(xiàn)順序是
首先出現(xiàn) title;
然后是 dom 樹的出現(xiàn),presence 還不完整,dom 樹出現(xiàn)就是隱式等待了,但此時的元素可能還沒有是可點擊的狀態(tài),所以只用隱式等待,使用 click 方法,肯定會報錯的;
CSS 出現(xiàn):可見 visbility;
JS 的出現(xiàn),JS 特效執(zhí)行:可點擊 clickable;
HTML 文檔是自上而下加載的
JS 文件加載會阻塞 HTML 內(nèi)容的加載,有些 JS 異步加載的方式來完成 JS 的加載
樣式表下載完成之后跟之前的樣式表一起進行解析,會對之前那的與元素重新渲染
presence-visibility-clickabe,元素出現(xiàn)-可見-可點擊,是元素的三個性質(zhì),當 DOM 樹出現(xiàn)時,定位元素可能已經(jīng)顯示出來了,但是可見和可點擊的屬性可能還沒加載出來,這時候元素的一些方法是不可用的,比如 element.click(),要等到 JS 渲染出來以后,元素的 click 屬性才可以用
對應(yīng)element.is_displayed()
對應(yīng)element.is_selected()
對應(yīng)element.is_enabled()
同步加載:同步模式,又稱阻塞模式,會阻止瀏覽器的后續(xù)處理,停止了后續(xù)的解析,因此停止了后續(xù)的文件加載(如圖像)、渲染、代碼執(zhí)行。
異步加載:異步加載又叫非阻塞,瀏覽器在下載執(zhí)行 JS 同時,還會繼續(xù)進行后續(xù)頁面的處理。
WebDriverWait(self, driver, timeout, poll_frequency=POLL_FREQUENCY, ignored_exceptions=None)
driver:瀏覽器驅(qū)動
timeout:超時時間,單位秒
poll_frequency:檢查的間隔步長,默認是0.5s
ignored_exceptions:超時最后的拋出的異常,默認是NoSuchElementException
通常我們只會用到 driver 和 timeout
WebDriverWait().unti(self, method, message=’’) or until_not()的方法:
method:在等待期間,每個一段時間(init中的poll_frequency)調(diào)用這個傳入的方法,直到返回值不是 False
message:如果超時,拋出 TimeoutException,將 message 傳入異常
until not 是當某個元素小時或什么條件則繼續(xù)執(zhí)行,參數(shù)也相同
Appium 直接幫我們封裝好了類,只需要傳參數(shù)即可,比如我們使用的是 click(),只需要判斷這個元素是否可點擊屬性才繼續(xù)點擊
用法:expected_conditions.element_to_be_clickable(locator),其中 locator 就是:(By.ID, “com.xueqiu.android:id/tv_search”)
常用的幾個如下:
expected_conditions.element_to_be_clickable:元素是否可點擊
expected_conditions.presence_of_element_located:元素是否被加到 Dom 樹里面
expected_conditions.visibility_of_element_located:元素是否可見
更多內(nèi)容,我們在后續(xù)文章分享。
更多技術(shù)干貨文章:https://qrcode.ceba.ceshiren.com/link?name=article&project_id=qrcode&from=hwyun×tamp=1652324005&author=BB
喜歡軟件測試的小伙伴們,如果我的博客對你有幫助、如果你喜歡我的博客內(nèi)容,請 “” “評論” “” 一鍵三連哦!
自動化測試
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應(yīng)法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應(yīng)法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。