appium---appium 常見API

之前有一段時(shí)間學(xué)習(xí)過appium框架,這次趁機(jī)借著已報(bào)名參加的線上課程,重新認(rèn)識(shí)了一遍appium框架,總能從中收獲一點(diǎn)意外的小驚喜

我們都知道,appium的核心其實(shí)就是一個(gè)web服務(wù)器,它提供了一套R(shí)EST的接口。它收到客戶端的連接、監(jiān)控命令,之后在移動(dòng)設(shè)備上執(zhí)行這些命令,最后把執(zhí)行結(jié)果放在HTTP響應(yīng)中返回給客戶端。基于上述原理,appium框架提供了一系列的API供調(diào)用,可用python3 -m pydoc -b命令在本地打開API文檔
? ?appium API 整體大致可歸納為:

整體大致情況
  • 控件定位
  • find_element_by_id(self, id_)
    通過元素的id定位,返回含有該屬性的元素,在android上 app上即resource id
  • find_elements_by_id(self, id_)
    通過元素的id定位,返回含有該屬性的所有元素
用法
driver. find_element_by_id(“id”)
driver. find_elements_by_id(“id”)
其中一個(gè)區(qū)別需要注意:
找不到元素時(shí),find_element_*會(huì)拋出異常,而find_elements_*不會(huì),以下其他定位方式同理
  • find_element_by_name(self, name)
    通過元素Name定位,返回含有該屬性的元素,對(duì)于android,即text屬性
  • find_elements_by_name(self, name)
    通過元素Name定位(元素的名稱屬性text),含有該屬性的所有元素
用法
driver. find_element_by_name(“name”)
driver. find_elements_by_name(“name”)
  • find_element_by_xpath(self, xpath)
    通過Xpath定位,返回含有該屬性的元素
  • find_elements_by_xpath(self, xpath)
    通過Xpath定位,返回含有該屬性的所有元素
用法
driver. find_element_by_name(“Xpath”)
driver. find_elements_by_name(“Xpath”)
  • find_element_by_class_name(self,class_name)
    通過元素class name屬性定位,返回包含該屬性的元素
  • find_elements_by_class_name(self,class_name)
    通過元素class name屬性定位,返回包含該屬性的所有元素
用法 
driver. find_element_by_class_name(“android.widget.LinearLayout”)
driver. find_elements_by_class_name(“android.widget.LinearLayout”)
  • find_element_by_accessibility_id(self,accessibility_id)
  • find_elements_by_accessibility_id(self,accessibility_id)
    通過accessibility id定位,在android app上相當(dāng)于content-description字段,而在ios app 上accessibility identifier字段
用法
 driver.find_element_by_accessibility_id()
 該字段存在的意義主要是為了一些有殘障的人士準(zhǔn)備的,方便他們使用程序
  • find_element_by_android_uiautomator(self,uiautomator)
    根據(jù)UIautomator定位元素,僅android
  • find_elements_by_android_uiautomator(self,uiautomator)
用法
driver.find_element_by_android_uiautomator('.elements()[1].cells()[2]')
driver.find_element_by_android_uiautomator('**new UiSelector()**.text("Custom View")').click() #根據(jù)text屬性定位,并點(diǎn)擊
text屬性的方法
driver.find_element_by_android_uiautomator('new UiSelector().textContains("View")').click()        #textContains
driver.find_element_by_android_uiautomator('new UiSelector().textStartsWith("Custom")').click()    #textStartsWith
driver.find_element_by_android_uiautomator('new UiSelector().textMatches("^Custom.*")').click()    #textMatches
  • find_element_by_ios_uiautomation(self,uia_string)
  • find_elements_by_ios_uiautomation(self,uia_string)
    在iOS中通過uiautomation找到一個(gè)元素
用法
driver.find_element_by_ios_uiautomation('.elements()[1] .cells()[2]')
  • 動(dòng)作操作
  • click(self) 點(diǎn)擊
用法
element.click()
  • send_keys(self, *value)
    在元素中模擬輸入(開啟appium自帶的輸入法并配置了appium輸入法后,即unicodeKeyboard、resetKeyboard,可以輸入中英文)
用法
element.send_keys(“測試”)
  • clear(self) 清除輸入的內(nèi)容
用法
element.clear()
  • swipe(self, start_x, start_y, end_x, end_y, duration=None) 滑動(dòng)
    主要用于緩慢滑動(dòng),從(start_x, start_y)點(diǎn)滑動(dòng)到(end_x, end_y)點(diǎn),可以自定義duration【毫秒】滑動(dòng)時(shí)間
用法
driver.swipe(100,100,100,400)
  • flick(self, start_x, start_y, end_x, end_y) 快速滑動(dòng)
    主要用于快速滑動(dòng),無duration,如View切換,按?。╯tart_x, start_y)點(diǎn)后快速滑動(dòng)至(end_x, end_y)點(diǎn)
用法
driver.flick(100,100,100,400)
  • shake(self) 搖一搖 (待嘗試使用)
用法
driver.shake()
  • lock(self, seconds) 鎖屏,ios僅有 (待嘗試使用)
    鎖屏一段時(shí)間 , iOS專有
    用法 
driver.lock()
  • scroll(self, origin_el, destination_el) 滾動(dòng)
    從元素origin_el滾動(dòng)至元素destination_el,只有iOS可以使用
用法
 driver.scroll(el1,el2)
  • drag_and_drop(self, origin_el, destination_el) 拖放
    將元素origin_el拖到目標(biāo)元素destination_el
用法
driver.drag_and_drop(el1,el2)
  • zoom(self, element=None, percent=200, steps=50) 放大
    在元素上執(zhí)行放大
用法
driver.zoom(element)#默認(rèn)分成50步完成,放大量為200%
  • pinch(self, element=None, percent=200, steps=50) 縮小
    在元素上執(zhí)行縮小
用法
driver. pinch (element)
  • tap(self, positions, duration=None) 點(diǎn)擊
    模擬手指點(diǎn)擊(最多五個(gè)手指),可設(shè)置按住時(shí)間長度(單位毫秒),positions參數(shù)為單位為元組的列表,如[(x1,y1),(x2,y2)]
用法
driver.tap([(300,500)],10)
  • keyevent(self, keycode, metastate=None) 發(fā)送按鍵碼
    發(fā)送按鍵碼(安卓僅有),常見的有:
    • KEYCODE_HOME (按鍵Home) : 3
    • KEYCODE_MENU (菜單鍵) : 82
    • KEYCODE_BACK (返回鍵) : 4`
用法
driver.keyevent(4) #返回
  • 獲取設(shè)備及控件相關(guān)信息
    • get_window_size (self, windowHandle='current')
      獲取當(dāng)前設(shè)備的寬、高
用法
width=driver.get_window_size()['width']
height=driver.get_window_size()['height']
  • location
    獲取元素的左上角坐標(biāo)
用法
x=element.location['x']
y=element.location['y']
  • size
    獲取元素的寬、高
用法
width=element.size['width']
height=element.size['height']
  • current_activity
    獲取設(shè)備當(dāng)前的activity值
用法
driver.current_activity
  • context (平時(shí)暫時(shí)沒用到,待研究)
    獲取當(dāng)前會(huì)話的當(dāng)前上下文
用法
driver.context
  • app_strings(self, language=None, string_file=None)
    對(duì)于Android,獲取app的strings.xml文件內(nèi)容,ios待試
driver.app_strings()
  • 其他操作
  • wait_activity(self, activity, timeout, interval=1) 等待指定activity的出現(xiàn)
    等待指定activity的出現(xiàn),返回true or false,默認(rèn)是輪詢間隔是1s,需要值得注意的是這里的參數(shù)是current_activity打印出來的值,即不包含包名
用法
driver.wait_activity(activity,timeout,interval)
  • quit(self) 退出
    退出腳本運(yùn)行,并關(guān)閉每個(gè)相關(guān)的窗口連接
用法
driver.quit()
  • background_app(self, seconds) 后臺(tái)運(yùn)行
    把a(bǔ)pp放置于后臺(tái)運(yùn)行,設(shè)置時(shí)間seconds,單位s,相當(dāng)于一段時(shí)間后重啟app,而不是home將app放置后臺(tái)
用法
driver.background_app(3)
  • save_screenshot(self, filename) 截圖
    截圖,filename參數(shù)為路徑,包含文件名稱
用法
driver.save_screenshot('/Screenshots/foo.png')

結(jié)語
? ?以上各種方法僅代表個(gè)人在日常測試中經(jīng)常使用或者嘗試去用的方法,實(shí)際上,appium 提供的API還有很多,以后遇到再繼續(xù)說。另外,在編寫自動(dòng)化腳本的時(shí)候通常會(huì)對(duì)原始的方法進(jìn)行一定程度的封裝

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容