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_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_element
s
_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(點選事件操作)
- 定位元素
- 點選元素
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(清空輸入框內容)
- 定位輸入框元素
- 清空輸入框的內容
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] ----獲取某個按鈕的位置,執行長按操作 |
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"); |
14. 自動化測試案例2-轉轉
14.1. 下載轉轉,並開啟,在初始介面檢視包和activity
14.2. 使用UI Automator Viewer檢視轉轉按鈕
14.3. 點選跳過
#強制等待3秒鐘 |
14.4. 點選分類
driver.implicitly_wait(10) |
driver.implicitly_wait(10) |
driver.implicitly_wait(10) |
driver.find_element_by_id("com.wuba.zhuanzhuan:id/mi").click() |
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()