二、appium+python xpath、android_uiautomator定位元素的方法


1.繼承webdriver的幾個常見的定位方法

a.find_element_by_id("id")

b.find_element_by_name()  #text值,appium 1.14.0+python 3.7這個方法提示不支持

c.find_element_by_className()

2.appium拓展方法

這里以微信會話界面為例

a.find_element_by_android_uiautomator('new UiSelector().text("")')

 

# device_a.find_element_by_android_uiautomator('new UiSelector().text("CYDtest594")').click()
    # device_a.find_element_by_android_uiautomator('new UiSelector().textContains("CYD")').click()
    # device_a.find_element_by_android_uiautomator('new UiSelector().textStartsWith("CYD")').click()
    device_a.find_element_by_android_uiautomator('new UiSelector().textMatches("CYD(.*)")').click()

 

b.find_element_by_android_uiautomator('new UiSelector().className("")')  用法可參考a(classNameContains())

find_element_by_android_uiautomator('new UiSelector().classNameContains("")')

c.find_element_by_android_uiautomator('new UiSelector().resourceId("")')   #

find_element_by_android_uiautomator('new UiSelector().resourceIdMatches("")')   #正則

d.description--(用法同1)

e.find_element_by_accessibility_id content_dec

2.1 一些appium的其他定位方式

a.特殊屬性

 

返回值

API

說明

uiselector

Checked(boolean val)

選擇屬性

uiselector

Clickable(boolean val)

可點擊屬性

uiselector

Enabled(boolean val)

Enable屬性

uiselector

Focuseable(boolean val)

焦點屬性

uiselector

Focused(boolean val)

當前焦點屬性

uiselector

Longclickable(boolean val)

長按屬性

uiselector

Scrollable(boolean val)

滾動屬性

uiselector

Selected(boolean val)

背景選擇屬性

 

b.index和instance

 

索引index指在同級中的編號,在兄弟類中的主鍵編號。實例instance指的是整個布局文件中的編號,同一個類的同級編號。???

index

 

device_a.find_elements_by_android_uiautomator('new UiSelector().className("android.widget.LinearLayout")').index(0)  # 'WebElement' object has no attribute 'instance'
device_a.find_element_by_android_uiautomator('new UiSelector().className("android.widget.LinearLayout")').index(0)  # 也錯誤

instance()
device_a.find_elements_by_android_uiautomator('new UiSelector().className("android.widget.LinearLayout")').instance(0)  # 運行提示錯誤,list has no attribute instance
device_a.find_element_by_android_uiautomator('new UiSelector().className("android.widget.LinearLayout")').instance(0) # 運行提示錯誤,'WebElement' object has no attribute 'instance'

 

這里其實find_elements返回的是一個list,可以直接使用下標list[]。

 

c.多個屬性

 eg.

device_a.find_element_by_android_uiautomator('new UiSelector().className("android.view.View").text("CYDtest594")').click()

 3.相對元素定位

childSelector:從當前類往下找符合條件的子類 eg.

device_a.find_element_by_android_uiautomator('new UiSelector().className("android.view.View")').childSelector('new UiSelector().xxx')

fromParent

device_a.find_element_by_android_uiautomator('new UiSelector().className("android.view.View")').fromParent('new UiSelector().xxx')  找object同一父控件的兄弟控件

先找到父元素A=
evice_a.find_element_by_android_uiautomator('new UiSelector().className("android.view.View"))
再找A下的子元素A.find_element_by_...

4.xpath定位
已微信為例
4.1 屬性定位

 

 
        

 text定位

# text定位
    device.find_element_by_xpath('//*[@text="自助工具"]').click()

resource-id定位 這里的屬性值不唯一,為做演示選取了該屬性,下面class也是如此。

# resource-id定位
    device.find_elements_by_xpath('//*[@resource-id="com.tencent.mm:id/alw"]')[0].click()
class定位
# class定位
    device.find_elements_by_xpath('//*[@class="android.widget.TextView"]')[2].click()
也可以寫作
device.find_elements_by_xpath('//android.widget.TextView')[2].click()
content-desc定位
此屬性值為空,不做演練。
4.2contains模糊定位
屬性值只有部分值唯一的時候,可以用contains匹配
例如
device.find_element_by_xpath('//*[contains(@text,"自助")]').click()
4.3 組合定位
class、content-desc、resource-id、text可以自由組合。
繼續以上面的為例:class+text
device.find_element_by_xpath('//android.widget.TextView[@text="自助工具"]').click()
也可寫作
device.find_element_by_xpath('//*[@class="android.widget.TextView" and @text="自助工具"]').click()
4.4 層級關系定位
先定位父元素,再去定位子元素,或者定位子元素,再通過子元素找到父元素、定位子元素->找到父元素->兄弟元素
eg.
device.find_element_by_xpath('//android.widget.TextView[@text="自助工具"]/..')

也可寫作
device.find_element_by_xpath('//android.widget.TextView[@text="自助工具"]/parent::*')

或者
device.find_element_by_xpath('//android.widget.TextView[@text="自助工具"]parent::android.widget.ListView')

以上為查找子元素的父元素。
device.find_element_by_xpath('//android.widget.TextView[@text="自助工具"]/../android.widget.TextView[@text="凍結賬號"]')
查找兄弟元素




免責聲明!

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



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