【appium】appium自動化入門之元素篇

2020-10-27 11:00:42

今天上線發現還是有人對appium這塊感興趣的,先謝謝大家的關注和收藏了,您的收藏就是對我最大的支援
今晚也終於有空來水一下 文章了,這一次講詳細介紹appium中的元素定位

書接上文【appium】appium自動化入門之API(下)——兩萬字API長文,建議收藏
環境搭建篇【appium】appium自動化入門之環境搭建(上)

2.7 appium 元素定位

前言

appium 定位 app 上的元素,可以通過 ==id,name.class ==這些屬性定位到

2.7.1 id 定位

  1. appium 的id屬性也就是通過== UI Automator ==工具檢視的 resource-id 屬性
    2.
  2. 如上圖的定位,就可以通過 id 來定位格式 :

driver.find_element_by_id(" #這 裡 是 resource-id")

driver.find_element_by_id("#com.taobao.taobao:id/home_searchedit")

2.7.2 name 定位

  1. name 定位就是通過 UI Automator 工具檢視的== text 屬性== (注意的是:如果 text 屬性為空,那就不能通過 name 屬性定位了
    在這裡插入圖片描述

  2. 如上圖的定位,就可以通過 name 來定位 格式:driver.find_element_by_name("#這裡是 text") driver.find_element_by_name("#搭配新寵不能缺")

2.7.3 class 屬性

  1. class 定位就是通過 UI Automator 工具檢視的 class 屬性
    在這裡插入圖片描述

  2. 如上圖的定位,就可以通過 class 來定位
    格式 :driver.find_element_by_class_name("class 屬 性 ") driver.find_element_by_class_name(「android.widget.EditText」)
    (注意的是:一般一個頁面上的 class 屬性不唯一,元素不唯一的話定位會報錯了

2.7.4 accessibility_id

  1. accessibility_id 定位就是通過 UI Automator 工具檢視的 content-desc 屬 性(當然下圖這個元素的 content-desc 屬性為空,就不能通過這個屬性定位了, 這裡只是舉個例子)
    在這裡插入圖片描述

  2. 如上圖的定位,看到 content-desc 屬性有值,就可以通過 accessibility_id 來定位了格式:driver.find_element_by_accessibility_id(「#content-desc 的值」) driver.find_element_by_accessibility_id(「#xxx」)
    (注:一般一個頁面上的 class 屬性不唯一,元素不唯一的話定位會報錯了

一般來說上面的這幾個定位的,相對而言比較基礎,適合一些沒程式碼基礎,依靠工具來進行定位的同學

複雜一點的還可以通過== xpath 和 CSS定位==,八大元素裡個人覺得就這兩個是最全面好用的定位方式。
不過說起來也比較多,就不在這裡面細講了,需要這方面的視訊教學可以點選並輸入暗號:CSDN或者看大家的收藏吧,收藏高可以出一期八大元素定位專欄

2.8 native 和 webview 切換

前言

現在大部分 app 都是混合式的 native+webview模式,對應 native 上的元素通過 uiautomatorviewer 很容易定位到,webview 上的元素就無法識別了。

2.8.1 識別 webview

  1. 用定位工具檢視頁面,發現頁面上有些區域無法定位到,如下圖左邊紅色區域, 只能定位到這個大框框,紅色框裡面的元素是無法識別的。

  2. 這時候可以檢視元素屬性,如右圖它的 class 屬性,上面寫著 WebView,那毫 無疑問這種頁面就是 webview 了。
    在這裡插入圖片描述

2.8.2 contexts

  1. context 是中文翻譯是上下文,環境,當然學過 selenium 的同學,也可以理解為控制程式碼(handle),其實是一回事,反正知道是兩個不同的環境就行了。

  2. 先獲取頁面是 contexts 環境,如下圖紅色區域,獲取的是一個 list 列表:
    NATIVE_APP:這個就是 native,也就是原生的 WEBVIEW_com.xxxx :這個就是 webview

  3. 當看到列印出來有下圖兩個,就說明獲取到 webview 的context 了(當然也有 的 app 有坑,可能明明有 webview,卻通過 contexts 獲取不到,這種需要特殊 處理了)
    在這裡插入圖片描述

2.8.3 切換到 webview

1.要想操作 webview 上的元素,第一步需要切換環境(跟 selenium 的切換 iframe, 切換 handle 思路是一樣)
2.切換方法:switch_to.context(引數是 webview 的context) 由於第二步已經獲取到 contexts 是一個 list 物件,取這個 list 的第二個引數 就行,也就是 contexts[1]
在這裡插入圖片描述

2.8.4 切回 native

  1. webview 上操作完後,想回到native 上操作,這時候需要先切回來,切回native 有兩個方法:

方法一

driver.switch_to.context("NATIVE_APP")
 # 這個 NATIVE_APP 是固定的引數 

方 法 二 :

driver.switch_to.context(contexts[0]) 
 # 從 contexts 裡取第一個引數 

2.8.5 參考程式碼

#coding:utf-8 
from appium import webdriver 
import time 
desired_caps = {'platformName': 'Android', 
'deviceName': '30d4e606', 
'platformVersion': '6.0', 
'appPackage': 'com.baidu.yuedu', 
'appActivity': 
'com.baidu.yuedu.splash.SplashActivity'} 
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps) 
time.sleep(30) 
# 點圖書按鈕
driver.find_element_by_id("com.baidu.yuedu:id/righttitle").click() 
time.sleep(3) 
# 切換到圖書介面後獲取所有的環境 
contexts = driver.contexts 
print contexts 
# 切 換 到 webview 
driver.switch_to.context(contexts[1]) 
# 獲取當前的環境,看是否切換成功 
now = driver.current_context 
print now 

# 切 回 native 
driver.switch_to.context(contexts[0])

#driver.switch_to.context("NATIVE_APP") 這樣也是可以的
#獲取當前的環境,看是否切換成功 
now = driver.current_context 
print now 

2.9 檢視 webview 元素

前言

app 上webview 的頁面實際上是啟用的 chrome 瀏覽器的核心載入的,如何把手 機的網頁載入到電腦上,電腦的 chrome 瀏覽器上有個開發模式 DevTools,是可 以方便偵錯的。

環境準備

1.手機上裝一個 chrome 瀏覽器
2.電腦上裝 chrome 瀏覽器
3.手機連電腦 第

2.9.1 啟動 adb 服務

  1. 電腦上開啟 chrome 瀏覽器輸入:chrome://inspect/#devices
  2. 要是沒載入到手機裝置,就先啟動 adb 服務,cmd 輸入: >adb devices
    在這裡插入圖片描述

2.9.2 DevTools

1.電腦上開啟 chrome 瀏覽器輸入:chrome://inspect/#devices

2.Discover USB devices 這個要勾選的,可以檢查到手機裝置

3.Discover network targets 這個勾選,檢查到網路

4.下圖箭頭指向的,是手機的裝置名稱

5.Webview in com.baidu.yuedu(39.0.00)這個是手機上瀏覽器的核心版本號 39 (一般電腦上的 chrome 版本號最好要大於等於這個版本號)
在這裡插入圖片描述

2.9.3 檢視元素

  1. 上圖紅色框框的兩個地址就是載入到的 webview 的網頁地址了,點地址下的 inspect 按鈕,進入偵錯介面 (注:這個是需要梯子的)

  2. 不會爬梯子的也沒關係,把對應的 url 地址複製出來,重新開啟一個瀏覽器標 籤,輸入地址後,按 F12 也可以進偵錯介面。

  3. 接下來的元素定位就跟 selenium 的定位是一回事了。
    在這裡插入圖片描述
    不清楚selenium元素定位的可以點選並輸入暗號:CSDN問一下selenium元素定位的視訊,或者等我完結appium的文章,再寫appium吧(挖坑

2.9.4 手機版偵錯

  1. 上面瀏覽器開啟的是 web 版頁面,怎麼弄成手機版偵錯呢?
    點下面箭頭那個按鈕,可以切換成手機版
    在這裡插入圖片描述

後話

最後的最後上述程式碼有出錯的,可以先根據錯誤先百度檢視一下,還是解決不了可以點選並輸入暗號:CSDN,把你的問題截圖發一下,會有大佬帶你的在這裡插入圖片描述