APP元素定位和操作

mac2024-11-01  14

webdriver 提供了八种元素定位方法: id name class name tag name link text partial link text xpath css selector 在 Python 语言中对应的定位方法如下: find_element(s)_by_id() find_element(s)_by_name() find_element(s)_by_class_name() find_element(s)_by_tag_name() find_element(s)_by_link_text() find_element(s)_by_partial_link_text() find_element(s)_by_xpath() find_element(s)_by_css_selector()

Appium 完全继承了 WebDriver 中所定义的这些方法,除此之外对其进行了扩展,以便适合移动端对象的定位与操作

定位的工具: uiautomatorviewer.bat:Android SDK自带的一个工具,在tools目录下

monitor:Android SDK自带的一个工具,在tools目录下

Appium Inspector:Appium自带的一个功能,只有mac下可以使用该功能

定位详解:

通过id定位——(取resource-id的值):

driver.find_element_by_id(“com.taobao.taobao:id/button_cart_charge”)

也可以直接用id后面的内容driver.find_element_by_id(“button_cart_charge”)

通过class_name定位——(取class的内容)

driver.find_element_by_class_name(“android.widget.Button”)

通过accessibility_id定位——(取content-desc的内容) driver.find_element_by_accessibility_id(“结算”)

通过text定位——(需要使用android_uioutomater的定位方式,使用text的内容)

driver.find_elements_by_android_uiautomator(‘new UiSelector().text(“关注”)’) --纯文本定位 driver.find_element_by_android_uiautomator(‘new Uiselector().resourceId(“com.taobao.taobao:id/button_cart_charge”).text(“关注”)’) --id和text组合定位

使用这里需要注意一下,通过text定位的结果是个list,不能直接click。所以如果要点击需要取数组的值,比如下面是点击找到的第一个元素

driver.find_elements_by_android_uiautomator(“new UiSelector().text(‘关注’)”)[0].click()

通过xpath定位–(class为元素的类别) driver.find_element_by_xpath("//android.widget.Button//[@text=‘关注’]")----与web定位有区别,web为//标签名//[text(),“关注”]

2.定位元素的另一种写法:

需要导入这个包:from selenium.webdriver.common.by import By ele=(By.ID,“XXXX”) driver.find_element(*ele).click

例如:定位id为age的元素

方式一:driver.find_element_by_id("age”)

方式二:driver.find_element(By.ID,“age”)

这个操作的好处是可以直接把操作的by和value放到一个元组里,然后调用通用方法来传参获得元素结果

agg=(By.ID,“age”)

driver.find_element(*agg).click()

by的操作可以是:

By.ID 相当于by_id

By.CLASS_NAME 相当于by_class_name

By.XPATH 相当于by_xpath

By.NAME 相当于by_name

By.TAG_NAME 相当于by_tag_name

By.CSS_SELECTOR 相当于by_css_selector

By.LINK_TEXT 相当于by_link_text

3.find_elements_by_定位方式(value)返回元素数组

用法与find_element_by_方式(value)一致,但是返回一个数组。可以通过数组的索引来访问具体的某个结果

例如:通过class_name定位到多个元素,我想点击第一个元素

driver.find_elements_by_class_name("android.widget.RelativeLayout”)[0].click()

4.返回元素数组的另一种写法:find_elements(by,value)

用法与find_element(by,value)一致,但是返回一个数组。可以通过数组的索引来访问具体的某个结果

例如:通过class_name定位到多个元素,我想点击第一个元素

driver.find_elements(By.CLASS_NAME,"android.widget.RelativeLayout”)[0].click()

最新回复(0)