driver.find_element_by_id("com.wuba.zhuanzhuan:id/ij").send_keys("test content")
print(driver.find_element_by_xpath(" //android.widget.LinearLayout[1]//xxx").text)
4、觸摸操做
1.driver.tap([座標],持續點擊時間)
除了定位到元素的點擊外,也能夠經過tab實現座標的點擊
driver.tap(driver.tap([(216,1776)],2))
2.TouchAction(driver)
TouchAction對象包含(tab)、press(短按)、move_to(滑動到某個座標)等方法
經過TouchAction對象,添加tap、move_to等操做,而後perform()執行,能夠實現解鎖屏幕等功能
規範中的可用事件有:
* 短按 (press)
* 釋放 (release)
* 移動到 (moveTo)
* 點擊 (tap)
* 等待 (wait)
* 長按 (longPress)
* 取消 (cancel)
* 執行 (perform)
例如:一個屢次滑屏的例子:
action=TouchAction(driver)
action.press(x=220,y=700).move_to(x=840, y=700).move_to(x=220, y=1530).move_to(x=840, y=1530).release().perform()
能夠經過wait()等待操做
3.MultiAction()//多點觸控
經過MultiAction().add()添加多個TouchAction操做,最後調用perform()一塊兒執行這些操做
action0 = TouchAction().tap(el)
action1 = TouchAction().tap(el)
MultiAction().add(action0).add(action1).perform()
4.driver.swipe(x1, y1, x2, y2,duration)
//從座標(x1,x2)滑動到座標(x2,y2),duration非必填項,滑動時間
(滑動的座標不能超過屏幕的寬高)
能夠經過【driver.get_window_size()】命令得到窗口高和寬,結果爲{'width': 1080, 'height': 1776}
一個鼠標向上下左右活動的例子以下:
#得到屏幕大小寬和高
def getSize(driver):
x = driver.get_window_size()['width']
y = driver.get_window_size()['height']
return (x, y)
#屏幕向上滑動
def swipeUp(driver,t=1000):
l = getSize(driver)
x1 = int(l[0] * 0.5) #x座標
y1 = int(l[1] * 0.75) #起始y座標
y2 = int(l[1] * 0.25) #終點y座標
driver.swipe(x1, y1, x1, y2,t)
#屏幕向下滑動
def swipeDown(driver,t=1000):
l = getSize(driver)
x1 = int(l[0] * 0.5) #x座標
y1 = int(l[1] * 0.25) #起始y座標
y2 = int(l[1] * 0.75) #終點y座標
driver.swipe(x1, y1, x1, y2,t)
#屏幕向左滑動
def swipLeft(driver,t):
l=getSize(driver)
x1=int(l[0]*0.75)
y1=int(l[1]*0.5)
x2=int(l[0]*0.05)
driver.swipe(x1,y1,x2,y1,t)
#屏幕向右滑動
def swipRight(driver,t=1000):
l=getSize(driver)
x1=int(l[0]*0.05)
y1=int(l[1]*0.5)
x2=int(l[0]*0.75)
driver.swipe(x1,y1,x2,y1,t)
#調用向下滑動的方法
swipeDown(driver)
5、系統按鍵事件
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能夠查看下面的博客:
6、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