前言通过webdriver定位
1.通过resource-id 定位:2.通过class name 定位3.通过 accessibility_id定位元素4.通过xpath定位元素
属性值完全匹配contain 属性值部分匹配 5.定位toastd框 通过adb 定位Android 原生定位 UIautomator
通过文本定位滑动查找元素(先向上再向下)
前言自动化测试核心三要素:
定位元素 *** 作元素断言结果
web端一般采用selenium作为自动化测试工具,而selenium的定位元素一般通过id、name、class name、css、xpath等等。移动端一般采用appium作为自动化测试工具,在进行Android APP自动化测试的时候,appium的webdriver也给我们提供了许多定位元素的方式,毕竟appium有很多方法继承于selenium,今天采用Python语言对Android APP的元素进行定位。
通过webdriver定位
1.通过resource-id 定位:
需求:定位微信号/QQ号/邮箱登录这个元素
代码:
# el是定位元素后返回的对象实例 el = self.driver.find_element_by_id("com.tencent.mm:id/d67")2.通过class name 定位
需求:定位登录按钮
代码:
# el是定位元素后返回的对象实例 el = self.driver.find_element_by_class_name("android.widget.Button")3.通过 accessibility_id定位元素
PS:accessibility_id一般是用来辅助残疾人士使用APP的,国外APP此功能较完善,目前国内这块做的不太好,当残障人士点击此元素或高亮显示,或者系统自动读出来
# content-desc 为元素对应的属性值 driver.find_element_by_accessibility_id(content-desc)4.通过xpath定位元素
xpath定位大概是APP自动化中最常用的定位了,应为APP中id比较少,class name 也经常重复。xpath优点是用法灵活,缺点是每次都会比那里dom树,查询速度慢,影响了脚本的整体运行速度。
属性值完全匹配需求:定位登录按钮
代码:
# el是定位元素后返回的对象实例 el = self.driver.find_element_by_xpath('//*[@text="登录"]')contain 属性值部分匹配
我们在定位较长文本时,一种像上面一样进行完全匹配,但是那样太繁琐了,xpath给我们提供了一种模糊匹配的方式
需求:使用 录微 ;两个字定位 登录微信
xpath表达式
代码:
# el是定位元素后返回的对象实例 el = self.driver.find_element_by_xpath('//*[contains(@text,"录微")]')
xpath语法远远不止这两种,还有通过父亲定位儿子、儿子定位父亲、通过轴定位兄弟节点等等,有兴趣的同学可以具体查找下xpath的用法
5.定位toastd框toastd框一般用于添加成员成功、购物车添加成功了出现,大概存在3秒后,自动消失
一般用于断言脚本是否成功
toast定位一般分三步走 第一步 :打印会有toast当前页面的xml 获取有toast当前页面的xml page_source = self.driver.page_source 第二步:分析xml,进行元素定位 xml: 通过adb 定位有些时候,我们通过xpath语法、id 等等手段都定位不到元素,而且这些在企业实际运用非常常见,例如我们公司的app中登录和注册在同一个div中,你通过xpath根本定位不到具体的元素,点击一下,两个都会触发,这些其实都是开发不规范导致的,那么我们如何准确定位元素呢?Android SDK 给我们提供了一种底层的定位方式,那就是 adb shell模拟点击,adb是通过 元素的坐标进行定位的
1.input用法 输入文本信息:input text zhangsan 物理按键 *** 作: input keyevent KEYCODE_VOLUME_DOWN 点击(DOWN_UP) *** 作:input tap 500 500 # 500 500 是你要点的元素的绝对坐标 模拟滑动 *** 作:input swipe 200 500 400 500 模拟轨迹球 *** 作 input roll 100 200 2、input tap实现的是DOWN_UP事件,也就是点击 *** 作,后面两个参数是点击的坐标x,y一般来说上面命令都是在DOS窗口输入的,不能再脚本直接使用,需要给这些adb命令封装一个执行方法,Python调用 os.system() 来执行adb shell 命令
def execute_adb(self, adb_command): """ 执行adb命令 :param adb_command: adb shell 命令 :return: """ os.system(adb_command)Android 原生定位 UIautomatorUIautomator 官网提供的一种定位方式,优点是响应速度快和全面,缺点是语法在pycharm中没有自动联想容易写错,且支持Android,iOS不能用,但是xpath兼容iOS和Android
官网:https://developer.android.com/reference/android/support/test/uiautomator/UiSelector.html
通过文本定位写法:’new UiSelector().text(“text")'滑动查找元素(先向上再向下)代码:
# 滑动查找元素 def qjhd_search(self, text): """ 滑动查找元素,并点击元素 :param text: 要点击的元素的文本(必须要是唯一的) :return: """ self.driver.find_element(MobileBy.ANDROID_UIAUTOMATOR, 'new UiScrollable(new UiSelector().' 'scrollable(true).instance(0)).' 'scrollIntoView(new UiSelector().' 'text("{0}").instance(0));'.format(text)).click()建议:不要手敲,直接粘贴,上面方法是二次封装后的
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)