APP自动化之常用的元素定位和操作

前言

自动化测试核心三要素:

  • 定位元素
  • 操作元素
  • 断言结果
    web端一般采用selenium作为自动化测试工具,而selenium的定位元素一般通过id、name、class name、css、xpath等等。移动端一般采用appium作为自动化测试工具,在进行Android APP自动化测试的时候,appium的webdriver也给我们提供了许多定位元素的方式,毕竟appium有很多方法继承于selenium,今天采用Python语言对Android APP的元素进行定位。

通过webdriver定位

1.通过resource-id 定位:

需求:定位微信号/QQ号/邮箱登录这个元素

在这里插入图片描述

w_50,text_Q1NETiBA5byg5LiJ4pme,size_20,color_FFFFFF,t_70,g_se,x_16)
代码:

# 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.定位toast弹框

在这里插入图片描述

toast弹框一般用于添加成员成功、购物车添加成功了出现,大概存在3秒后,自动消失
一般用于断言脚本是否成功

toast定位一般分三步走
第一步 :打印会有toast当前页面的xml
获取有toast当前页面的xml
page_source = self.driver.page_source

第二步:分析xml,进行元素定位
xml:
<android.widget.Toast index="1" package="com.android.settings" 
class="android.widget.Toast" text="添加成功"


第三步:元素定位,获取属性值用于断言
__toast = (MobileBy.XPATH, "//*[@class='android.widget.Toast']")
text = self.find_element(self.__repetition_text).text

通过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

2input 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 原生定位 UIautomator

UIautomator 官网提供的一种定位方式,优点是响应速度快和全面,缺点是语法在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()

建议:不要手敲,直接粘贴,上面方法是二次封装后的

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Python app自动化遍历页面元素是指使用Python编写一个应用程序,通过自动化脚本来遍历页面中的元素,实现对页面的自动化操作。 要实现这个目标,通常需要使用Python中的一些库和工具,如Selenium和BeautifulSoup等。Selenium是一个用于网页测试的工具,它能够模拟用户在浏览器中的操作,包括点击、输入、选择等。BeautifulSoup是一个用于解析HTML和XML文档的库,它能够方便地提取网页中的元素信息。 首先,我们需要使用Selenium启动一个浏览器窗口,可以是Chrome、Firefox或者其他浏览器。然后,通过输入网址,访问目标页面。接下来,使用BeautifulSoup将页面源代码转化为可操作的对象。然后,使用Selenium和BeautifulSoup的方法和函数来遍历页面元素。 对于页面元素的遍历,有多种方法可以实现。一种常见的方式是使用XPath表达式来定位元素。XPath是一种用于在XML和HTML文档中选择节点的语言,它提供了很多灵活的选择方式,例如根据元素的ID、class、标签名等属性来选择元素。通过使用XPath表达式,我们可以很容易地定位到需要操作的页面元素。 在遍历页面元素的过程中,可以根据需求进行各种操作,例如点击按钮、输入文本、获取元素属性、截图等。可以将这些操作封装成函数或类,以便在需要的时候调用。 总之,使用Python编写的应用程序可以通过自动化脚本来遍历页面元素,实现对页面的自动化操作。这样可以提高效率、减少人工操作,适用于各种需要对页面进行批量操作的场景。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值