appium---uiautomator定位方法

2021-02-13 跟著安靜學測試
前言

  前面總結了7種定位方法,今天在介紹一種uiautomator方法,其實appium就是基於uiautomator框架實現的,讓我們一起看下uiautomator有哪些定位方法可以使用

uiautomator是什麼

UIAutomator是android的自動化測試框架,也是Android-Sdk中一個查看頁面組件元素工具

uiautomator定位方法

前面介紹了常規的定位方法,這裡uiautomator又提供了3種常用的定位方法,這次我們主要通過uiautomator方法進行介紹,定位的話依舊拿淘寶來做實戰

通過Text方法

# text(「text文本」)

text = 'text("註冊/登錄")'
driver.find_element_by_android_uiautomator(text).click()

# 文本比較長,可以使用textContains模糊查詢定位 textContains('text文本')

text1 = 'textContains("請輸入手機號碼")'
driver.find_element_by_android_uiautomator(text1).send_keys("123456")

# textStartsWith("以text文本開頭")

text2 = 'textStartsWith("請輸入驗證碼")'
driver.find_element_by_android_uiautomator(text2).send_keys("12234")

運行結果:

由於用的是模擬器可能有點卡頓。抱歉哈

代碼結果:

from appium import webdriver
import time
desired_caps = {
                 'platformName': 'Android',  # 測試版本
                 'deviceName': 'emulator-5554',   # 設備名
                 'platformVersion': '5.1.1', # 系統版本
                "appPackage": "com.taobao.taobao",   # app包名
                "appActivity": "com.taobao.tao.welcome.Welcome",   # 啟動launch Activity
                "noReset": True,  # 不清空數據
                "unicodeKeyboard": True,    # 使用Unicode編碼方式發送字符串
              "resetKeyboard": True,      # 鍵盤隱藏起來
                        }
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
time.sleep(4)
text = 'text("註冊/登錄")'
driver.find_element_by_android_uiautomator(text).click()
time.sleep(5)
text1 = 'textContains("請輸入手機號碼")'
driver.find_element_by_android_uiautomator(text1).send_keys("123456")
time.sleep(5)
text2 = 'textStartsWith("請輸入驗證碼")'
driver.find_element_by_android_uiautomator(text2).send_keys("12234")

Class Name方法

這個方法和appium定位方法一樣都是通過Class屬性進行定位

# 通過class定位登錄按鈕
className = 'className("android.widget.Button")'
driver.find_element_by_android_uiautomator(className).click()

通過uiautomator工具找到註冊/登錄按鈕的Class屬性

resource-id方法

resourceld 和appium中的id一樣。

# 通過resourceId定位輸入框
id = 'resourceId("com.taobao.taobao:id/aliuser_login_mobile_et")'
driver.find_element_by_android_uiautomator(id).send_keys("123456")

同意的方法通過uiautomator找到搜索框的id

 id和class定位執行結果:

代碼結果:

# coding:utf-8
from appium import webdriver
import time
desired_caps = {
                 'platformName': 'Android',  # 測試版本
                 'deviceName': 'emulator-5554',   # 設備名
                 'platformVersion': '5.1.1', # 系統版本
                "appPackage": "com.taobao.taobao",   # app包名
                "appActivity": "com.taobao.tao.welcome.Welcome",   # 啟動launch Activity
                "noReset": True,  # 不清空數據
                "unicodeKeyboard": True,    # 使用Unicode編碼方式發送字符串
              "resetKeyboard": True,      # 鍵盤隱藏起來
                        }
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
time.sleep(6)
# 通過class定位登錄按鈕
className = 'className("android.widget.Button")'
driver.find_element_by_android_uiautomator(className).click()
time.sleep(5)
# 通過resourceId定位輸入框
id = 'resourceId("com.taobao.taobao:id/aliuser_login_mobile_et")'
driver.find_element_by_android_uiautomator(id).send_keys("123456")

上面寫了一些單獨的定位方法,其實uiautomator還支持組合定位元素,意思就是支持id和text或者text和className等,這樣的定位更加準確,具體的繼續往下看吧

組合定位

# 1、id和text方法組合

# 通過text+ClassName組合 (resourceId(屬性).text(屬性))
classText = 'className("android.widget.Button").text("註冊/登錄")'
driver.find_element_by_android_uiautomator(classText).click()
# 2、class和text方法組合

# 通過text+ID組合 (resourceId(屬性).text(屬性))
IdText = 'resourceId("com.taobao.taobao:id/aliuser_login_mobile_et").text("請輸入手機號碼")'
driver.find_element_by_android_uiautomator(IdText).send_keys("123456")

執行結果:

# coding:utf-8
from appium import webdriver
import time
desired_caps = {
                 'platformName': 'Android',  # 測試版本
                 'deviceName': 'emulator-5554',   # 設備名
                 'platformVersion': '5.1.1', # 系統版本
                "appPackage": "com.taobao.taobao",   # app包名
                "appActivity": "com.taobao.tao.welcome.Welcome",   # 啟動launch Activity
                "noReset": True,  # 不清空數據
                "unicodeKeyboard": True,    # 使用Unicode編碼方式發送字符串
              "resetKeyboard": True,      # 鍵盤隱藏起來
                        }
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
time.sleep(6)
classText = 'className("android.widget.Button").text("註冊/登錄")'
driver.find_element_by_android_uiautomator(classText).click()
time.sleep(5)
# 通過text+ID組合
IdText = 'resourceId("com.taobao.taobao:id/aliuser_login_mobile_et").text("請輸入手機號碼")'
driver.find_element_by_android_uiautomator(IdText).send_keys("123456")

父子定位childSelector

 定位的時候我們也可以通過父級找到子級定位

 

 

格式:

# 通過父子定位
(父親屬性).childSelector(定位屬性)
# 通過父子定位
fuzi = 'resourceId("com.taobao.taobao:id/home_searchbar").childSelector(className("android.widget.EditText"))'
driver.find_element_by_android_uiautomator(fuzi).click()

兄弟定位fromParent

定位也可以通過兄弟之間的完成定位

格式:

# 通過兄弟定位
(兄弟屬性).fromParent(定位屬性)
# 通過兄弟元素定位
xiongdi = 'resourceId("com.taobao.taobao:id/photoBtn").fromParent(className("android.widget.EditText"))'
driver.find_element_by_android_uiautomator(xiongdi).send_keys(u"牛仔褲")

 完成代碼:

# coding:utf-8
from appium import webdriver
import time
desired_caps = {
                 'platformName': 'Android',  # 測試版本
                 'deviceName': 'emulator-5554',   # 設備名
                 'platformVersion': '5.1.1', # 系統版本
                "appPackage": "com.taobao.taobao",   # app包名
                "appActivity": "com.taobao.tao.welcome.Welcome",   # 啟動launch Activity
                "noReset": True,  # 不清空數據
                "unicodeKeyboard": True,    # 使用Unicode編碼方式發送字符串
                "resetKeyboard": True,      # 鍵盤隱藏起來
                        }
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
time.sleep(6)
# 通過父子定位
fuzi = 'resourceId("com.taobao.taobao:id/home_searchbar").childSelector(className("android.widget.EditText"))'
driver.find_element_by_android_uiautomator(fuzi).click()
time.sleep(6)
# 通過兄弟定位
xiongdi = 'resourceId("com.taobao.taobao:id/photoBtn").fromParent(className("android.widget.EditText"))'
driver.find_element_by_android_uiautomator(xiongdi).send_keys(u"牛仔褲")

結果:

這個地方沒有設置appium的鍵盤所有導致的是亂碼的。

 元素定位方面方法非常的多,喜歡那種我們用哪種,哪種簡單我們就用那種

相關焦點

  • Windows-UI自動化:如何選擇合適的測試框架
    官網文檔說明:http://appium.io/docs/en/drivers/windows/【簡單原理】基於屬性定位進行腳本編寫,通過埠連接WebDriverAgent驅動微軟自身的WinAppDriver,對於本機App進行佔用和操作。
  • 全網最全最細的appium自動化測試環境搭建教程以及appium工作原理
    4.安裝和配置Appium(1) 下載和安裝appium-desktop。下載地址:(強烈建議使用迅雷下載)https://github.com/appium/appium-desktop/releases(2) 打開appium輸入:127.0.0.1和4723登錄,如下圖:
  • Appium自身非必現bug影響自動化測試正常運行?Try-Catch幫您解決
    >使用appium進行抖音主頁的自動化測試,發現導致腳本執行失敗的非必現appium自身的bug具體場景1.使用appium連接安卓手機後運行腳本打開抖音主頁2.使用腳本向上滑動屏幕刷新抖音內容二、第二步--------------使用try-catch跳過已知bug繼續進行腳本測試目標跳過已知的bug繼續運行自動化測試腳本試圖發現其他場景的bug步驟1.定義向上滑動的方法
  • Appium自動化測試環境搭建
    ,但是下載安裝包也比較慢,好歹安裝沒出現什麼問題下載地址https://bitbucket.org/appium/appium.app/downloads/(modify at: 2019.08.12-這個地址不要用了,我後來才發現裡面的版本並不是最新的,是很老的版本,對後期定位app中的toast會失敗)https://github.com/appium/
  • Python Appium開啟Android測試之路
    2、啟動微博  #-*-coding:utf-8-*-  #Time:2017/7/20 18:06  #Author:YangYangJun  import time  from appium  3.1、appium的webdriver提供了11種元素定位的方法,在selenium的基礎上擴展了三個,可以在pycharm裡面輸入driver.find_element_by然後會自動匹配出來
  • 【收藏乾貨】基於Appium、Python的自動化測試環境部署和實踐
    安裝carthage,brew install carthage安裝xcpretty,gem install xcpretty在安裝好appium舊版情況下,卸載appium。npm uninstall –g  appium.安裝appium1.6.3,npm install –g appium。
  • Android + Appium 環境搭建
    node-v10.15.3-win-x642.驗證是否安裝成功:cmd  node -v     檢查安裝版本cmd  npm -v   nodejs裡下載安裝包的小工具(類似Python的pip)四、安裝.net framework4.5(win10自帶):appium
  • Appium+python自動化8-Appium Python API(上)
    這是一個安卓的方法    :Args:    - app_package - The package containing the activity to start.    - app_activity - The activity to start.
  • Appium 1.18.1 發布,移動應用自動化測試工具
    ,以避免在已有匹配驅動程序的情況下重複執行 Chromedriver 下載操作Android (UiAutomator2) 修復以針對丟失的路線返回正確的響應 修復以允許 double values 作為 touch action coordinates 修復#14586,這可能會影響從嵌套查找請求中獲取的在 elemetns 上執行的 XPath 定位器
  • 同時連接多臺手機,使用appium實現app自動化測試
    同時連接多臺手機,使用appium實現app自動化測試使用appium可以實現app自動化測試,我們之前是連接一臺手機去運行,如何同時連接多臺手機呢?很多人可能想到的是多線程(threading)。今天分享一種比多線程更簡單的方法,雖然不是多臺手機同時運行,但可以連接多臺手機依次運行。大致的運行方式是:001號測試用例:A手機,B手機...,002號測試用例:A手機,B手機...
  • APP UI自動化測試思路總結
    四,測試環境搭建1,測試電腦選擇有條件的話建議使用Mac機器專門用於UI自動化測試,因為ios app ui自動化只能在Mac機器上進行。4,UI自動化測試框架環境搭建windows環境下搭建Appium請參考appium環境搭建,Mac下搭建Appium稍微複雜點若選擇Airtest框架的話,請參考官網。
  • 一套完整的Appium自動化測試環境搭建過程
    因為appium是nodejs實現的,node相當於appium的解釋器  Node.js下載地址:https://nodejs.org/en/download/current/由於我的電腦是windows 64位的系統,這裡我直接下載windows 64位的msi程序文件下載完成後直接雙擊安裝即可(傻瓜式的安裝),所以我就不說具體步驟了,安裝後
  • APP自動化測試系列之Appium介紹及運行原理
    它告訴 appium server 這樣一些事情:Desired Capabilitie後續文章會詳細介紹。Bootstrap:首先,bootstrap是uiautomator的測試腳本,它的入口類bootstrap繼承於UiautomatorTestCase,所以Uiautomator可以正常運行它,它也可以正常使用uiautomator的方法
  • APP UI自動化測試,思路全總結在這裡了
    有條件的話建議使用Mac機器專門用於UI自動化測試,因為ios app ui自動化只能在Mac機器上進行。剛開始進行測試腳本調試時可以選擇模擬器,Android模擬器可選擇Gernymotion、夜神模擬器,具體參考博客Android模擬器的使用。待整個測試項目開發完成後,建議換成真機跑自動化腳本,這樣更接近真實的用戶使用場景。
  • 記一次搭建Appium自動化測試環境的完整過程
    因為appium是nodejs實現的,node相當於appium的解釋器https://nodejs.org/en/download/current/  由於我的電腦是windows 64位的系統,這裡我直接下載windows 64位的msi程序文件  下載完成後直接雙擊安裝即可(傻瓜式的安裝),所以我就不說具體步驟了,安裝後,檢查是否安裝成功  cmd終端輸入第一個命令 node -
  • Appium用例分模塊與常見錯誤
    部分模塊代碼會出現重複使用的情況,為了解決代碼重複編寫,故將此模塊代碼直接生成一個模塊(module),便於其他模塊調用調用子模塊的腳本語法:From 包名.文件名 import方法1,方法2,方法3 示例:將初始化腳本單獨形成一個模塊步驟一:Capability.py文件的腳本#!
  • 測試工程師必須要學會的APP UI 自動化都在這裡了!
    1,測試電腦選擇有條件的話建議使用Mac機器專門用於UI自動化測試,因為ios app ui自動化只能在Mac機器上進行。4,UI自動化測試框架環境搭建windows環境下搭建Appium請參考appium環境搭建,Mac下搭建Appium稍微複雜點若選擇Airtest框架的話,請參考官網。