appium AppiumBy定位方法【一】

目录

 一、元素定位方法

1. 常用:id/clss_name/content-desc/name/uiautomator/xpath

2. uiautomator:参考文章

模糊定位

组合定位

层级定位

二、Appium 元素操作

1.click()

2.clear()

3.send_keys(xx)

4.text

5.get_attribute

6.size

7.location

8.get_window_size

9.page_source

10.quit

11.get_screenshot_as_file

12.open_notifications


前提设置:

from appium import webdriver
# 模拟器/真机已经被电脑识别到(adb devices)
# 字典
# 1、设置终端参数项
desired_caps = {
    "platformName": "Android",
    "platformVersion": "6.1.1",
    "appPackage": "com.ss.android.article.news",
    "appActivity": "com.ss.android.article.news.activity.MainActivity",
    "deviceName": "JAD-AL50",
    "noReset": True,
    "unicodeKeyboard": True,  # 是否支持unicode的键盘。如果需要输入中文,要设置为“true”
    "resetKeyboard": True,  # 是否在测试结束后将键盘重轩为系统默认的输入法。
    "automationName": "UiAutomator2"  # 主要是版本引起的问题,有时候用的UiAutomator1
}
# 2、appium server进行启动
# 3、发送指令到appium server
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps)

夜神模拟器开启坐标:
手机桌面---->工具---->设置---->开发者选项---->打开“显示点按操作反馈”,“指针位置”
打开之后,我们鼠标滑动的时候就可以看到指定元素的位置坐标

 一、元素定位方法

导入库

from appium.webdriver.common.appiumby import AppiumBy

可看出各种定位方式:

By: XPATH ID  NAME WINDOWS_UI_AUTOMATION TAG_NAME CSS_SELECTOR CLASS_NAME LINK_TEXT PARTIAL_LINK_TEXT
AppiumBy: ACCESSIBILITY_ID ANDROID_UIAUTOMATOR ANDROID_VIEWTAG ANDROID_DATA_MATCHER ANDROID_VIEW_MATCHER CUSTOM IMAGE 

1. 常用:id/clss_name/content-desc/name/uiautomator/xpath

id :元素功能描述:

driver.find_element(AppiumBy.ID, "com.android.launcher3:id/tv_search")

class_name :元素功能描述

该方法一般不使用,由于界面元素的class重复度太高,基本上不存在唯一值

driver.find_element(AppiumBy.CLASS_NAME, "android.widget.TextView")

content-desc :元素功能描述

content-desc 属性是用来描述该元素的作用

find_element(AppiumBy.ACCESSIBILITY_ID, "com.android.launcher3:id/tv_search")

name :元素功能描述:注释:Appium1.5及之后的版本废弃了name属性

2. uiautomator:参考文章

固定写法:

driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR,"new UiSelector().方法("value")")

方法包括很多:参考国外地址(需要翻墙)

# JAVA中的实例化
new UI = UiSelector()
new UiSelector() # 简写不需要变量接收class

driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR,'') :外侧用 '' (单引号) ,里面的字符串用 " " (双引号)

# 1.className定位
# UISelector.className方法:通过ClassName找到所有的TextView控件,然后再在这些TextView控件查找text是”Add note“的控件
driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR,'new UiSelector().className("android.widget.TextView").text("重置")') 
# UISelector.classNameMatches方法:通过正则表达式判断className是否和预期的一致
driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR,'new UiSelector().classNameMatches(".*TextView$")')

# 2.通过文本信息来定位:
# UISelector.text方法 :通过直接查找当前界面上所有的控件来比较每个控件的text属性是否如预期值来定位控件
driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR,'new UiSelector().text("重置")')
# UISelector.textContains方法,跟以上方法类似,但是不需要输入控件的全部text信息,如例子,只要写“重”或“置”即可。
driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR,'new UiSelector().textContains("重")')
# UISelector.textStartsWith方法 通过判断一个控件的text的开始是否和预期的字串相吻合来获得控件
driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR,'new UiSelector().textStartsWith("重置")')
# UISelector.textMatches方法 通过正则表达式的方式来比较控件的text来定位控件
driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR,'new UiSelector().textMatches("^重.*")')

# 3.通过控件ID定位。
# UiSelector.resourceId方法
driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR,'new UiSelector().resourceId("com.android.settings:id/title")')
# UiSelector.resourceIdMatches方法
driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR,'new UiSelector().resourceIdMatches(".+id/title")')

# 4.通过控件contentDescription定位。即是 content'desc :contentDescription 一直是强调开发人员需要添加进去的
# UiSelector.description方法
driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR,'new UiSelector().description("lmappDesc")')
# UiSelector.descriptionContains方法
driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR,'new UiSelector().descriptionContains("lmapp")')
# UiSelector.descriptionStartWith方法
driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR,'new UiSelector().descriptionStartsWith("lmapp")')
# UiSelector.descriptionMatches方法
driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR,'new UiSelector().descriptionMatches("^lmapp.*$")')

# 5.1滑动屏幕查找 适用于 ANDROID 本身的滑动 存在滚动条的滑动,那么不显示滚动条执行报错!
e = 'new UiScrollable(new UiSelector().scrollable(true).instance(0)).'+'scrollIntoView(new UiSelector().text("Popup Menu").instance(0));'
driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR,e).click()

# 5.2滑动屏幕查找:
ele = 'new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().description("活动中心").instance(0));'
driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR, ele).click()

# 6.组合应用
driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR,'new UiSelector().text("重置").resourceId("com.android.settings:id/title")')

xpath :元素功能描述(能不用就不同xpath,效率太低)

根据id属性定位
表达式://*[@resource-id='id属性']

根据text属性定位
表达式://*[@text='text文本属性']

根据class属性定位
表达式: //*[@class='class属性']

通过content-desc属性定位

表达式: //*[@content-desc='文本']
driver.find_element(AppiumBy.XPATH, "//*[@resource-id='com.android.launcher3:id/tv_search']").click()
driver.find_element(AppiumBy.XPATH, "//*[@text='xxxx']").click()
driver.find_element(AppiumBy.XPATH, "//*[@class='android.widget.TextView']").click()
driver.find_element(AppiumBy.XPATH, "//*[@content-desc='xxxx']").click()

模糊定位

contains是模糊匹配的定位方法,对于一些元素的属性是可变的,但有一部分是固定的,这种就可以模糊匹配

//*[contains(@text, '查看')]
//*[contains(@content-desc, '')]
//*[contains(@resource-id, 'id属性')]
//*[contains(@clsss, 'class属性')]

组合定位

当单个元素定位不唯一时,这时候我们就可以采用多个属性组合定位,xpath也可以同时匹配2个属性,text, resource-id,class ,index,content-desc 这些属性都能任意组合定位。

id_class = '//android.widget.TextView[@resource-id='com.netease.edu.study:id/look_more']'
desc_class = '//*[@text='查看更多' and @index='2']'

层级定位

元素属性除了class属性,其他属性都为空,且class属性又不唯一时候用层级:

父类定位子类:

'//[@resoure-id='com.android.launcher3:id/tv_search']/android.widget.TextView'
'//[@resoure-id='com.android.launcher3:id/tv_search']/com.android.launcher3:id/tv_search[2]'

子类定位父类

'//[@resource-id='com.android.launcher3:id/tv_search']/…'
'//[@resource-id='com.android.launcher3:id/tv_search']/parent::'
'//[@resource-id='com.android.launcher3:id/tv_search']/parent::android.widget.LinearLayout'

兄弟元素定位:

'//*[@resource-id='com.android.launcher3:id/tv_search']/…/android.widget.RelativeLayout'

二、Appium 元素操作


1.click()


//点击操作
也可以用tab实现点击操作

driver.find_element(AppiumBy.ID, “com.android.launcher3:id/tv_search”).click()


2.clear()


//清空输入框内容

driver.find_element(AppiumBy.ID, “com.android.launcher3:id/tv_search”).clear()

3.send_keys(xx)


//输入框内输入内容

driver.find_element(AppiumBy.ID, “com.android.launcher3:id/tv_search”).send_keys(“test content”)

4.text


//获得元素的text内容

print(driver.find_element(AppiumBy.ID, “com.android.launcher3:id/tv_search”).text)

5.get_attribute


// 返回元素的文本值

driver.element.get_attribute(“class”)

6.size


//获取元素的大小(高和宽)

driver.element.size

7.location


// 获取元素左上角的坐标

driver.location.size

8.get_window_size


// 获取手机的分辨率

driver.get_window_size()

9.page_source


// 获取当前页面的源码

driver.page_source

10.quit


// 退出

driver.quit()

11.get_screenshot_as_file


// 将手机屏幕截图并保存电脑上的文件

driver.get_screenshot_as_file(“路径”)

12.open_notifications


// 打系统通知栏(仅支持API 18 以上的安卓系统)

driver.open_notifications()

原文

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Appium 是一个开源的自动化测试工具,用于移动应用的UI测试,它支持多种平台和多种编程语言,包括 Java。在 Appium 中,定位元素是测试脚本的核心部分,Java API 提供了多种方法来查找 UI 元素。以下是一些常见的元素定位方法: 1. By.id (根据ID定位):这是最常用的定位方式,通过元素的唯一 ID 来找到元素。 ```java WebElement element = driver.findElement(By.id("your_element_id")); ``` 2. By.name (根据名称定位):如果元素的name属性是唯一的,可以使用此方法。 ```java WebElement element = driver.findElement(By.name("element_name")); ``` 3. By.className (根据class名称定位):定位具有特定CSS类名的元素。 ```java WebElement element = driver.findElement(By.className("your_class_name")); ``` 4. By.tagName (根据标签名定位):如定位所有的`<div>`元素。 ```java List<WebElement> elements = driver.findElements(By.tagName("div")); ``` 5. By.xpath (根据XPath表达式定位):提供强大的路径选择能力,适用于复杂结构的页面。 ```java WebElement element = driver.findElement(By.xpath("//element[@attribute='value']")); ``` 6. By.linkText (根据链接文字定位):找到匹配链接文本的元素。 ```java WebElement element = driver.findElement(By.linkText("link_text")); ``` 7. By.partialLinkText (根据链接文本的部分匹配):对链接文本进行模糊匹配。 每个定位器的使用取决于实际的UI元素结构,可能需要尝试多种方法才能找到正确的元素。定位元素后,可以执行点击、输入等操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值