appium 移動端自動化測試工具(4)


一 簡介

原生應用和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

 

 

 實戰步驟

1 啟動appium,查看設備配置信息,不啟動session .

 

 

 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)

 

 

知識點講解

  • 導入等待模塊

  from selenium.webdriver.support.ui import WebDriverWait

  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秒內加載出來正常返回

 

 
       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM