今天上線發現還是有人對appium這塊感興趣的,先謝謝大家的關注和收藏了,您的收藏就是對我最大的支持
今晚也終于有空來水一下 文章了,這一次講詳細介紹appium中的元素定位,
書接上文【appium】appium自動化入門之API(下)——兩萬字API長文,建議收藏
環境搭建篇【appium】appium自動化入門之環境搭建(上)
目錄
- 2.7 appium 元素定位
- 前言
- 2.7.1 id 定位
- 2.7.2 name 定位
- 2.7.3 class 屬性
- 2.7.4 accessibility_id
- 2.8 native 和 webview 切換
- 前言
- 2.8.1 識別 webview
- 2.8.2 contexts
- 2.8.3 切換到 webview
- 2.8.4 切回 native
- 2.8.5 參考代碼
- 2.9 查看 webview 元素
- 前言
- 環境準備
- 2.9.1 啟動 adb 服務
- 2.9.2 DevTools
- 2.9.3 查看元素
- 2.9.4 手機版除錯
- 后話
2.7 appium 元素定位
前言
appium 定位 app 上的元素,可以通過 ==id,name.class ==這些屬性定位到
2.7.1 id 定位
- appium 的id屬性也就是通過== UI Automator ==工具查看的 resource-id 屬性

- 如上圖的定位,就可以通過 id 來定位格式 :
driver.find_element_by_id(" #這 里 是 resource-id")
driver.find_element_by_id("#com.taobao.taobao:id/home_searchedit")
2.7.2 name 定位
-
name 定位就是通過 UI Automator 工具查看的== text 屬性== (注意的是:如果 text 屬性為空,那就不能通過 name 屬性定位了)

-
如上圖的定位,就可以通過 name 來定位 格式:driver.find_element_by_name("#這里是 text") driver.find_element_by_name("#搭配新寵不能缺")
2.7.3 class 屬性
-
class 定位就是通過 UI Automator 工具查看的 class 屬性

-
如上圖的定位,就可以通過 class 來定位
格式 :driver.find_element_by_class_name("class 屬 性 ") driver.find_element_by_class_name(“android.widget.EditText”)
(注意的是:一般一個頁面上的 class 屬性不唯一,元素不唯一的話定位會報錯了)
2.7.4 accessibility_id
-
accessibility_id 定位就是通過 UI Automator 工具查看的 content-desc 屬 性(當然下圖這個元素的 content-desc 屬性為空,就不能通過這個屬性定位了, 這里只是舉個例子)

-
如上圖的定位,看到 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
-
用定位工具查看頁面,發現頁面上有些區域無法定位到,如下圖左邊紅色區域, 只能定位到這個大框框,紅色框里面的元素是無法識別的,
-
這時候可以查看元素屬性,如右圖它的 class 屬性,上面寫著 WebView,那毫 無疑問這種頁面就是 webview 了,

2.8.2 contexts
-
context 是中文翻譯是背景關系,環境,當然學過 selenium 的同學,也可以理解為句柄(handle),其實是一回事,反正知道是兩個不同的環境就行了,
-
先獲取頁面是 contexts 環境,如下圖紅色區域,獲取的是一個 list 串列:
NATIVE_APP:這個就是 native,也就是原生的 WEBVIEW_com.xxxx :這個就是 webview -
當看到列印出來有下圖兩個,就說明獲取到 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
- 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 服務
- 電腦上打開 chrome 瀏覽器輸入:chrome://inspect/#devices
- 要是沒加載到手機設備,就先啟動 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 查看元素
-
上圖紅色框框的兩個地址就是加載到的 webview 的網頁地址了,點地址下的 inspect 按鈕,進入除錯界面 (注:這個是需要梯子的)
-
不會爬梯子的也沒關系,把對應的 url 地址復制出來,重新打開一個瀏覽器標 簽,輸入地址后,按 F12 也可以進除錯界面,
-
接下來的元素定位就跟 selenium 的定位是一回事了,

不清楚selenium元素定位的可以點擊并輸入暗號:CSDN問一下selenium元素定位的視頻,或者等我完結appium的文章,再寫appium吧(挖坑)
2.9.4 手機版除錯
- 上面瀏覽器打開的是 web 版頁面,怎么弄成手機版除錯呢?
點下面箭頭那個按鈕,可以切換成手機版

后話
最后的最后上述代碼有出錯的,可以先根據錯誤先百度查看一下,還是解決不了可以點擊并輸入暗號:CSDN,把你的問題截圖發一下,會有大佬帶你的
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/195176.html
標籤:java
上一篇:Activity界面基本,實作Android界面,并通過intent實作跳轉,界面顯示學生的姓名,學號,email.
