1. 到sdkmanger 路徑下 run : uiautomator.
2. 啟動被測應用程序。
3. 獲取該應用程序的當前頁面。
4. 常見的定位方式:
driver.findElementByName: text屬性
driver.findElementById: sourceID屬性
driver.findElementByXPath: 具有一定約束的路徑抽象標示, 基於XPath方式
系統按鍵事件
press_keycode(AndroidKeyCode)//發送按鍵事件
例如:點擊home鍵,home鍵的KeyCode是3
driver.press_keycode(3)
鍵名 描述 鍵值
KEYCODE_CALL 撥號鍵 5
KEYCODE_ENDCALL 掛機鍵 6
KEYCODE_HOME 按鍵Home 3
KEYCODE_MENU 菜單鍵 82
KEYCODE_BACK 返回鍵 4
KEYCODE_SEARCH 搜索鍵 84
KEYCODE_CAMERA 拍照鍵 27
KEYCODE_FOCUS 拍照對焦鍵 80
KEYCODE_POWER 電源鍵 26
KEYCODE_NOTIFICATION 通知鍵 83
KEYCODE_MUTE 話筒靜音鍵 91
KEYCODE_VOLUME_MUTE 揚聲器靜音鍵 164
KEYCODE_VOLUME_UP 音量增加鍵 24
KEYCODE_VOLUME_DOWN 音量減小鍵 25
更多KeyCode可以查看下面的博客:
driver的一些比較重要操作
1.reset()
//重置app
這時候driver會重置,相當於卸載重裝應用。所以本地緩存會失效
driver.reset()
2.start_activity(包名,activity名)
//啟動app的某一個activity
例如:driver.start_activity("com.wuba.zhuanzhuan","./presentation.view.activity.LaunchActivity")
啟動一個activity,這個activity必須是AndroidManifest.xml中有intent-filter的activity
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
這種啟動activity和driver的reset()不同的是
3.contexts
//獲得所有contexts
driver.contexts
結果如下:
['NATIVE_APP', 'WEBVIEW_com.android.browser']
NATIVE_APP:native的context
WEBVIEW_com.android.browser:webview的context,存放html的容器
4.current_context
//查看當前的context
driver.current_context
5.switch_to.context(context名)
//切換context
driver.switch_to.context("WEBVIEW_com.wuba.zhuanzhuan")
NATIVE時不能定位WEBVIEW的內容,在WEBVIEW的context時不能定位NATIVE的內容。
所以需要切換到對應的context中去進行操作
6.setNetworkConnection(bitmask掩碼)
//設置網絡類型
例如:設置網絡類型為只開wifi
driver.set_network_connection(2)
網絡的bitmask掩碼如下:
| 值 (別名) | 數據連接 | Wifi 連接 | 飛行模式 |
| ------------------ | ---- | ---- | ------------- |
| 0 (什么都沒有) | 0 | 0 | 0 |
| 1 (飛行模式) | 0 | 0 | 1 |
| 2 (只有Wifi) | 0 | 1 | 0 |
| 4 (只有數據連接) | 1 | 0 | 0 |
| 6 (開啟所有網絡) | 1 | 1 | 0 |
7.scroll(起始元素,結束元素)
driver.scroll(origin_el,destination_el)
8.獲得當前頁面的所有元素
driver.page_source
這可以用來判斷元素是否存在,例如(assert "發布成功" in driver.page_source)
9.補充一些driver啟動時可能用到的項
其實這些在上一篇啟動里都有介紹,但是有些可能大家沒注意到的點再列一下。這些點也是我在測試中實際遇到的點
autoLaunch :Appium是否要自動啟動或安裝app,默認true
desired_caps['autoLaunch'] = 'false'
有的時候我不想讓appium每次都啟動app,想自己去啟動activity,那這個項這時就可以起作用了
noReset:在會話前是否重置app狀態。默認是false
desired_caps['noReset'] = 'true'
newCommandTimeout:設置未接收到新命令的超時時間,默認60s
如果60s內沒有接收到新命令,appium會自動斷開連接,如果我需要很長時間做driver之外的操作,可能延長接收新命令的超時時間
desired_caps["newCommandTimeout"]=1800
