本系列文章汇总了从 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:元素是否可见
更多内容,咱们在后续文章分享。