写点什么

Appium 自动化测试从入门到框架实战精华学习笔记(二)

  • 2022 年 9 月 16 日
    北京
  • 本文字数:2664 字

    阅读完需:约 9 分钟

本系列文章汇总了从 Appium 自动化测试从基础到框架高级实战中,所涉及到的方方面面的知识点精华内容(如下所示),希望对大家快速总结和复习有所帮助。1.Appium 基础 1 (环境搭建和简介)2.Appium 基础 2 (元素定位和元素常用方法)3.Appium 基础 3 (手势操作和 uiautomator 查找元素)4.Appium 基础 4 (显式等待)5.Appium 基础 5 (toast 和参数化)6.Appium 基础 6 (webview)7.Appium_ 企业微信练习 (非 PO,增加和删除联系人)8.Appium_ 企业微信练习 ( PO–增加联系人)本文为第二篇,主要讲解 Appium 手势操作、查找元素、显示等待(附实例代码)。9.进入雪球应用 10.再主页从下往上滑动 11.避免使用坐标(代码用获取屏幕的长宽来解决这个问题)12.得下载一个叫手势密码锁的 App,百度一下有 13.进入解锁的页面 14.设置解锁密码为一个 7 字 15.意外发现 Appium 可以指定去不同的初始的 activity,好像也是看应用的

  • 优点

  • xpath 定位速度慢

  • UIAutomator 是 Android 的工作引擎,速度快

  • 滚动查找很方便

  • 缺点

  • 表达式书写复杂,容易写错 IDE 没有提示

  • 通过 resource-id 定位

  • 通过 classname 定位

  • 通过 content-desc 定位

  • 通过文本定位

  • 组合定位

  • 通过父子关系定位

  • driver.find_element_by_android_uiautomator(“表达式”)

  • 注:外层要用单引号,内层的字符串用双引号,因为本来就是 Java,Java 双引号才表示字符串

  • 通过文本定位

  • new UiSelector().text(“text 文本”)

  • 通过 textContains 模糊匹配

  • new UiSelector().textContains(“text 文本”)

  • 通过某个文本开头匹配

  • new UiSelector().textStartWith(“text 文本”)

  • 正则表达式匹配

  • new UiSelector().textMatches(“text 文本”)

  • 组合定位

  • 比如 id 与 text 的属性组合:driver.find_element_by_android_uiautomator(‘new UiSelector().resourceId(“com.xueqiu.android:id/login_account”).text(“我的”)’)

  • 父子关系定位:childSelector,先定位到父类,再用 childSelector 来定位子类

  • driver.find_element_by_android_uiautomator(‘new UiSelector().resourceId(“com.xueqiu.android:id/login_account”).childSelector(text(“股票”))’)

  • 兄弟定位:fromParent

  • driver.find_element_by_android_uiautomator(‘new UiSelector().resourceId(“com.xueqiu.android:id/login_account”).fromParent(text(“股票”))’)

  • 有一些页面有持续滑动的能力,比如微博,没有分页,可以一直滑动,UIAutomator 提供了滑动的很好的方法。

  • driver.find_element_by_android_uiautomator(‘new UiScrollable(new UiSelector().’


    ‘scrollable(true).instance(0)).’


    ‘scrollIntoView(new UiSelector().textContains(“病人”).’


    ‘instance(0));’).click()

  • 注意:虚拟机和真机不一样,有时候真机的滑动是 ok 的,有时候虚拟机的不 ok

  • 强制等待是 sleep,强烈不推荐,设定的时间太固定,如果是模拟器等待 3 秒,真机可能只需要等待 2 秒

  • driver.implicitly.wat(timeout),贯穿全部元素的等待,只需要设定一次即可,通常是在创建 driver 的时候后的代码运行,是 dom 建立之后的等待;

  • 显示等待是在客户端的等待:引用两个包和一个例子

  • from selenium.webdriver.support.wait import WebDriverWait

  • from selenium.webdriver.support import expected_conditions

  • WebDriverWait(self.driver,10).until(expected_conditions.element_to_be_clickable(locator))

  • 显示等待与隐式等待相对,显示等待必须在每一个需要等待的元素前面进行声明

  • 是针对某个特定的元素设置等待时间,在设置时间内,默认美格一段时间检测一次当前某个元素是否存在

  • 如果在规定的时间内找到元素,则直接执行,即找到元素就执行相关操作

  • 如果超过设置时间检测不到就抛出异常,默认检测频率为 0.5s,默认抛出的异常时 NoSuchElementException

  • 用到的两个常用类

  • WebDriverWait

  • expected_condition

  • 显示等待可以等待动态加载的 AJax 元素,需要配合 expected_condition 来检查条件

  • 一般页面上元素的呈现顺序是

  • 首先出现 title;

  • 然后是 dom 树的出现,presence 还不完整,dom 树出现就是隐式等待了,但此时的元素可能还没有是可点击的状态,所以只用隐式等待,使用 click 方法,肯定会报错的;

  • CSS 出现:可见 visbility;

  • JS 的出现,JS 特效执行:可点击 clickable;

  • HTML 文档是自上而下加载的

  • JS 文件加载会阻塞 HTML 内容的加载,有些 JS 异步加载的方式来完成 JS 的加载

  • 样式表下载完成之后跟之前的样式表一起进行解析,会对之前那的与元素重新渲染

  • presence-visibility-clickabe,元素出现-可见-可点击,是元素的三个性质,当 DOM 树出现时,定位元素可能已经显示出来了,但是可见和可点击的属性可能还没加载出来,这时候元素的一些方法是不可用的,比如 element.click(),要等到 JS 渲染出来以后,元素的 click 属性才可以用

  • 对应 element.is_displayed()

  • 对应 element.is_selected()

  • 对应 element.is_enabled()

  • 同步加载:同步模式,又称阻塞模式,会阻止浏览器的后续处理,停止了后续的解析,因此停止了后续的文件加载(如图像)、渲染、代码执行。

  • 异步加载:异步加载又叫非阻塞,浏览器在下载执行 JS 同时,还会继续进行后续页面的处理。

  • WebDriverWait(self, driver, timeout, poll_frequency=POLL_FREQUENCY, ignored_exceptions=None)

  • driver:浏览器驱动

  • timeout:超时时间,单位秒

  • poll_frequency:检查的间隔步长,默认是 0.5s

  • ignored_exceptions:超时最后的抛出的异常,默认是 NoSuchElementException

  • 通常我们只会用到 driver 和 timeout

  • WebDriverWait().unti(self, method, message=’’) or until_not()的方法:

  • method:在等待期间,每个一段时间(init 中的 poll_frequency)调用这个传入的方法,直到返回值不是 False

  • message:如果超时,抛出 TimeoutException,将 message 传入异常

  • until not 是当某个元素小时或什么条件则继续执行,参数也相同

  • Appium 直接帮我们封装好了类,只需要传参数即可,比如我们使用的是 click(),只需要判断这个元素是否可点击属性才继续点击

  • 用法:expected_conditions.element_to_be_clickable(locator),其中 locator 就是:(By.ID, “com.xueqiu.android:id/tv_search”)

  • 常用的几个如下:

  • expected_conditions.element_to_be_clickable:元素是否可点击

  • expected_conditions.presence_of_element_located:元素是否被加到 Dom 树里面

  • expected_conditions.visibility_of_element_located:元素是否可见


    更多内容,我们在后续文章分享。

更多学习资料戳下方!!!

https://qrcode.ceba.ceshiren.com/link?name=article&project_id=qrcode&from=infoQ&timestamp=1662366626&author=xueqi

用户头像

社区:ceshiren.com 2022.08.29 加入

微信公众号:霍格沃兹测试开发 提供性能测试、自动化测试、测试开发等资料、实事更新一线互联网大厂测试岗位内推需求,共享测试行业动态及资讯,更可零距离接触众多业内大佬

评论

发布
暂无评论
Appium 自动化测试从入门到框架实战精华学习笔记(二)_测试_测吧(北京)科技有限公司_InfoQ写作社区