Appium語法知識點(第一篇)

一、元素定位操作API

1.定位一個元素

(1)driver.find_element_by_id(值)

傳入的參數:resource-id的值
(2)driver.find_element_by_class_name(值)

傳入的參數:class的值
(3)driver.find_element_by_xpath(值)

傳入的參數:xpath表達式

例:driver.find_element_by_xpath("http://*[@content-desc='收起']")

里面的content-desc是定位的類型,收起是值

注:定位到這個值的第一個元素

2.定位一組元素

在1中element變成elements,就可以定位到這個值的所有元素

3.定位元素的注意點

示例

使用find_element_by_xx或者find_elements_by_xx的方法,分別傳入一個沒有的"特征"會有什么結果?

小結

1.如果使用find_element_by_xx方法,如果傳入一個沒有的特征,會報NoSuchElementException的錯誤
2.如果使用find_elements_by_xx方法,如果傳入一個沒有的特征,不會報錯,會返回一個空列表

二、元素等待

1.應用場景

可能由于一些原因,我們想找的元素并沒有立刻出來,此是結果直接定位可能會報錯,比如以下原因:

1.由于網絡速度原因

2.服務器處理請求原因

3.電腦配置原因

2.隱式等待

關鍵方法:

1.通過driver對象調用implicitly_wait方法
例:driver.implicitly_wait(10) ##意思是在10s內等待定位的元素出現
2.設置超時時間

作用:

1.在設置了超時時間之后,后續(xù)所有的定位元素的方法都會在這個時間內等待元素的出現
2.如果出現了,直接進行后續(xù)操作
3.如果沒有出現,報錯:NoSuchElementExcepition

3.顯式等待

關鍵方法:

1.關鍵類:WebDriverWait
例:
from selenium.webdriver.support.ui import WebDriverWait
#顯式等待(對單個定位的元素)
click_agree = WebDriverWait(driver,5,1).until(lambda x:x.find_element_by_id("com.taobao.taobao:id/provision_positive_button"))#尋找同意按鈕
#5代表等待5秒,1代表每1秒尋找一次元素,不填1則默認為0.5秒尋找一次元素
click_agree.click()#點擊同意按鈕
2.關鍵方法:WebDriverWait對象中的until的方法

作用:

1.在設置了顯示等待之后,可以等待一個超時時間,在這個超時時間之內進行查找,默認每0.5秒找一次
2.0.5秒的頻率是可以設置的
3.一但找到這個元素,直接進行后續(xù)操作
4.如果沒有找到,報錯:TimeOutException

三、元素操作API

1.點擊元素操作

關鍵方法:

click()
例;
driver.find_element_by_id("com.taobao.taobao:id/provision_positive_button").click()

2.對輸入框進行文字輸入操作

關鍵方法:

send_keys("要輸入的文字")
例:
driver.find_element_by_id("com.taobao.taobao:id/provision_positive_button").send_keys("要輸入的文字")

注意點:

默認輸入中文是有問題的,需要在連接手機的參數中加多兩行代碼
desired_caps['unicodeKeyboard'] = True # 使用unicodeKeyboard的編碼方式來發(fā)送字符串
desired_caps['resetKeyboard'] = True  # 將鍵盤給隱藏起來

3.對輸入框進行文字的清空操作

關鍵方法:

clear()

4.獲取元素的位置和大小

search_button = driver.find_element_by_id("xxxxx")
print(search_button.location) #獲取這個元素的X和y軸坐標
print(search_button.location["x"])#獲取這個元素的x軸坐標
print(search_button.location["y"])#獲取這個元素的y軸坐標
print(search_button.size)#獲取這個元素圖標的寬高
print(search_button.size["width"])#獲取這個元素圖標的寬
print(search_button.size["high"])#獲取這個元素圖標的高

注意點

1.location和size最后獲得的都是一個字典,前者key為x和y,后者key為width和high
2.獲取的數據類型都是int

5.獲取元素的屬性值

關鍵方法:
get_attribute("value")
eles = driver.find_element_by_id("xxxxx")
for i in eles:
    print(i.get_attribute("enabled"))#獲取這個元素屬性名為enabled的屬性值
    print(i.get_attribute("clickable"))#獲取這個元素屬性名為clickable的屬性值

注意點

填入get_attribute("value")
value = 'text'返回text的屬性值
value = 'name'返回content-desc/text屬性值
value = 'className'返回class屬性值,只有API ==> 18才支持
value = 'resourceId'返回resource-id屬性值,只有API ==> 18才支持

四、滑動和拖拽事件

1.swipe滑動事件

概念:

從一個坐標位置滑動到另一個坐標位置,只能是兩個點之間的滑動

方法名

參數:
start_x:  起點x軸坐標
start_y:  起點y軸坐標
end_x:    終點x軸坐標
end_y:    終點y軸坐標
duration: 滑動這個操作一共持續(xù)的時間長度,單位:ms
driver.swipe(start_x,start_y,end_x,end_y,duration=None)

注意點

時間越長,慣性越小
時間越短,慣性越大

2.scroll滑動事件

概念

從一個元素滑動到另一個元素,直到頁面自動停止

方法名

參數
origin_el:  滑動開始的元素
destination_el:  滑動結束的元素
driver.scroll(orgin_el,destination_el)

示例

save_button = driver.find_element_by_id("xxx")
more_button = driver.find_element_by_id("xxx")
driver.scroll(save_button,more_button)

3.drag_and_drop拖拽事件

和scroll方法相似

方法名

參數
origin_el:  滑動開始的元素
destination_el:  滑動結束的元素
driver.drag_and_drop(orgin_el,destination_el)

五、高級手機TouchAction

注意:先導入包

from appium.webdriver.common.touch_action import TouchAction 

使用步驟

1.創(chuàng)建TouchAction對象
2.通過對象調用想執(zhí)行的手勢
3.通過perform()執(zhí)行操作

1.手指輕敲操作

應用場景

模擬手指對某個元素或坐標按下并快速抬起。比如,固定點擊(100,100)的位置

方法名

參數
element:  元素
x:        x坐標
y:        y坐標
TouchAction(driver).tap(element=None,x=None,y=None).perform()

示例

方法一:
TouchAction(driver).tap(x=453,y=1104).perform() #用坐標輕敲點擊
方法二:
ele = driver.find_element_by_id("com.taobao.taobao:id/provision_positive_button")
TouchAction(driver).tap(element=ele).perform()#用元素定位輕敲點擊

2.按下和抬起操作

應用場景

模擬手指一直按下,模擬手指抬起。可以用來組合撐輕敲或者長按的操作

方法名

模擬手指對元素或者坐標按下操作
參數
element:  元素
x:        x坐標
y:        y坐標
TouchAction(driver).press(element=None,x=None,y=None).perform()
模擬手指對元素或者坐標抬起操作
TouchAction(driver).release().perform()

示例:

TouchAction(driver).press(x=453,y=1104).perform() #按下
time.sleep(3) #停3秒
TouchAction(driver).release().perform() #抬起

3.等待操作

應用場景

模擬手指等待,比如按下后等待5秒之后再抬起

方法名

模擬手指暫停的操作
參數
ms:  暫停的毫秒數
TouchAction(driver).wait(ms=0).perform()

示例

TouchAction(driver).press(x=453,y=1104).wait(3000).release().perform()

4.長按操作

應用場景

模擬手指對元素或坐標的長按操作。比如,長按某個按鈕彈出菜單

方法名

參數
element:  元素
x:        x坐標
y:        y坐標
duration  長按時間,毫秒
TouchAction(driver).long_press(element=None,x=None,y=None,duration=1000).perform()

示例

TouchAction(driver).long_press(x=453,y=1104,duration=1000).release().perform()

5.移動操作

應用場景

模擬手指移動操作,比如,手勢解鎖需要先按下,再移動

方法名

element:  元素
x:        x坐標
y:        y坐標
TouchAction(driver).move_to(element=None,x=None,y=None).perform()

示例

圖案解鎖
TouchAction(driver).press(x=453,y=1104).move_to(x=897,y=987).move_to(x=665,y=897).release().perform()

六、手機操作API

1.獲取手機分辨率

應用場景

自動化測試可能會需要根據當前設備的屏幕分辨率來計算一些點擊或者滑動的坐標

方法名

driver.get_window_size()

示例

print(driver.get_window_size())

2.手機截圖

應用場景

有些自動化操作可能沒有反應,但并不報錯,此時我們就可以將操作過后的關鍵情況,截圖留存,后期也可以根據圖片發(fā)現問題。

方法名

參數
filename:  指定路徑下,指定格式的圖片
get_screenshot_as_file(filename)

示例

driver.get_screenshot_as_file(D:\android-sdk\screen.jpg)

3.獲取手機網絡

屬性名

driver.network_connection

示例

print(driver.network_connection)

4.設置當前網絡

示例

driver.network_connection(1)
#看函數方法,1則為飛行模式

延伸

from appium.webdriver.connectiontype import ConnectionType
#判斷有沒有用流量
if driver.network_connection == ConnectionType.DATA_ONLY:
    print(1)
else:
    print(0)

5.發(fā)送鍵到設備

方法名

參數
keycode:  發(fā)送給設備的關鍵代碼
metastate:  關于背發(fā)送的關鍵代碼的元信息,一般為默認值
driver.press_keycode(keycode,metastate=None)

注意點

按鍵對應的編碼,可以在百度搜索關鍵字“android keycode”

示例

#點擊三次音量加,再點擊返回
driver.press_keycode(24)
driver.press_keycode(24)
driver.press_keycode(24)
driver.press_keycode(4)

6.操作手機的控制欄

方法名

driver.open_notifications()
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
禁止轉載,如需轉載請通過簡信或評論聯系作者。

友情鏈接更多精彩內容