一 簡介
原生應用和web應用
(1)原生應用是特別為某種操作系統開發的. (2)Web應用本質上是為移動瀏覽器設計的基於Web的應用. (3)混合應用大家都知道是原生應用和Web應用的結合體,採用了原生應用的一部分、Web應用的一部分,所以必須部分在設備上執行、部分在Web上執行。
appium架構
二 appium特點
三 工作原理
appnium-client選擇python語言編寫appium腳本,並行執行腳本.
請求先經過appium-server服務端,通過解析和驅動移動設備虛擬機.
四 安裝
http://appium.io/
雙擊下一步安裝即可,
簡單啟動,設置host和port
點擊start開啟,界面如下
安裝完成.
五 inspector (會話)配置
1 簡介
獲取安卓版本
獲取設備信息
獲取包名
adb shell dumpsys activity top | findstr “ACTIVITY”
active名字
方法二 獲取包名和active名字
打開需要監聽的軟件,如考研幫,查看日志
保存session ,啟用session 就可以進行app自動化測試.
六 考研app實戰
賬號:asdfghjkl0111
密碼:********
工具
1 一台手機或者安卓模擬器 2 uiautomatorviewer 3 python
實戰步驟
2 python 准備
1 安裝 appium客戶端
pip install Appium-Python-Client
2 必須保證appnium服務器啟動,檢測是否能正常驅動安卓軟件,執行下面代碼
#導入appium設備驅動器 from appium import webdriver #設置安卓設備配置信息(appium中的inspector參數) cap={ "platformName": "Android", "platformVersion": "5.1.1", "deviceName": "127.0.0.1:62025", "appPackage": "com.tal.kaoyan", "appActivity": "com.tal.kaoyan.ui.login.LoginActivity", "noReset": True } #實例化一個web驅動器 driver = webdriver.Remote('HTTP://127.0.0.1:4723/wd/hub',cap)
3 完整代碼
#導入appium設備驅動器 import time from appium import webdriver #導入等待模塊 from selenium.webdriver.support.ui import WebDriverWait #設置安卓設備配置信息(appium中的inspector參數) cap={ "platformName": "Android", "platformVersion": "5.1.1", "deviceName": "127.0.0.1:62025", "appPackage": "com.tal.kaoyan", "appActivity": "com.tal.kaoyan.ui.activity.SplashActivity", "noReset": True } #實例化一個web驅動器 driver = webdriver.Remote('HTTP://127.0.0.1:4723/wd/hub',cap) # *** 啟動app耗時比較多,等待時間最好設置大一些 *** #如果存在跳過按鈕,則獲取跳過按鈕 try: # WebDriverWait用於等待按鍵出現 if WebDriverWait(driver,10).until(lambda x:x.find_element_by_xpath("//android.widget.TextView[@resource-id='com.tal.kaoyan:id/tv_skip']")): driver.find_element_by_xpath("//android.widget.TextView[@resource-id='com.tal.kaoyan:id/tv_skip']").click() except: pass #處理登錄過程 try: #如果彈出登錄界面,則登錄 if WebDriverWait(driver, 3).until(lambda x: x.find_element_by_xpath("//android.widget.Button[@resource-id='com.tal.kaoyan:id/login_login_btn']")): driver.find_element_by_xpath("//android.widget.EditText[@resource-id='com.tal.kaoyan:id/login_email_edittext']").send_keys('asdfghjkl0111') driver.find_element_by_xpath("//android.widget.EditText[@resource-id='com.tal.kaoyan:id/login_password_edittext']").send_keys('*********') time.sleep(0.5) driver.find_element_by_xpath("//android.widget.Button[@resource-id='com.tal.kaoyan:id/login_login_btn']").click() except: pass # #點擊咨詢 if WebDriverWait(driver,10).until(lambda x: x.find_element_by_xpath("//android.support.v7.widget.RecyclerView[@resource-id='com.tal.kaoyan:id/date_fix']/android.widget.RelativeLayout[3]/android.widget.LinearLayout[1]/android.widget.ImageView[1]")): driver.find_element_by_xpath("//android.support.v7.widget.RecyclerView[@resource-id='com.tal.kaoyan:id/date_fix']/android.widget.RelativeLayout[3]/android.widget.LinearLayout[1]/android.widget.ImageView[1]").click() #獲取設備的尺寸 def get_size(): x=driver.get_window_size()['width'] y=driver.get_window_size()['height'] return x,y l= get_size() x1=int(l[0]*0.5) y1=int(l[1]*0.75) y2=int(l[1]*0.25) while True: #滑動刷新頁面,點到點滑動方式(x1,y1)--->(x2,y2) driver.swipe(x1,y1,x1,y2) time.sleep(0.5)
知識點講解
if WebDriverWait(driver,time).until(method
):
-
獲取設備的尺寸
def get_size(): x=driver.get_window_size()['width'] y=driver.get_window_size()['height'] return x,y
-
活動頁面
while True: #滑動刷新頁面,點到點滑動方式(x1,y1)--->(x2,y2) driver.swipe(x1,y1,x1,y2) time.sleep(0.5)
顯示等待:
指定一個等待條件,和一個最長等待時間,程序會判斷在等待時間內條件是否滿足,如果滿足則返回,如果不滿足會繼續等待,超過時間就會拋出異常.
if WebDriverWait(driver,time).until(method):
隱式等待
當使用了隱式等待執行測試的時候,如果 WebDriver沒有在 DOM中找到元素,將繼續等待,超出設定時間后則拋出找不到元素的異常, 換句話說,當查找元素或元素並沒有立即出現的時候,隱式等待將等待一段時間再查找 DOM,默認的時間是0.
browser.implicitly_wait(10)#等待十秒加載不出來就會拋出異常,10秒內加載出來正常返回