Appium使用方法說明



global driver
# 元素定位
driver.find_element_by_id("id") # id定位
driver.find_element_by_name("name") # name定位
driver.find_element_by_link_text("text") # 鏈接名定位
driver.find_element_by_partial_link_text("text") # 通過元素部分可見鏈接文本定位
driver.find_element_by_tag_name("name") # 通過查找html的標簽名稱定位元素
driver.find_element_by_xpath("xpath") # 路徑定位
driver.find_element_by_class_name("android.widget.LinearLayout") # 類名定位
driver.find_element_by_css_selector("css") # css選擇器定位

# 元素集合復數定位
driver.find_elements_by_id("id") # id元素集合
driver.find_elements_by_name("name") # name元素集合
driver.find_elements_by_link_text("text") # 鏈接名元素集合
driver.find_elements_by_partial_link_text("text") # 部分元素可見鏈接集合
driver.find_elements_by_tag_name("name") # html標簽名集合
driver.find_elements_by_xpath("xpath") # 路徑定位集合
driver.find_elements_by_class_name("android.widget.LinearLayout") # 類名定位集合
driver.find_elements_by_css_selector("css") # css選擇器定位集合

# 輸入框輸入
driver.element.send_keys("中英")

# 鎖定屏幕
driver.lock(5)

# 把當前應用置於后台
driver.background_app(5)

# 收起鍵盤
driver.hide_keyboard()

# 打開一個應用或者activity,僅安卓端
driver.start_activity('com.example.android.apis', '.Foo')

# 打開下拉通知欄 僅Android
driver.open_notifications()

# 拖動元素,將元素origin_el拖到目標元素destination_el
driver.drag_and_drop(self, origin_el, destination_el):

# 檢查app是否已安裝
driver.is_app_installed('com.example.android.apis')

# 安裝應用到設備
driver.install_app('path/to/my.apk')

# 刪除應用
driver.remove_app('com.example.android.apis')

# 模擬設備搖晃
driver.shake()


# 關閉應用
driver.close_app()

# 啟動 (Launch)
# 根據服務關鍵字 (desired capabilities) 啟動會話 (session) 。請注意這必須在設定 autoLaunch=false 關鍵字時才能生效。
# 這不是用於啟動指定的 app/activities ————你可以使用 start_activity 做到這個效果————
# 這是用來繼續進行使用了 autoLaunch=false 關鍵字時的初始化 (Launch) 流程的。
driver.launch_app()

# 應用重置,相當於重新卸載安裝
driver.reset()

# 可用上下文 (context) 列出所有的可用上下文
# 翻譯備注:context可以理解為 可進入的窗口 。例如,對於原生應用,可用的context和默認context均為NATIVE_APP。
# 詳情可查看對混合應用進行自動化測試
driver.contexts

# 列出當前上下文
driver.current_context

# 切換到默認的上下文 (context)
# 將上下文切換到默認上下文
driver.switch_to.context(None)

# 獲取應用的字符串
driver.app_strings

# 按鍵事件 (Key Event)給設備發送一個按鍵事件
driver.keyevent(176)

# 獲取當前的activity
driver.current_activity

# 觸摸動作(TouchAction) / 多點觸摸動作(MultiTouchAction)
action = TouchAction(driver)
action.press(element=el, x=10, y=10).release().perform()

# 滑動(Swipe)模擬用戶滑動
# 注意:appium滑動規則是x從左到右變大,y從上到下變大
driver.swipe(start=75, starty=500, endx=75, endy=0, duration=800)

# 捏 (Pinch)捏屏幕 (雙指往內移動來縮小屏幕)
driver.pinch(element=el)

# 放大 (Zoom)放大屏幕 (雙指往外移動來放大屏幕)
driver.zoom(element=el)

# 滑動到某個元素 (Scroll To)
todo: python

# 從設備中拉出文件 (Pull File)
driver.pull_file('Library/AddressBook/AddressBook.sqlitedb')

# 推送文件到設備中去
data = "some data for the file"
path = "/data/local/tmp/file.txt"
driver.push_file(path, data.encode('base64'))

# 斷言
Assert.assertEquals("I am a div", div.getText()); //跳轉到指定頁面並在該頁面所以用元素id進行交互

# 檢查文本是否符合預期
assertEqual('I am a div', div.text)

# 輸入法是否有活動 返回真假
is_ime_active(self):

# 返回當前安卓設備可用的輸入法
driver.available_ime_engines(self):

# 激活安卓設備中的制定輸入法
driver.activate_ime_engine(self, engine):

# 關閉當前的輸入法(android)
driver.deactivate_ime_engine(self):

# 打開安卓設備上的位置定位設置
driver.toggle_location_services()

# 設置設備的經緯度
:Args:
- latitude緯度 - String or numeric value between -90.0 and 90.00
- longitude經度 - String or numeric value between -180.0 and 180.0
- altitude海拔高度- String or numeric value
用法 driver.set_location(緯度,經度,高度)

# 點擊
element.click()

# 清除元素內容
element.clear()

# 返回元素的文本內容
element.text()

# 提交表單
element.submit(self):

# 元素是否可用
element.is_enabled()

# 元素是否可選
element.is_slected()

# 元素是否可見
element.is_displayed()

# 獲取元素的大小(高和寬)
new_size["height"] = size["height"]
new_size["width"] = size["width"]
driver.element.size

# 獲取元素左上角的坐標
# 用法 driver.element.location
'''返回element的x坐標, int類型'''
driver.element.location.get('x')
'''返回element的y坐標, int類型'''
driver.element.location.get('y')

# 獲取當前元素的截圖為Base64編碼的字符串
img_b64 = element.screenshot_as_base64

# 執行JS
# 在當前窗口/框架(特指 Html 的 iframe )同步執行 javascript 代碼
driver.execute_script('document.title')
# 異步執行代碼,其他代碼在執行
driver.execute_async_script('document.title')

# 獲取當前url
driver.current_url

# 獲取頁面源
driver.page_source

# 關閉當前窗口
driver.close()


# 關閉應用
driver.quit()

# chrome上進行測試
{
'platformName': 'Android',
'platformVersion': '4.4',
'deviceName': 'Android Emulator',
'browserName': 'Chrome'
}

# 真機測試
{
'automationName': 'Selendroid',
'platformName': 'Android',
'platformVersion': '2.3',
'deviceName': 'Android Emulator',
'app': myApp,
'appPackage': 'com.mycompany.package',
'appActivity': '.MainActivity'
}

# 多點觸控
"""
規范中的可用事件有:
* 短按 (press)
* 釋放 (release)
* 移動到 (moveTo)
* 點擊 (tap)
* 等待 (wait)
* 長按 (longPress)
* 取消 (cancel)
* 執行 (perform)
"""



5.8 服務器參數
Appium 服務器參數

使用方法: node . [標志]
服務器標志

所有的標志都是可選的,但是有一些標志需要組合在一起才能生效。

<expand_table>
標志 默認值 描述 例子
--shell null 進入 REPL 模式
--localizable-strings-dir en.lproj IOS only: 定位 .strings所在目錄的相對路徑 --localizable-strings-dir en.lproj
--app null iOS: 基於模擬器編譯的 app 的絕對路徑或者設備目標的 bundle_id; Android: apk 文件的絕對路徑--app /abs/path/to/my.app
--ipa null (IOS-only) .ipa 文件的絕對路徑 --ipa /abs/path/to/my.ipa
-U, --udid null 連接物理設備的唯一設備標識符 --udid 1adsf-sdfas-asdf-123sdf
-a, --address 0.0.0.0 監聽的 ip 地址 --address 0.0.0.0
-p, --port 4723 監聽的端口 --port 4723
-ca, --callback-address null 回調IP地址 (默認: 相同的IP地址) --callback-address 127.0.0.1
-cp, --callback-port null 回調端口號 (默認: 相同的端口號) --callback-port 4723
-bp, --bootstrap-port 4724 (Android-only) 連接設備的端口號 --bootstrap-port 4724
-k, --keep-artifacts false 棄用,無效。trace信息現在保留tmp目錄下,每次運行前會清除該目錄中的信息。 也可以參考 --trace-dir 。
-r, --backend-retries 3 (iOS-only) 遇到 crash 或者 超時,Instrument 重新啟動的次數。 --backend-retries 3
--session-override false 允許 session 被覆蓋 (沖突的話)
--full-reset false (iOS) 刪除整個模擬器目錄。 (Android) 通過卸載應用(而不是清除數據)重置應用狀態。在 Android 上,session 完成后也會刪除應用。
--no-reset false session 之間不重置應用狀態 (iOS: 不刪除應用的 plist 文件; Android: 在創建一個新的 session 前不刪除應用。)
-l, --pre-launch false 在第一個 session 前,預啟動應用 (iOS 需要 --app 參數,Android 需要 --app-pkg 和 --app-activity)
-lt, --launch-timeout 90000 (iOS-only) 等待 Instruments 啟動的時間
-g, --log null 將日志輸出到指定文件 --log /path/to/appium.log
--log-level debug 日志級別; 默認 (console[:file]): debug[:debug] --log-level debug
--log-timestamp false 在終端輸出里顯示時間戳
--local-timezone false 使用本地時間戳
--log-no-colors false 不在終端輸出中顯示顏色
-G, --webhook null 同時發送日志到 HTTP 監聽器 --webhook localhost:9876
--native-instruments-lib false (IOS-only) iOS 內建了一個怪異的不可能避免的延遲。我們在 Appium 里修復了它。如果你想用原來的,你可以使用這個參數。
--app-pkg null (Android-only) 你要運行的apk的java包。 (例如, com.example.android.myApp) --app-pkg com.example.android.myApp
--app-activity null (Android-only) 打開應用時,啟動的 Activity 的名字(比如, MainActivity) --app-activity MainActivity
--app-wait-package false (Android-only) 你想等待的 Activity 的包名。(比如, com.example.android.myApp) --app-wait-package com.example.android.myApp
--app-wait-activity false (Android-only) 你想等待的 Activity 名字(比如, SplashActivity) --app-wait-activity SplashActivity
--android-coverage false (Android-only) 完全符合條件的 instrumentation 類。 作為命令 adb shell am instrument -e coverage true -w 的 -w 的參數 --android-coverage com.my.Pkg/com.my.Pkg.instrumentation.MyInstrumentation
--avd null (Android-only) 要啟動的 avd 的名字
--avd-args null (Android-only) 添加額外的參數給要啟動avd --avd-args -no-snapshot-load
--device-ready-timeout 5 (Android-only) 等待設備准備好的時間,以秒為單位 --device-ready-timeout 5
--safari false (IOS-Only) 使用 Safari 應用
--device-name null 待使用的移動設備名字 --device-name iPhone Retina (4-inch), Android Emulator
--platform-name null 移動平台的名稱: iOS, Android, or FirefoxOS --platform-name iOS
--platform-version null 移動平台的版本 --platform-version 7.1
--automation-name null 自動化工具的名稱: Appium or Selendroid --automation-name Appium
--browser-name null 移動瀏覽器的名稱: Safari or Chrome --browser-name Safari
--default-device, -dd false (IOS-Simulator-only) 使用instruments自己啟動的默認模擬器
--force-iphone false (IOS-only) 無論應用要用什么模擬器,強制使用 iPhone 模擬器
--force-ipad false (IOS-only) 無論應用要用什么模擬器,強制使用 iPad 模擬器
--language null iOS / Android 模擬器的語言 --language en
--locale null Locale for the iOS simulator / Android Emulator --locale en_US
--calendar-format null (IOS-only) iOS 模擬器的日歷格式 --calendar-format gregorian
--orientation null (IOS-only) 初始化請求時,使用 LANDSCAPE (橫屏) 或者 PORTRAIT (豎屏) --orientation LANDSCAPE
--tracetemplate null (IOS-only) 指定 Instruments 使用的 tracetemplate 文件 --tracetemplate /Users/me/Automation.tracetemplate
--show-sim-log false (IOS-only) 如果設置了, iOS 模擬器的日志會寫到終端上來
--show-ios-log false (IOS-only) 如果設置了, iOS 系統的日志會寫到終端上來
--nodeconfig null 指定 JSON 格式的配置文件 ,用來在 selenium grid 里注冊 appiumd --nodeconfig /abs/path/to/nodeconfig.json
-ra, --robot-address 0.0.0.0 robot 的 ip 地址 --robot-address 0.0.0.0
-rp, --robot-port -1 robot 的端口地址 --robot-port 4242
--selendroid-port 8080 用來和 Selendroid 交互的本地端口 --selendroid-port 8080
--chromedriver-port 9515 ChromeDriver運行的端口 --chromedriver-port 9515
--chromedriver-executable null ChromeDriver 可執行文件的完整路徑
--use-keystore false (Android-only) 設置簽名 apk 的 keystore
--keystore-path (Android-only) keystore 的路徑
--keystore-password android (Android-only) keystore 的密碼
--key-alias androiddebugkey (Android-only) Key 的別名
--key-password android (Android-only) Key 的密碼
--show-config false 打印 Appium 服務器的配置信息,然后退出
--no-perms-check false 跳過Appium對是否可以讀/寫必要文件的檢查
--command-timeout 60 默認所有會話的接收命令超時時間 (在超時時間內沒有接收到新命令,自動關閉會話)。 會被新的超時時間覆蓋
--keep-keychains false (iOS) 當 Appium 啟動或者關閉的時候,是否保留 keychains (Library/Keychains)
--strict-caps false 如果所選設備是appium不承認的有效設備,會導致會話失敗
--isolate-sim-device false Xcode 6存在一個bug,那就是一些平台上如果其他模擬器設備先被刪除時某個特定的模擬器只能在沒有任何錯誤的情況下被建立。這個選項導致了Appium不得不刪除除了正在使用設備以外其他所有的設備。請注意這是永久性刪除,你可以使用simctl或xcode管理被Appium使用的設備類別。
--tmp null 可以被Appium用來管理臨時文件的目錄(絕對路徑),比如存放需要移動的內置iOS應用程序。 默認的變量為 APPIUM_TMP_DIR ,在 *nix/Mac 為 /tmp 在windows上使用環境便令 TEMP 設定的目錄。
--trace-dir null 用於保存iOS instruments trace的 appium 目錄,是絕對路徑, 默認為 <tmp dir>/appium-instruments
--intent-action android.intent.action.MAIN (Android-only) 用於啟動 activity 的intent action --intent-action android.intent.action.MAIN
--intent-category android.intent.category.LAUNCHER (Android-only) 用於啟動 activity 的intent category --intent-category android.intent.category.APP_CONTACTS
--intent-flags 0x10200000 (Android-only) 啟動 activity 的標志 --intent-flags 0x10200000
--intent-args null (Android-only) 啟動 activity 時附帶額外的 intent 參數 --intent-args 0x10200000
--suppress-adb-kill-server false (Android-only) 如果被設定,阻止Appium殺掉adb實例。





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM