1. 程式人生 > 實用技巧 >Appium自動化測試

Appium自動化測試

3. Appium安裝配置

3.1. 限制

如果你在windows上安裝appium,你沒法使用預編譯專用於OS X的.app檔案,你也將不能測試IOS apps,因為appium依賴OS X專用的庫來支援IOS測試。這意味著你只能通過在mac上來執行IOS的app測試。這點限制挺大。

3.2. 傻瓜式安裝node.js

3.2.1. 檢視是否安裝成功

nodejs安裝完畢後,需要配置環境變數

在PATH中新增:D:\Program Files\nodejs;

3.3. 傻瓜式安裝Appium

3.3.1. 成功介面

3.4. 配置appium環境變數

C:\Program Files (x86)\Appium\node_modules\.bin

3.5. 開啟控制檯,檢視appium環境

3.5.1. appium-doctor

3.6. 配置Android— 環境變數

F:\adt-bundle-windows-x86_64_20140101\sdk

3.7. Python中配置appium環境(聯網)

進入:D:\python\Scripts

開啟控制檯:

pip install Appium-Python-client

3.8. 總結:

1) android sdk安裝完畢後,需要配置環境變數

新建ANDROID_HOME

在PATH中新增:%ANDROID_HOME%:\.....

2) nodejs安裝完畢後,需要配置環境變數

在PATH中新增:D:\Program Files\nodejs;

3) appium安裝完畢後,需要配置環境變數

D:\Program Files (x86)\Appium\node_modules\.bin;

4) 配置好後,啟動cmd,

輸入node -v,檢視node安裝版本

輸入appium-doctor檢查appium的安裝環境是否成功,

5) 安裝Python,配置環境變數,

4. 第一個指令碼示例

4.1. 首先通過eclpse啟動android模擬器

4.2. 啟動Appium

4.3. 點選左上角有“機器人”的按鈕:
選擇你的android版本

4.4. 點選右上角的“三角”按鈕啟動Appium。

4.5. 通過Python編寫自動化測試指令碼。

desired_caps是一個字典,用於在appium server 與手機端建立會話關係時,手機端需要告訴服務端裝置相關的一些引數,根據這些引數服務端可以做出相應的處理。

#coding:utf-8

from appium import webdriver

#desired_caps是一個字典,負責啟動服務端時的引數設定,啟動session的時候是必須提供的。
# Desired Capabilities本質上是key value的物件,它告訴appium server這樣一些事情,比如:
# 本次測試是啟動瀏覽器還是啟動移動裝置?
# 是啟動andorid還是啟動ios?
# 啟動android時,app的package是什麼?
# 啟動android時,app的activity是什麼

desired_caps = {}

#你要測試的手機作業系統

desired_caps['platformName'] = 'Android'

#手機作業系統的版本

desired_caps['platformVersion'] = '4.2'

#使用的手機型別或模擬器型別

desired_caps['deviceName'] = 'Android'

#deviceName你的模擬器名字,就是在下載AVD的時候,你填寫的,忘了的回頭去找,或者在模擬器頂部會顯示

#所執行的app包名

desired_caps['appPackage'] = 'com.android.calculator2'

#app執行的事件

desired_caps['appActivity'] = '.Calculator'

#啟動開啟app

driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)

#根據元素定位,執行點選操作

driver.find_element_by_name("6").click()

driver.find_element_by_name("5").click()

driver.find_element_by_name("9").click()

driver.find_element_by_name("1").click()

driver.find_element_by_name("5").click()

driver.find_element_by_name("+").click()

driver.find_element_by_name("6").click()

driver.find_element_by_name("=").click()

driver.quit()

報錯

解決方案

會話已存在錯誤--解決方案,關掉appium,重啟

4.6. 畫出來的這三個,是需要在指令碼中正確填寫的

4.7. 執行效果

5. Appium介面內容解析

5.1. 整體介紹

主頁面頂部從左到右依次是:

1、AndroidSettings:android相關的設定

2、 GeneralSettings:全域性設定,設定appium相關的內容

3、 DeveloperSettings:開發者設定,一般不用需要關心

4、About:appium相關資訊,不需要關心

5、Inspector:查詢元素用的,windows無法使用,MAC可以使用,windows可以不用關心。

6、LaunchAppium:啟動appium按鈕

7、右下角清除日誌按鈕。

5.2. Android Settings

此頁面分為Application、Launch Device、Capabilities、Advanced四部分,先看圖之後分析分別有什麼作用

5.2.1. 1、Application

本模組設定被測試app資訊,如安裝包路徑、包名、activity等

ApplicationPath:選擇要測試的apk,選擇他後與全域性設定中的Pre-LaunchApplication配合,啟動appium時會先把apk安裝到手機(或模擬器)再啟動app。

Package:根據apk生成的app包名,之前提到過的,我們這個包的身份證,我們需要通過這個去找到包,不然我們安裝後我們通過什麼去辨別這些包呢?

Waitfor Package:等待包名。

LaunchActivity:啟動的activity,我們可以把手機當做一個瀏覽器,而Activity就是其中的一個個網頁,我們啟動app時需要去執行的activity,這裡我們填寫首次啟動頁面的activity。我們選擇第一啟動的activity與aapt命令生成的launchable-activity:name一致

備註:這裡需要注意一個問題在我們每次通過Choose選擇apk後,appium會自動把這個包進行重新簽名,那麼在package以及activity裡面會自動把包名和activity的名稱列進去,但是這裡會出現一個問題,每次選擇apk後列表中會有一個快取的原因,即使你更改了apk,但是package還是沒有變,這樣啟動的時候就一直報錯,遇見這樣的情況不要著急,重新啟動兩次就好。

Waitfor Activity:和上面的差不多,意思是等待某個Activity開啟,用的時間不是很多,做了解。

UseBrowser:測試瀏覽器選擇這項,與前五項互逆。及選擇了他前五個就不可以選擇。

FullReset:將所有設定復位。即將手機(模擬器)恢復到啟動到appium前的狀態

NoReset:不需要重置手機(模擬器)中的app

剩下的幾項不重要。可以不需要知道作用。

6.2.2. Launch Device

本模組是模擬器設定,針對的是SDK建立的模擬器,不是genymotion等其他模擬器。

LaunchAVD:要啟動的模擬器名稱。

DeviceReady Timeout:等待模擬器啟動時間。

Arguments:啟動模擬器時需要的引數。

6.2.3.Capabilities

執行測試的相關資訊。

PlatformName:測試平臺,可以選擇Android、FireFox OS、MAC版的還可以選擇IOS。

utomationName:測試引擎的名稱,我們使用的是appium,所以你第一眼就能看見Appium,但是他還有一個Selendroid。可能看到這裡會有一些疑惑,為什麼appium要選擇兩套系統呢?其實這個應該追溯到android的版本問題,android自己的工具在4.2版本以前是一個,但是後面進行了更新,可能也正是因為這個原因appium也才採用了兩套,所以當你測試的app安裝的機器時在4.2或之前的版本時那麼這裡的引擎你就必須選擇Selendroid,

PlatformVersion:被測試手機(模擬器)版本。

DeviceName:裝置名稱,手機連線電腦後開啟cmd輸入adb devices可獲取。

Language:被測試手機(模擬器)使用語言。

Locale:被測試手機(模擬器)所屬區域。

5.2.2.  Advanced

此模組不需要關心,這個標籤只是在你想同一臺電腦同時控制多臺手機的時候才能使用,需要更改Bootstrap Port的埠號,記住這一點就好。

5.3. General Setting

全域性設定,分為Server和Logging兩個,分別是對appium服務和輸出日誌的設定

5.3.1. 1、Server

此模組測試appium server資訊

ServerAddress:如果測試機與開發機是同一臺機器預設即可,否則寫appium所在伺服器IP

port:預設4723,可修改。

CheckFor Updates:啟動appium時是否檢測更新

Pre-LaunchApplication:與Android Settings中的Application模組的ApplicationPath配合,啟動appium後會直接啟動安裝的app。

OverridingExisting Session:覆蓋之前的session。

UseRomote Server:使用遠端appium Server。

SeleniumGrid Configuration File:配置Selenium Grid檔案。併發和分散式時用到。

5.3.2. 2、Logging

日誌設定

ShowTimestamps:appium介面輸出日誌時帶時間戳

Logto File:預設狀態是沒有任何資料,但是在做自動化時建議選擇,因為選擇之後appium在執行時產生的日誌都會保留到你設定的問題件,這個對後期的bug定位有相當大的幫助。切記!

5.4. 元素偵測:

這個按鈕的功能和firebug的定位工具功能類似,但是他還有一個功能,他會檢測你的各個系統配置是否正確,如果前面各項引數不正確時,使用該功能會報錯。如果你不正常連線手機也不行。還是建議用sdk工具裡面自帶的uiautomatorviewer。

5.5. 啟動服務

所有引數配置好後你需要做的就是啟動appium服務,只有啟動之後你才能夠做自動化。

5.6. 清除日誌(右下角):

在寫指令碼、除錯過程中會產生很多的日誌,但是你可能想看的只是中間某個時間段的,那麼你在這個時候可以將頁面的日誌清除。

6. Appium檢視介面元素的工具

6.1. 通過android sdk的uiautomaterviewer獲取元素內容

uiautomaterviewer所在目錄:..\sdk\tools\bin

uiautomatorviewer.bat是一個用來來掃描和分析Android應用程式的UI元件的GUI工具。具體使用方法可參考。開啟uiautomatorviewer以後,可以看到uiautomatorviewer已經將模擬器的圖形展示在上面了。

6.2. 右側xml節點詳解

節點名 解釋

index 父目錄下的第幾個元素,以0開頭

text 顯示在介面上的內容

resource-id 該元素的id(開發不規範時,此id有可能會不存在或多個相同)

class 元素的型別

package apk的包名

content-desc 描述資訊

checkable 元素特徵:是否可選擇

checked 元素特徵:當前是否已選中

chlickable 元素特徵:是否可點選

enabled 元素特徵

focusable 元素特徵

focused 元素特徵

scrollable 元素特徵

long-clickable 元素特徵

password 元素特徵

selected 元素特徵

bounds 邊界,左上角和右下角的座標(從螢幕最左側和最上側開始)

6.3. 使用過程常見問題

打不開uiautomaterviewer

解決方法:以文字方式開啟此檔案,更改檔案結尾處的Dcom.android.uiautomator.bindir="$progdir"為Dcom.android.uiautomator.bindir="sdk下tools資料夾的路徑"

7. 獲取appPackage和appActivity

appPackage和appActivity 進行appium自動化測試非常重要的兩個引數,我們所測試的APP不同,這兩個引數肯定也是不一樣的。那如何快速的獲取這APP的這兩個引數呢

7.1. 方法一:通過cmd指令來獲取

1.adb shell

2.dumpsys activity | grep mFocusedActivity

3、adb shell dumpsys activity activities >E:1.txt

7.2. 方法二:使用Appium來獲取

進入設定頁,選擇APK 路徑,下面就會顯示包名和Activity名稱

8. Appium常用定位方法講解

物件定位是自動化測試中很關鍵的一步,也可以說是最關鍵的一步,畢竟你物件都沒定位那麼你想操作也不行,下面我們來看我們常用的一些定位方式。

8.1. ID定位(取resource-id的值):

無論是在web自動化還是app自動化中id都是唯一的,可能有的小夥伴看到這裡會有疑問,因為有的資料說是通過name定位是唯一的,為什麼你這裡是id呢,其實這個在之前是不衝突的,但是如果你用的是appium較新版本是不行的,在新版本中name定位被去掉了,所以在以後的定位中不會有name定位了,通常情況下我們也更喜歡用id進行定位。這裡可能剛學的小夥伴會有疑問,

有的時候你的應用為什麼沒有id,或者說在這個手機上有但是另外的手機上沒有。1、開發沒有新增。2、android版本是4.4以下的。

如果我們需要對“7”這個數字進行點選操作,

driver.find_element_by_id("com.android.calculator2:id/digit7").click()

8.2. 通過name定位元素(一般text屬性認為是name)

driver.find_element_by_name("5").click()

8.3. className定位(取class的內容)

在實際工作中className定位用得相對而言會比較少。當你經常去看class時你會發現很多的className是一樣的,你沒有辦法對其進行唯一定位,下面我們看下面兩張圖片

我們可以仔細看一下這兩張圖片中手機號、密碼兩個輸入框中的className都是一樣的,如果在這種情況下你使用

driver.find_element_by_class_name("android.widget.EditText").send_keys("111111")

  

這種方式去定位,你會發現你永遠定位不了密碼欄,這是為什麼呢?因為在設計的時候如果你查詢的元素在頁面有多個,系統會自動給你選擇第一個,所以你永遠操作不了後面的

8.4. text定位(需要使用uiautomator的定位方式,使用text的內容)

driver.find_elements_by_android_uiautomator("new UiSelector().text('7')")

使用這裡需要注意一下,如果通過text定位的結果是個list,不能直接click。所以如果要點選需要取陣列的值,比如下面是點選找到的第一個元素

driver.find_elements_by_android_uiautomator("new UiSelector().text('7')")[0].click()

8.5. xpath定位

xpath定位在web自動化中是最常見的,而且也是最有效的,使用xpath定位避免了找不到元素導致報錯的問題,但是在app中使用xpath定位是一件很low的事情。只要遇見使用xpath定位元素他的反應就會比較慢,自動化的目的是為了提高效率,但是使用xpath後會降低效率,所以這裡說很 low

在上面兩張圖片中我們能夠清除的看見他們的id、className都是一樣的,這樣的情況下不用層級定位方式我們只能夠採用xpath來進行定位,首先根據前面web的學習大家可以思考一下該怎麼定位。我們直接看程式碼

driver.find_element_by_xpath("//android.widget.TextView[@text='JavaScript']").click()

  

在xpath裡面我們的語法是這樣“//android.widget.TextView[@text='JavaScript']”,這個和我們之前web的xpath一樣,意思是查詢所有節點中節點為android.widget.TextView (這裡使用的是className,也可以使用id,系統會依次去找)並且他的text屬性值為JavaScript,這樣是否更容易理解呢?下來多練習。這樣的定位方式不推薦,效率很慢。

8.6. css_selector定位(webview)--載入網頁--css

只適用於webview的html頁面,繼承自webdriver,與pc版本的UI測試一致

driver.find_element_by_css_selector()

8.7. link_text定位(webview)

只適用於webview容器中的html頁面,繼承自webdriver,與pc版本的UI測試一致

driver.find_element_by_link_text()

8.8. 原始碼

#coding:utf-8

from appium import webdriver

#desired_caps是一個字典

desired_caps = {}

#你要測試的手機作業系統

desired_caps['platformName'] = 'Android'

#手機作業系統的版本

desired_caps['platformVersion'] = '7.0'

#使用的手機型別或模擬器型別

desired_caps['deviceName'] = 'XPUDU17113015063'

#deviceName你的模擬器名字,就是在下載AVD的時候,你填寫的,忘了的回頭去找,或者在模擬器頂部會顯示

#所執行的app包名

desired_caps['appPackage'] = 'com.example.login'

#app執行的事件

desired_caps['appActivity'] = '.MainActivity'

#啟動開啟app

driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)

#根據元素定位,執行點選操作

# user= driver.find_element_by_name("請輸入使用者名稱")

# user = driver.find_element_by_id("com.example.login:id/et_username")

driver.find_element_by_class_name("android.widget.EditText").send_keys("jilidaxue")

# driver.find_element_by_id("com.example.login:id/et_password").send_keys("66889558")

# user.send_keys("liangyibo")

driver.find_element_by_xpath("//android.widget.EditText[@text='請輸入密碼']").send_keys("233254545")

# pwd = driver.find_element_by_name("請輸入密碼")

# pwd.send_keys("123456")

# # driver.find_element_by_xpath("//android.widget.FrameLayout[1]//android.widget.LinearLayout[3]").click()

driver.find_element_by_xpath("//android.widget.Button[@text='登入']").click()

driver.quit()

9. Appium操作介面元素

9.1. 安裝上兩個apk,供測試使用

9.2. Click(點選事件操作)

  1. 定位元素
  2. 點選元素

driver.find_element_by_id("com.wuba.zhuanzhuan:id/ae8").click()

方法二:(瞭解)

除了定位到元素的點選外,也可以通過tab實現座標的點選

通過觸控時間控制點選tap()

tap([左上角座標,右下角座標],持續時間)

通過定位工具獲取座標值([540,243][1080,363])

03-檢視介面元素的工具

使用tap()方法點選元素

driver.tap([(918,413),(1026,521)], 100) # 持續時間100是指100毫秒

9.3. Clear(清空輸入框內容)

  1. 定位輸入框元素
  2. 清空輸入框的內容

driver.find_element_by_id("com.wuba.zhuanzhuan:id/ij").clear()

9.4. send_keys(輸入框內輸入內容 )

1.定位輸入框元素

2.輸入(傳送)內容

driver.find_element_by_id("com.wuba.zhuanzhuan:id/ij").send_keys("test content")

9.5. Text(獲得元素的text內容 )

1.定位元素

2.獲取元素內容

driver.find_elements_by_class_name("android.widget.EditText")[0].text;

9.6. 編寫指令碼程式碼

#coding:utf-8

from appium import webdriver

#desired_caps是一個字典

desired_caps = {}

#你要測試的手機作業系統

desired_caps['platformName'] = 'Android'

#手機作業系統的版本

desired_caps['platformVersion'] = '7.0'

#使用的手機型別或模擬器型別

desired_caps['deviceName'] = 'XPUDU17113015063'

#deviceName你的模擬器名字,就是在下載AVD的時候,你填寫的,忘了的回頭去找,或者在模擬器頂部會顯示

#所執行的app包名

desired_caps['appPackage'] = 'com.example.login'

#app執行的事件

desired_caps['appActivity'] = '.MainActivity'

#啟動開啟app

driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)

#根據元素定位,執行點選操作

#1、通過name定位元素

# user= driver.find_element_by_name("請輸入使用者名稱")

#2、通過id定位元素

user = driver.find_element_by_id("com.example.login:id/et_username")

#3、通過class_name定位元素,對元素進行清空,再發送內容為:jilidaxue

# user = driver.find_element_by_class_name("android.widget.EditText").clear().send_keys("jilidaxue")

#4、通過id定位元素,傳送內容為66889558

# driver.find_element_by_id("com.example.login:id/et_password").send_keys("66889558")

user.send_keys("liangyibo")

#5、列印獲取的text屬性值,文字內容

print(user.text)

#6、通過Xpath定位元素,輸入密碼

driver.find_element_by_xpath("//android.widget.EditText[@text='請輸入密碼']").send_keys("233254545")

#7、通過Xpath定位登入元素,進行點選操作

driver.find_element_by_xpath("//android.widget.Button[@text='登入']").click()

#8、退出操作

driver.quit()

10. Appium操作介面之觸控操作(瞭解)

10.1. 規範中的可用事件有:
* 短按 (press)
* 釋放 (release)
* 移動到 (moveTo)
* 點選 (tap)
* 等待 (wait)
* 長按 (longPress)
* 取消 (cancel)
* 執行 (perform)

10.2. 單點觸控TouchAction(driver)

通過TouchAction物件,新增tap、move_to等操作,然後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()

10.3. 多點觸控MultiAction()

通過MultiAction().add()新增多個TouchAction操作,最後呼叫perform()一起執行這些操作

舉例

action0 = TouchAction().tap(el)

action1 = TouchAction().tap(el)

MultiAction().add(action0).add(action1).perform()

10.4. 滑動driver.swipe(x1, y1,x2,y2,duration)

命令解釋:從座標(x1,x2)滑動到座標(x2,y2),duration非必填項,滑動時間(滑動時中間要加等待時間,不加等待時間容易出錯,而且加等待時間的長短也要掌握好,一般在200-1000毫秒之間應該差不多,自己除錯幾次感覺一下哪個時間比較穩,每個程式可能會有所差異)

滑動的座標不能超過螢幕的寬高

可以通過【driver.get_window_size()】命令獲得視窗高和寬{'width': 1080, 'height': 1788}

# 獲得機器螢幕大小x,y

def getSize(driver):

x = driver.get_window_size()['width']

y = driver.get_window_size()['height']

return (x, y)

# 螢幕向上滑動

def swipeUp(driver, t=500):

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=500):

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=500):

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=500):

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)

10.5. 長按示例

# [0,219][1080,363] ----獲取某個按鈕的位置,執行長按操作
touch=TouchAction(driver)
touch.long_press(x=100,y=250).perform();

10.6. 滑屏示例

10.6.1. 安裝塗鴉app

10.6.2. 開啟介面,使用如下指令,檢視activity和package

10.6.3. 編寫python指令碼程式碼

#coding:utf-8
from appium import webdriver
#desired_caps是一個字典
from appium.webdriver.common.touch_action import TouchAction
desired_caps = {}
#你要測試的手機作業系統
desired_caps['platformName'] = 'Android'
#手機作業系統的版本
desired_caps['platformVersion'] = '7.0'
#使用的手機型別或模擬器型別
desired_caps['deviceName'] = 'XPUDU17113015063'
 #deviceName你的模擬器名字,就是在下載AVD的時候,你填寫的,忘了的回頭去找,或者在模擬器頂部會顯示
 #所執行的app包名
desired_caps['appPackage'] = 'com.example.graffiti'
#app執行的事件
desired_caps['appActivity'] = '.MainActivity'
#啟動開啟app
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
#根據元素定位,執行點選操作
action=TouchAction(driver)
action.press(x=120,y=200).move_to(x=100, y=180).release().perform()
driver.quit()

11. 系統按鍵事件(瞭解)

press_keycode(AndroidKeyCode)#傳送按鍵事件

例如:點選home鍵,home鍵的KeyCode是3

12. driver的一些比較重要操作

12.1. reset()

#重置app#這時候driver會重置,相當於解除安裝重灌應用。所以本地快取會失效

driver.reset()

12.2. start_activity(包名,activity名)

例如:

#啟動app的某一個activity

driver.start_activity("com.wuba.zhuanzhuan","./presentation.view.activity.LaunchActivity")

啟動一個activity,這個activity必須是AndroidManifest.xml中有intent-filter的activity,對於其他的activity需要程式跳轉過去

12.3. scroll(起始元素,結束元素)

driver.scroll(origin_el,destination_el)

12.4. 獲得當前頁面的所有元素

driver.page_source

這可以用來判斷元素是否存在,例如(assert “釋出成功” in driver.page_source)

12.5. 補充一些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

13. 自動化測試簡單案例-登入

13.1. 開啟UI Automator Viewer

13.2. 程式碼實現

driver.find_element_by_id("com.example.login:id/et_username").send_keys("hello");
driver.find_element_by_id("com.example.login:id/et_password").send_keys("123");
driver.find_elements_by_class_name("android.widget.Button")[1].click()

14. 自動化測試案例2-轉轉

14.1. 下載轉轉,並開啟,在初始介面檢視包和activity

14.2. 使用UI Automator Viewer檢視轉轉按鈕

14.3. 點選跳過

#強制等待3秒鐘
time.sleep(3)
#跳過按鈕
#driver.find_element_by_id("com.wuba.zhuanzhuan:id/arw").click()

14.4. 點選分類

driver.implicitly_wait(10)
#分類按鈕
driver.find_element_by_id("com.wuba.zhuanzhuan:id/b1v").click()

driver.implicitly_wait(10)
#搜尋按鈕
driver.find_element_by_id("com.wuba.zhuanzhuan:id/b1p").click()

driver.implicitly_wait(10)
#搜尋框中輸入搜尋內容
driver.find_element_by_id("com.wuba.zhuanzhuan:id/mg").send_keys(u"電動車")
time.sleep(10)
#點選搜尋

driver.find_element_by_id("com.wuba.zhuanzhuan:id/mi").click()
driver.quit()

15. 啟信寶案例

#coding:utf-8
from appium import webdriver
#desired_caps是一個字典
desired_caps = {}
#你要測試的手機作業系統
desired_caps['platformName'] = 'Android'
#手機作業系統的版本
desired_caps['platformVersion'] = '7.0'
#使用的手機型別或模擬器型別
desired_caps['deviceName'] = 'XPUDU17113015063'
#deviceName你的模擬器名字,就是在下載AVD的時候,你填寫的,忘了的回頭去找,或者在模擬器頂部會顯示
#所執行的app包名
desired_caps['appPackage'] = 'com.bertadata.qxb'
#app執行的事件
desired_caps['appActivity'] = '.activity.SplashActivity'
#啟動開啟app
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
#根據元素定位,執行點選操作
driver.implicitly_wait(10)
serh = driver.find_element_by_id("com.bertadata.qxb:id/tv_home_search_desc")
serh.click()
driver.find_element_by_id("com.bertadata.qxb:id/et_search_content").send_keys("優思安科技")

driver.quit()