一、基礎(chǔ)操作
1.1 尋找activity & package
- 命令行輸入
adb shell dumpsys window | grep mFocusedApp
1.2 關(guān)閉app跟驅(qū)動
-
關(guān)閉app
close_app() -
關(guān)閉驅(qū)動
quit()
1.3 安裝跟卸載以及判斷
- 安裝應(yīng)用
install_app('path')
- 卸載應(yīng)用
remove_app('package_name')
- 判斷某個(gè)應(yīng)用是否安裝
is_app_installed('package_name')
1.4 模擬按home鍵
background_app(time)
二、元素定位
-
注意點(diǎn)
- 當(dāng)前屏幕范圍內(nèi)可見
2.1 定位一個(gè)元素
-
通過id定位
driver.find_element_by_id(id_value) -
通過class_name定位
driver.find_element_by_class_name(class_value) -
通過xpath定位 (content_desc)?
driver.find_element_by_xpath(xpath_value)
2.2 定位一組元素
-
通過id定位
driver.find_elements_by_id(id_value) -
通過class_name定位
driver.find_elements_by_class_name(class_value) -
通過xpath定位 (content_desc)?
driver.find_elements_by_xpath(xpath_value)
三、元素等待
3.1 顯式等待
- 關(guān)鍵類:WebDriverWait
- 學(xué)會封裝
- 在設(shè)置了顯示等待之后,在等待時(shí)間之捏,以設(shè)置的頻率進(jìn)行定位
wait = WebDriverWait(driver, time, frequency)
wait.until(lambda x: x.find_elements_by_id(id_value))
3.2 隱式等待
- 在設(shè)置了超時(shí)時(shí)間后,在該等待時(shí)間內(nèi)等待定位元素。
- 出現(xiàn),則直接進(jìn)行后續(xù)操作;沒出現(xiàn),報(bào)錯(cuò)。
driver.implicity_wait(time)
3.3 隱式等待與顯示等待的選擇
- 作用域:
- 顯式等待單個(gè)有效,隱式等待全劇有效
- 方法:
- 顯式等待方法封裝在WebDriverWait類里,而隱式等待則可以直接調(diào)用
- 對比:
- 使用角度上:
- 隱式等待簡單
- 顯式等待相對負(fù)責(zé)
- 靈活性上:
- 顯式等待靈活,針對每一個(gè)元素
- 隱式等待針對全局
- 對比sleep
- sleep時(shí)間固定,造成時(shí)間上的浪費(fèi)
- 元素等待可以讓元素出來之后第一時(shí)間進(jìn)行操作。
- 使用角度上:
四、元素操作
4.1 元素點(diǎn)擊
-
點(diǎn)擊
element.click()
4.2 輸入與清空輸入框內(nèi)容
-
輸入輸入框
element.send_keys('text')-
注意點(diǎn):輸入中文可能有問題,加入以下兩行代碼
dedired_caps['unicodekeyboard'] = True dedired_caps['resetkeyboard'] = True
-
-
清空輸入框
element.clear()
4.3 獲取元素文本
-
獲取文本
element.text
4.4 獲取元素大小與位置
-
獲取元素大小
返回字典:{height :_ , width : _ ,}兩個(gè)值,int類型
element.location -
獲取元素位置
返回字典:{x :_ , y : _ ,} 兩個(gè)值(int類型)
element.size
4.5 獲取元素屬性
-
元素屬性
element.get_attribute(value)-
注意點(diǎn)
有一些屬性的名稱不同,寫法應(yīng)發(fā)生改變
value = 'text' 返回 content-desc/text 屬性值
value = 'resourceId' 返回 resource-id 屬性值,只有API>18才支持
value = 'className' 返回 class 屬性值,只有API>18才支持
-
五、滑動拖拽事件
5.1 swipe 滑動事件
-
方法
從一個(gè)坐標(biāo)位置點(diǎn)到另一個(gè)坐標(biāo)位置點(diǎn)
driver.swipe(start_x, start_y, end_x, end_y, duration=None)- 注意點(diǎn)
- 有誤差
- duration為ms
- 時(shí)間越長,慣性越小
- 距離越長,實(shí)際距離也越大
- 注意點(diǎn)
5.2 scroll 滑動事件
-
方法
從一個(gè)元素劃到另一個(gè)元素,直到頁面停止
driver.scoll(origin_el, destination_el)- 小結(jié)
- 不能設(shè)置持續(xù)時(shí)間,慣性很大
- 小結(jié)
5.3 drag_and_drop 拖拽事件
-
方法
從一個(gè)元素滑到另一個(gè)元素,第二個(gè)元素替代第一個(gè)元素的位置
driver.drag_and_drop(origin_el, destination_el)- 小結(jié)
- 不能設(shè)置持續(xù)時(shí)間,沒有慣性
- 小結(jié)
5.4 滑動事件和拖拽事件的選擇
看是否存在慣性,以及傳參是元素還是坐標(biāo)
- 有慣性,傳元素
- scroll
- 無慣性,傳元素
- drag_and_drop
- 有慣性,傳坐標(biāo)
- swipe,較短的duration
- 無慣性,傳坐標(biāo)
- swipe,較長的duration