日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Appium使用のhelloworld

發布時間:2025/6/16 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Appium使用のhelloworld 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Demo 官網

最近突發興趣,想了解點測試方面的內容,同時自己又屬于比較懶的,所以期望可以做成自動化測試,寫個腳本自動運行,在版本迭代后做回歸測試會比較方便,另外,我期望測試框架可以根據id等屬性來定位控件,而不是如monkeyRunner那樣通過坐標來定位,以便于測試不同機型,找了幾個框架后最后決定先試試appium, 因此就有了這篇文章;

基于: 系統: win10 64 Appium: AppiumForWindows_1_4_16_1 腳本: python 3.5

優點(摘自<騰訊Android自動化測試實踐>):

  • 支持多種應用程序測試: Native app(ios/android), hybrid app 和 web app
  • 不需要被測應用做特殊修改:不需要引入任何額外的測試sdk,不需要添加其他權限,不需要修改簽名等...(不過我安裝的時候發現會安裝兩個小程序,影響不大)
  • 對測試腳本的語言不做限制(比較喜歡這樣的跨平臺跨語言的,遷移方便)
  • 支持應用間交互測試
  • 缺點

    就是運行有點慢啊... 好像沒看到直接截圖對比功能,不過可以考慮使用現成的monkeyRunner的,沒測試過...

    安裝:

    網上文章應該蠻多的,據說安裝比較復雜,我因為之前開發的時候安裝過androidSDK,python,node,framework4.5等等,所以一路都還挺順利,安裝過程:

  • 在系統環境變量中配置 ANDROID_HOME 變量
  • 安裝python并添加到path環境變量中
  • 安裝node(非必需)
  • 下載appium 并安裝,推薦1.4.0以后的版本
  • 安裝appium客戶端:
  • pip install robotframework-appiumlibrary 復制代碼
  • 在開始菜單中點擊運行appium服務器
  • 腳本編寫

  • 設置默認編碼
  • # -*- codeing: utf-8 -*- # 這個最好還是養成習慣,之前使用monkeyRunner的時候就是沒設置utf-8,運行的時候連注釋中的中文都報錯 # 導入所需包 import sys,os,unittest from time import sleep from appium import webdriver 復制代碼
  • 設置desired capabilities鍵值對,主要用于通知 Appium 服務器建立需要的session
  • ''' python 3.5 測試機型: 紅米1s android 4.4.4 直接運行腳本即可 ''' desire_caps = {} desire_caps['platformName'] = 'Android' desire_caps['platformVersion'] = '4.4.4' desire_caps['appPackage'] ='com.android.contacts' desire_caps['appActivity'] = '.activities.PeopleActivity' # 手機名稱,這個可以通過命令行adb devices即可獲取,我發現在連接多臺手機時會有影響 desire_caps['deviceName'] = '9de1f8c7' # 以下兩項主要是在點擊輸入框的時候,會觸發系統輸入法,導致可能我們發送的是字符 `234`,但是九宮格中文輸入法有可能給出的是 `bei` ,這兩個屬性就是屏蔽系統輸入法,使用appium自己的,但是測試完成后,得自己去系統設置中將輸入法切換過來 desire_caps['unicodeKeyboard'] = True desire_caps['resetKeyboard'] = True 復制代碼
  • 連接appium
  • # ip地址在pc上的 appium客戶端-設置 中可以看到 `server address` 和 `port`,保持一致即可 driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desire_caps) 復制代碼
  • 控件操作
  • # 通過id查找控件 # 具體的控件id可以通過 `AndroidSDK\tools\uiautomatorviewer.bat` 來直接獲取 createContactBtn = driver.find_element_by_id('com.android.contacts:id/fab') # 模擬點擊操作 createContactBtn.click() # 也可以通過文本查找控件,并輸入姓名 name = driver.find_element_by_name(u"姓名") # "姓名" 是輸入框的hint值 name.click() name.send_keys("阿冏Lynxz") # 輸入指定的文本,注意這里需要上面desire_caps屏蔽系統輸入法才行 # 也可以查找多個控件 # 比如通訊錄可能有多個電話號碼輸入框 `elements` 多了個s phone = driver.find_elements_by_name(u"電話") phone[0].click() phone[0].send_keys("189***0620") # 判斷結果是否符合預期,不通過的話會在這里中斷并打印日志 # self.assertEqual(phone[0].text,"15390") # 截屏,會在當前目錄保存指定文件名的圖片 driver.save_screenshot("after_input.png") # 等待,單位:秒 sleep(5) # 測試完成,退出 driver.quit() 復制代碼

    控件屬性/操作方法:

    • text 控件顯示的文本信息,如 edt.text,有點類似于屬性獲取
    • click() 模擬控件點擊操作,如btn.click
    • clear() 清除控件的文本
    • is_enabled() 判斷控件是否可用
    • is_selected() 控件是否被選中
    • is_displayed() 控件是否顯示
    • get_attribute(self,name) 指定屬性名稱,返回屬性值,若屬性名不存在,則返回none
    • send_keys(self,*value) 模擬輸入文本到控件

    系統API

    • current_activity 獲取當前activity信息,可以直接打印,如 print(driver.current_activity)
    • current_context \ context 我在真機上測試的時候都是返回 NATIVE_APP
    • install_app(self,app_path) 安裝應用app
    • is_app_installed(self,bundle_id) 在android中傳入包名即可
    • get_screenshot_as_file(self,filename) 傳入要保存的路徑和文件名,可以使用相對路徑
    • save_screenshot(self,filename) 跟上一條的功能類似
    • network_connection 查看當前網絡信息,整數值, ==!測試出來都是1

    碰到的問題:

    1. Could not extract PIDs from ps output...

    selenium.common.exceptions.WebDriverException: Message: A new session could not be created. (Original error: Could not extract PIDs from ps output. PIDS: [], Procs: ["bad pid 'uiautomator'"]) 復制代碼

    修改 Appium\node_modules\appium\node_modules\appium-adb\lib\adb.js 文件

    this.shell("ps '" + name + "'", function (err, stdout) {...var procs = [];var outlines = stdout.split("\n");outlines.shift() //添加這行... 復制代碼

    保存后,重新運行appium即可

    2. 500 Internal Privoxy Error

    好吧,這個是我電腦上開著 shadowsocks,雖然是pac模式,但是appium就是會報錯,關閉就好了

    3. 使用 send_keys() 時會觸發輸入法,導致輸入異常,中文無法輸入

    Python Appium實現中文輸入分享 解決方法: 在 desire caps 參數中添加如下兩個字段:

    desire_caps = {} ... desire_caps['unicodeKeyboard'] = True # 使用unicodeKeyboard的編碼方式來發送字符串 desire_caps['resetKeyboard'] = True # 將鍵盤給隱藏起來 復制代碼

    當然,這樣測試結束后,發現自己輸入法調用不出來,可以到系統設置中切換一些輸入法(此時,默認調用的是Appium Android Input manager...)

    轉載于:https://juejin.im/post/5a433b29f265da431440f9af

    《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

    總結

    以上是生活随笔為你收集整理的Appium使用のhelloworld的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。