史上最全 Appium 自動化測試從基礎到框架實戰精華學習筆記(一)
對測試人來說,Appium 是非常重要的一個開源跨平臺自動化測試工具,它允許測試人員在不同的平臺(iOS、Android 等)使用同一套 API 來寫自動化測試腳本,這樣可大幅提升代碼復用率和工作效率。

本文匯總了從 Appium 基礎到自動化測試高級實戰中,所涉及到的方方面面的知識點精華內容(如下所示),希望對大家快速總結和復習有所幫助。
1.Appium 基礎 1(環境搭建和簡介)
2.Appium 基礎 2(元素定位和元素常用方法)
3.Appium 基礎 3(手勢操作和 uiautomator 查找元素)
4.Appium 基礎 4(顯式等待)
5.Appium 基礎 5(toast 和參數化)
6.Appium 基礎 6(webview)
7.Appium_ 企業微信練習 (非 PO,增加和刪除聯系人)
8.Appium_ 企業微信練習 (PO–增加聯系人)
下載 1.8 的 jdk
新建環境變量:JAVA_HOME 值為:D:\Program Files\Java\jdk1.7.0
新建環境變量:CLASSPATH 值為:.;%JAVA_HOME%\lib;(注意:點號表示當前目錄,不能省略)
在系統變量 Path 的值的前面加入以下內容:%JAVA_HOME%\bin
下載 sdk
打開 sdk 的 sdk manager,安裝 tools 前 3 個東西和 google 的 usb 驅動
配置 Android home 里面的 platform-tools 和 tools
安裝 node.js,配置 node.js 的環境變量
npm install -g cnpm --registry=https://registry.npm.taobao.org
cnpm install -g appium
cnpm install -g appium-doctor
pip install appium-python-client
mumu 連接 adb 是:adb connect 127.0.0.1:7555
Android 是 uiautomator2
ios 是 xcuitest
webdriver 是基于 http 協議的,第一連接會建立一個 session 會話,并通過 post 發送一個 json 告知服務端相關測試信息
client/server 設計模式
客戶端通過 webdriver json wire 協議與服務器通訊
多語言支持
server 可以放在任何地方
服務器 nodejs 開發的 http 服務
appium 使用 appium-xcuitest-driver 來測試 iphone 設備,其中需要安裝 Facebook 出的 WDA(webdriver agent) 來驅動 ios 測試
adb:Android 控制工具
appium Destkop:內嵌 appium server 和 inspector 的綜合工具
appium server:appium 的核心工具,命令行工具
appium client:各種語言的客戶端封裝庫,用戶連接 appium server,包含 python、java、ruby 等
appcrawler 自動遍歷工具
獲取當前元素界面:adb shell dumpsys activity top
獲取任務列表:adb shell dumpsys activity activities
獲取 app 的 package 和 activity:adb shell;然后 logcat | grep -i displayed
啟動應用:adb shell am start -W -n "com.xueqiu.android/.view.WelcomeActivityAlias -S
文檔地址:http://appium.io/docs/en/writing-running-appium/caps/index.html
platformName:android 通常都是寫 android
deviceName:127.0.0.1:7555 這個通常是 adb devices 的名稱
appPackage:com.xueqiu.android 這個是 app 的 package 包名
appActivity:.view.WelcomeActivityAlias 這個是 app 的 activity 名
noReset:true, false 是否重置測試的環境(例如首次打開彈框,或者登陸信息)
unicodeKeyboard:true, false 是否需要輸入非英文之外的語言并在測試完成后重置輸入法,比如輸入中文
dontStopAppOnReset:true, false 首次啟動的時候,不停止 app
skipDeviceInitialization:true, false 跳過安裝,權限設置等操作
https://github.com/appium/appium/tree/master/sample-code/apps
Android 是通過容器的布局屬性來管理子控件的位置關系,布局過程就是把界面上的所有的控件,根據他們的間距的大小,擺放在正確的位置
線性布局:LinearLayout
相對布局:RelativeLayout
幀布局:FrameLayout
絕對布局:AbsoluteLayout
表格布局:TableLayout
網格布局:GirdLayout
約束布局:ConstraintLayout
activity:與用戶交互的可視化界面
service:實現程序后臺運行的解決方案,比如 qq 音樂的音樂在后臺運行,沒有界面
content provide:內容提供者,提供程序所需要的數據,比如?提供數據庫?
broadcast receiver:廣播接收器,監聽外部事件的到來(比如來電)
TextView:文本控件
EditText:可編輯文本控件
Button:按鈕
ImageButton:圖標按鈕
ToggleButton:開關按鈕
ImageView:圖片控件
CheckBox:復選框控件
RadioButton:單選框控件
dom:Document Object Model 文檔對象模型
dom 應用:最早應用于 html 和 js 的交互,用戶表示界的控件層級,界面的結構化描述,常見的格式為 html、xml。核心元素為節點和屬性
xpath:xml 路徑語言,用于 xml 中的節點定位
Android 的應用層級結構是定制的 xml
app source 類似于 dom,表示 app 的層級,表示界面里面所有的控件數的結構
每個控件都有它的屬性(resourceid、xpath、aid),沒有 css 屬性
driver.find_element_by_accessibility_id() 對應 content-desc
driver.find_element_by_id() 對應 resource-id
driver.find_element_by_name() 對應 text
driver.find_element_by_xpath() 對應 xpath
首先要 from appium.webdriver.common.mobileby import MobileBy as By
self.driver.find_element(By.ID,"") 對應 resource-id
self.driver.find_element(By.XPATH,"") 對應 xpath
self.driver.find_element(By.ACCESSIBILITY_ID,"") 對應 content-desc
self.driver.find_element(By.NAME,"") 對應 text
driver.find_element_by_xpath("http://*[@text=’ 掃一掃 ']")
driver.find_element_by_xpath("http://*[@resource-id=‘com.taobao.taobao:id/tv_scan_text’]")
driver.find_element_by_xpath("http://*[@content-desc=’ 幫助 ']")
driver.find_element(By.XPATH,"http://*[@resource-id=‘com.xueqiu.android:id/name’ and @text=’ 阿里巴巴 ']") and 的使用
父類和兄弟類的方法://[@text=’ 性別 ‘]/…//[@text=’ 男 ']。其中 /… 表示父類,//* 就是兄弟,孫子等類
//*[Contains(@text,“tong”)] 這是 xpath 的 text 模糊搜索的方法
點擊方法:element.click()
輸入操作:element.send_keys(“tong”)
設置元素的值:element.set_value(“tongtong”)
清除操作:element.clear()
是否可見:element.is_displayed 返回 true or false
是否可用:element.enabled() 返回 true or false
是否被選中:element.is_selected() 返回 true or false
獲取屬性值:element.get_attribute(name)
get_attribute(name) 獲取的屬性名稱和 uiautomatorviewer 的一致,但是 index 的值獲取不了
真假獲取的值是 true 和 false 的字符串,并不是 python 的 boolean 值
獲取元素文本:element.text
獲取元素坐標:element.location
結果:{‘y’:19,‘x’:498}
獲取元素尺寸(高和寬):element.size
結果:{‘width’:500,‘height’:22}
9.打開雪球 app
10.點擊搜索輸入框
11.向搜索輸入框輸入 “阿里巴巴”
12.在搜索的結果里選擇阿里巴巴,然后點擊
13.獲取這只上香港 阿里巴巴的股價,并判斷這只股價的價格>200
14.打開雪球首頁
15.定位首頁的搜索框
16.判斷搜索框是否可用,并查看搜索框 name 屬性值
17.打印搜索框這個元素的左上角坐標和它的寬高
18.向搜索框輸入:alibaba
19.判斷阿里巴巴是否可見
20.如果可見,打印搜索成功點擊,如果不可見,打印搜索失敗
更多內容,我們在后續文章分享。
自動化測試
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。