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

简介: 本系列文章汇总了从 Appium 自动化测试从基础到框架高级实战中,所涉及到的方方面面的知识点精华内容(如下所示),希望对大家快速总结和复习有所帮助。1.Appium 基础 1 (环境搭建和简介)2.Appium 基础 2 (元素定位和元素常用方法)3.Appium 基础 3 (手势操作和 uiautomator 查找元素)4.Appium 基础 4 (显式等待)5.Appium 基

本系列文章汇总了从 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:元素是否可见

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

相关文章
|
2月前
|
人工智能 搜索推荐 数据管理
探索软件测试中的自动化测试框架选择与优化策略
本文深入探讨了在现代软件开发流程中,如何根据项目特性、团队技能和长期维护需求,精准选择合适的自动化测试框架。
127 8
|
2月前
|
人工智能 JavaScript 前端开发
自动化测试框架的演进与实践###
本文深入探讨了自动化测试框架从诞生至今的发展历程,重点分析了当前主流框架的优势与局限性,并结合实际案例,阐述了如何根据项目需求选择合适的自动化测试策略。文章还展望了未来自动化测试领域的技术趋势,为读者提供了宝贵的实践经验和前瞻性思考。 ###
|
28天前
|
存储 测试技术 API
pytest接口自动化测试框架搭建
通过上述步骤,我们成功搭建了一个基于 `pytest`的接口自动化测试框架。这个框架具备良好的扩展性和可维护性,能够高效地管理和执行API测试。通过封装HTTP请求逻辑、使用 `conftest.py`定义共享资源和前置条件,并利用 `pytest.ini`进行配置管理,可以大幅提高测试的自动化程度和执行效率。希望本文能为您的测试工作提供实用的指导和帮助。
89 15
|
2月前
|
Java 测试技术 API
探索软件测试中的自动化测试框架
本文深入探讨了自动化测试在软件开发中的重要性,并详细介绍了几种流行的自动化测试框架。通过比较它们的优缺点和适用场景,旨在为读者提供选择合适自动化测试工具的参考依据。
|
2月前
|
jenkins 测试技术 持续交付
自动化测试框架的搭建与实践
在软件开发领域,自动化测试是提升开发效率、确保软件质量的关键手段。本文将引导读者理解自动化测试的重要性,并介绍如何搭建一个基本的自动化测试框架。通过具体示例和步骤,我们将探索如何有效实施自动化测试策略,以实现软件开发流程的优化。
95 7
|
2月前
|
数据管理 jenkins 测试技术
自动化测试框架的设计与实现
在软件开发周期中,测试是确保产品质量的关键步骤。本文通过介绍自动化测试框架的设计原则、组件构成以及实现方法,旨在指导读者构建高效、可靠的自动化测试系统。文章不仅探讨了自动化测试的必要性和优势,还详细描述了框架搭建的具体步骤,包括工具选择、脚本开发、执行策略及结果分析等。此外,文章还强调了持续集成环境下自动化测试的重要性,并提供了实际案例分析,以帮助读者更好地理解和应用自动化测试框架。
|
2月前
|
监控 测试技术 定位技术
探索软件测试中的自动化测试框架选择与实施###
本文不概述传统意义上的摘要内容,而是直接以一段对话形式引入,旨在激发读者兴趣。想象一下,你是一名勇敢的探险家,面前摆满了各式各样的自动化测试工具地图,每张地图都指向未知的宝藏——高效、精准的软件测试领域。我们将一起踏上这段旅程,探讨如何根据项目特性选择合适的自动化测试框架,并分享实施过程中的关键步骤与避坑指南。 ###
58 4
|
2月前
|
敏捷开发 测试技术 持续交付
自动化测试之美:从零开始搭建你的Python测试框架
在软件开发的马拉松赛道上,自动化测试是那个能让你保持节奏、避免跌宕起伏的神奇小助手。本文将带你走进自动化测试的世界,用Python这把钥匙,解锁高效、可靠的测试框架之门。你将学会如何步步为营,构建属于自己的测试庇护所,让代码质量成为晨跑时清新的空气,而不是雾霾中的忧虑。让我们一起摆脱手动测试的繁琐枷锁,拥抱自动化带来的自由吧!
|
2月前
|
测试技术 持续交付 数据安全/隐私保护
软件测试的艺术与科学:探索自动化测试框架
在软件开发的世界中,测试是确保产品质量的关键环节。本文将深入探讨自动化测试框架的重要性和实现方法,旨在为读者揭示如何通过自动化测试提升软件测试效率和准确性。我们将从测试的基本概念出发,逐步引导读者了解自动化测试框架的设计和实施过程,以及如何选择合适的工具来支持测试活动。文章不仅提供理论知识,还将分享实用的代码示例,帮助读者将理论应用于实践。无论你是测试新手还是经验丰富的开发者,这篇文章都将为你打开一扇通往更高效、更可靠软件测试的大门。
48 1
|
9月前
|
测试技术 API Python
Appium控件交互策略:优化自动化测试效率的关键方法
该文介绍了如何使用Selenium与APP进行交互,包括点击、输入和状态判断等操作。例如,通过element.click()点击控件,element.send_keys()输入文本,以及element.is_displayed()检查元素是否可见。还展示了如何获取元素属性,如resource-id、text和class,并提供了Python代码示例来定位并操作APP元素,如滑动条的显示、可点击性检测及点击滑动条中心位置。在编写测试脚本时,应注意元素定位和状态验证以确保测试稳定性。

热门文章

最新文章