Appium的基礎(chǔ)學(xué)習(xí)

一、基礎(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í)際距離也越大

5.2 scroll 滑動事件

  • 方法

    從一個(gè)元素劃到另一個(gè)元素,直到頁面停止

    driver.scoll(origin_el, destination_el)
    
    • 小結(jié)
      • 不能設(shè)置持續(xù)時(shí)間,慣性很大

5.3 drag_and_drop 拖拽事件

  • 方法

    從一個(gè)元素滑到另一個(gè)元素,第二個(gè)元素替代第一個(gè)元素的位置

    driver.drag_and_drop(origin_el, destination_el)
    
    • 小結(jié)
      • 不能設(shè)置持續(xù)時(shí)間,沒有慣性

5.4 滑動事件和拖拽事件的選擇

看是否存在慣性,以及傳參是元素還是坐標(biāo)

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

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

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