app自動化之啟動引數獲取、元素定位工具和元素定位方式

2022-01-10 12:00:01

https://blog.csdn.net/weixin_45912307/article/details/122392478

1. 啟動引數獲取

1.1 下載qq

官網:https://im.qq.com/download
在這裡插入圖片描述
在這裡插入圖片描述

1.2 獲取啟動引數

1. 獲取作業系統版本
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
2. 獲取裝置名稱

  • cmd
  • adb devices
    在這裡插入圖片描述
    3. 安裝qq
    在這裡插入圖片描述
    在這裡插入圖片描述
    在這裡插入圖片描述
    4. 獲取包名和啟動頁面名稱
  • 到build-tools的目錄下選擇任意一個版本,以32.0.0為例,進入aapt.exe目錄下
  • cmd回車開啟終端
  • 輸入aapt dump badging apk安裝路徑(如C:\Users\使用者名稱稱\Downloads\Android_8.8.55.6900_537105254_32.apk)
    在這裡插入圖片描述
    在這裡插入圖片描述
    在這裡插入圖片描述
    5. 設定appium server啟動引數
    在這裡插入圖片描述

1.3 整理啟動引數

# 1. 從appium庫裡匯入driver物件
from appium import webdriver
# 2. server啟動引數
desired_caps = dict()
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '5.1.1'
desired_caps['deviceName'] = 'emulator-5554'
desired_caps['appPackage'] = 'com.tencent.mobileqq'
desired_caps['appActivity'] = 'com.tencent.mobileqq.activity.SplashActivity'
# 3. 宣告driver物件
driver = webdriver.Remote('http://127.0.0.1:5554/wd/hub', desired_caps)

2元素定位工具和定位方式

2.1 第一種: android SDK自帶工具:uiAutormatorViewer

在這裡插入圖片描述
在這裡插入圖片描述

2.2 第二種:python版uiAutomator2中的weditor

1. 安裝工具

pip install -U uiautomator2   |			安裝第三方庫
python -m uiautomator2 init   | 		初始化uiautomator2
pip install -U weditor        | 		安裝定位工具
weditor --help				  | 		檢查是否安裝成功
weditor 					  | 		啟動定位工具(網頁版)

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
2. 工具使用

  • 啟動命令:weditor
    在這裡插入圖片描述
    在這裡插入圖片描述
    在這裡插入圖片描述
    在這裡插入圖片描述

2.3 第三種:appium自身定位工具appium inspector

1. 點選appium搜尋按鈕
在這裡插入圖片描述
2. 填寫連線裝置引數
注:點選「start session」前必須開啟需要定位元素所在頁面

{
  "platformName": "Android",
  "platformVersion": "5.1.1",
  "deviceName": "emulator-5554",
  "appPackage": "com.tencent.mobileqq",
  "appActivity": "com.tencent.mobileqq.activity.LoginActivity",
  "noRest": false
}

在這裡插入圖片描述
3. 工具使用及解讀

  • id:id唯一則有值不為空
  • xpath:採用絕對定位方式
    在這裡插入圖片描述

2.4 app自動化常用的元素定位方式

id   					 		|  					driver.find_element_by_id(id_value)
ANDROID_UIAUTOMATO       		|					Rnew UiSelector().方法名稱(值).方法名稱(值).方法名稱(值)
xpath					 		|					driver.find_element_by_xpath(xpath_value)
description content-desc 		|					driver.find_element_by_accessibility_id('view-text')
className				 		| 					driver.find_element_by_class_name(class_value)
座標					 		|					os.system('adb shell tap x y')
模糊定位						    |					contains(@key,value)		

3. 實際案例(以qq登入為例)

# 1. 從appium庫裡匯入driver物件
import time

from appium import webdriver
# 2. server啟動引數
def denglu():
    desired_caps = dict()
    desired_caps['platformName'] = 'Android'
    desired_caps['platformVersion'] = '5.1.1'
    desired_caps['deviceName'] = 'emulator-5554'
    desired_caps['appPackage'] = 'com.tencent.mobileqq'
    desired_caps['appActivity'] = 'com.tencent.mobileqq.activity.SplashActivity'
    desired_caps['noRest'] = True

    # 3. 宣告driver物件
    driver = webdriver.Remote('http://127.0.0.1:5554/wd/hub', desired_caps)
    driver.implicitly_wait(10)
    # 4. 點選登入
    driver.find_element_by_id("com.tencent.mobileqq:id/btn_login").click()
    # 5. 輸入使用者名稱
    user_name = driver.find_element_by_xpath('//*[@content-desc="請輸入QQ號碼或手機或郵箱"]')
    # 清除輸入框
    user_name.clear()
    user_name.send_keys('492224xxxx')
    # 6. 輸入密碼
    user_pwd = driver.find_element_by_id('com.tencent.mobileqq:id/password')
    # user_pwd = driver.find_element_by_xpath('//*[@resource-id="com.tencent.mobileqq:id/password"]')
    # 清除輸入框
    user_pwd.clear()
    user_pwd.send_keys('xxxxx')
    # 7.勾選同意協定
    driver.find_element_by_xpath('//*[@resource-id="com.tencent.mobileqq:id/pqz"]').click()
    # 8.點選登入
    driver.find_element_by_xpath('//*[@resource-id="com.tencent.mobileqq:id/login"]').click()
	
	# 退出或關閉驅動
    time.sleep(15)
    driver.quit()

在這裡插入圖片描述