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選擇器定位javascript
# 元素集合複數定位
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選擇器定位集合css
# 輸入框輸入
driver.element.send_keys("中英")html
# 鎖定屏幕
driver.lock(5)java
# 把當前應用置於後臺
driver.background_app(5)node
# 收起鍵盤
driver.hide_keyboard()python
# 打開一個應用或者activity,僅安卓端
driver.start_activity('com.example.android.apis', '.Foo')android
# 打開下拉通知欄 僅Android
driver.open_notifications()ios
# 拖動元素,將元素origin_el拖到目標元素destination_el
driver.drag_and_drop(self, origin_el, destination_el):git
# 檢查app是否已安裝
driver.is_app_installed('com.example.android.apis')web
# 安裝應用到設備
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實例。