Appium python自动化测试系列之页面滑动原理讲解(十)

10.1.1 页面滑动原理分析

  在页面滑动查找章节我们就讲了滑动的知识点,只是不知道大家是否有认真练习以及去理解,如果你认真练习、理解了那么我相信这一章节的东西不用看也能够完成,下面我们还是简单分析一下。

  所谓的页面滑动在我们实际操作手机的过程中就是不断的从屏幕的下面滑到上面,或者右边滑到左边,反之亦然。其实在做自动化滑动的时候我们遵循的也是这个道理,我们只需要按着一个点然后在屏幕上拖动到另外一个点就行,这就实现了一个简单的滑动。还不懂?回去看第六章的滑动定位吧。

10.2 常见页面滑动方式实战

10.2.1 滑动实战

  前面没动也没问题,我们这里从基础的讲一下。首先我们应该很高心appium将滑动的操作封装成了一个函数swipe函数,我们看官方api:

swipe(self, start_x, start_y, end_x, end_y, duration=None) ,这句话我相信大家能够看懂,如果看不是很理解,没事,我们看官方给出的例子:

Swipe from one point to another point, for an optional duration.
    从A点滑动至B点,滑动时间为毫秒
    :Args:
     - start_x - x-coordinate at which to start
     - start_y - y-coordinate at which to start
     - end_x - x-coordinate at which to stop
     - end_y - y-coordinate at which to stop
     - duration - (optional) time to take the swipe, in ms.

    :Usage:
        driver.swipe(100, 100, 100, 400)
用法 driver.swipe(x1,y1,x2,y2,500)

从官方的例子中我相信大家能够明白了吧。说得通俗易懂就是,我们整个屏幕是一个坐标系,x轴加上y轴的各一个标志就形成了一个坐标点,那么你要滑动屏幕,你总得告诉appium从哪个点(start_x,start_y)到哪个点(end_x,end_y),那么剩下的是不是就是要告诉appium你整个滑动操作要持续的时间呢(毫秒计算)?到这里是不是so easy!

10.3 滑动函数的封装实战

10.3.1 如何设计滑动封装

  看到这里可能有人说我啰嗦,当然你有一定基础,然后有这个思想了那么你可以跳过,其实我每次看书的时候无论该知识点我是否掌握,我都会看一遍,毕竟每个人的思考不一样,说不定会有一些不一样的收获,事实也是如此。

  整个app操作中的滑动无非就是上下左右的滑动,那么变化的也就是x,y的值不一样,水平滑动就是x轴变化,y轴不变化,垂直滑动就是y轴变化,x轴不变化,那么我们回头来看一下我们第六章的代码:

def getSize(self):
    x = self.driver.get_window_size()[‘width‘]
    y = self.driver.get_window_size()[‘height‘]
    return (x,y)

  #向左滑动
  def swipeLeft(self,t):
    l=self.getSize()
    x1=int(l[0]*0.9)
    y1=int(l[1]*0.5)
    x2=int(l[0]*0.1)
    self.driver.swipe(x1,y1,x2,y1,t)

  #向右滑动
  def swipeRight(self,t):
    l=self.getSize()
    x1=int(l[0]*0.25)
    y1=int(l[1]*0.5)
    x2=int(l[0]*0.75)
    self.driver.swipe(x1,y1,x2,y1,t)

  #向上滑动
  def swipeUp(self,t):
    l=self.getSize()
    x1=int(l[0]*0.5)
    y1=int(l[1]*0.8)
    y2=int(l[1]*0.4)
    self.driver.swipe(x1,y1,x1,y2,t)
    time.sleep(5)

  #向下滑动
  def swipeDown(self,t):
    l=self.getSize()
    x1=int(l[0]*0.5)
    y1=int(l[1]*0.25)
    y2=int(l[1]*0.75)
    self.driver.swipe(x1,y1,x1,y2,t)

再次回来看的时候收获不太一样呢?看到这里你是不是该思考一个问题了呢?这个滑动能够实现我一些app里面的验证码功能吗?

这个知识点我在这里面就不仔细讲了,能否实现下来去实践一下,即使不行那么最后的解决方案也是类似的。哈哈,答案又说漏了。实践去,不然你真的只会纸上谈兵了。

10.4 解锁九宫格

10.4.1 解锁思想

在这个课程之前讲一个题外话,其实自动化的目的是为了提高工作效率,不是为了显示咱会写代码,所以能减少工作的时候就减少,好比这个解锁九宫格如果在你工作中遇见app中有,那么不去设置就好。哈哈,题外话。

首先讲解锁这个之前需要了解一个问题,我们这个解锁解的是app里面的密码锁,不是你设置手机的密码,切记切记。手机的密码暂时appium还不提供方法去解决,so,等待你去努力。

首先我们看一下下面一张图片:

你看到图片中的定位你能找到方法去操作吗?我们的9个点就在一个view里面,他们是一个整体,分不开。怎么去实现?思考一下。

10.4.2 九宫格解锁语法

不知道看见上面的那幅图的思考结果是什么,首先我们来看一下我们经常用到的解锁方式以及语法。

首先我们第一个需要了解的是TouchAction。其实TouchAction的原理是将一系列的动作放在一个链条中,好比我们解锁九宫格的时候一样,我们是在这个链条中执行了很多不操作,然后将这个链条传递给服务器,然后服务器再去挨个解析这一些动作,最后挨个执行。

知道了TouchAction之后那么我们在解锁之前是不是需要做第一个动作呢?就是去点(用到press),只有点了开始点之后我们再将我们的动作移动到下一个点(move_to),然后依次类推,当我们将所有的点都执行完毕之后就需要松开我们的点(release),然后进行提交(perform),这是不是就是一个完整的解锁流程呢?那我们如何将上面的流程转换成代码呢?看下面:

TouchAction(self.driver).press().move_to().move_to().release().perfrom()

这是我们整个流程的代码,但是如果你这样去执行肯定回报错,为什么呢?因为我都不知道你要点啥,从哪里移动到哪里,能不报错么?

首先press()时需要指定一个对象,对吧。那么这里看press()的语法:

press(WebElement e):这里你需要传入一个WebElement元素,但是像我们上面的图片无法获取到WebElement元素怎么办,那么我们就需要通过下面这种坐标的方式来进行。

press(int x,int y):这里你需要传入需要点击元素的坐标位置。

move_to(WebElement e):同样的传入一个WebElement元素,当无法获取WebElement元素时,同样用坐标去操作

move_to(int x,int y).

那么最后我们上面的解锁代码就成了下面这个样子:

TouchAction(self.driver).press(x=228,y=647).move_to(x=228,y=647).wait(100).move_to(x=812,y=647).wait(100).move_to(x=812,y=940).wait(100).mov
e_to(x=812,y=1241).release().perform()

?10.4.3 九宫格解锁实战

通过上面的学习我相信大家一定觉得能够完全搞定上面的问题了,但是去动手了的人都知道结果了,上面执行后肯定回报错,知道为什么吗?往上照了资料但是一样却实际要报错,为什么呢?首先来看我的代码:

from appium.webdriver.common.touch_action import TouchAction
TouchAction(self.driver).press(x=217,y=600).move_to(x=0,y=150).wait(1000).move_to(x=0,y=150).wait(1000).move_to(x=113,y=0).move_to(x=113,y=0).release().perform()

是不是发现有不一样的地方呢?这里一定要记住的是move_to()函数里面的坐标位置是在上一个目标位置的基础上进行坐标位置的变化。初始坐标位置为:press(x=217,y=600),第一个move_to(x=0 ,y=150),表示在(x=217,y=600)这个位置上向下移动150分辨率,也就是连接第二个点。而第二个move_to(x=0,y=150),意思也差不多,因为,这个时候我还没有release()也就是没有松开手,所以第三个点还是以(x=217,y=900)为起点,依次类推那么最后的结果就是我们上面的代码。哈哈,是不是顿时有被网上一些资料忽悠呢?但是你也不要觉得很厉害,你思考过一个问题没?每个手机的分辨率不一样,那么这样的操作在测试兼容性的时候是不是就有问题了呢?那思考一下该怎么解决吧。

备注:可能看到这里的小伙伴会疑惑,为什么不用开始讲的定位直接使用element来进行定位操作呢?因为我们选择操作的对象是qq,在qq中整个九宫格页面他是一个view,他没有将每一个空格都拆分成一个element,所以那种方法不行,但是相对而言那会简单,只需要将我们的坐标更换成element的元素信息即可。提醒一下,最好是开始定位整个九宫格view,这个时候是一个数组,那么每一个元素只需通过index去访问就好,那样操作最快,下去动手操作一下吧。

时间: 2024-10-09 10:34:47

Appium python自动化测试系列之页面滑动原理讲解(十)的相关文章

Appium python自动化测试系列之混合app实战(十一)

12.1 什么是混合App 12.1.1 混合app定义 什么是混合app,其实这个不言而喻,我们的app正常来说应该都是native的,但是实际工作中却不是,反正种种原因我们的app会有native的而且中间还会有H5页面,这其实就是我们常说的混合,当然还有一种就是纯H5的,但是这里我们不做过多的讲解. 12.2 混合app实战思路 12.2.1 代码实战 在前面的的章节内嵌h5页面定位我们就已经讲过这个问题,其实本讲的内容大家可以仔细把定位的内嵌h5定位问题再回顾一遍那么你就能够理解这里面的

Appium python自动化测试系列之日志的收集(十二)

?13.1 日志的定义 13.1.1 日志的定义 听到日志这个东西可能有的人莫名其妙,第一次接触就会觉得我们为什么要收集日志,即使要收集日志那么我们需要收集哪些日志,日志的作用是什么等等. 其实日志无论是在测试.开发中都非常重要,如果你在跑自动化时程序报错了,但是你没有日志你怎么去定位时程序错误还是你app的错误?或者还是其它环境因素? 在java中有log4j这日志模块,在python里面我们使用的是logging这个模块,这个模块不需要你去怎么下载安装等等,python自带的有,你只需要拿来

Appium python自动化测试系列之使用HTMLTestRunner生成测试报告(十三)

?13.1 测试报告概述 13.1.1 测试报告的定义 在前面章节我们已经讲了自动化基础的很多东西,如果说掌握了,而且自己动手去练习了,我相信在一些初级的面试中是没任何问题的,今天我们接触的应该算是一个比较新的东西,也算是开启另一层知识的大门. 在手工测试过程中如果发现了bug我们需要提交测试报告,自动化中虽然当程序出错的时候我们不可能让程序自动去提交bug(其实也可以,只是需要自己去开发模块,思路:当程序监听到错误的时候就触发一个提交bug的程序),但是为了体现工作的价值当自动化跑完之后是不是

RF+Appium框架自动化测试系列一之(Mac下Appium环境搭建)万事开头难

Mac下Appium环境搭建: 消失了3个月,有一段时间没来园子更新博客了,各位看官见谅哈哈,消失是因为TestYao刚换了工作环境没外网,好多笔记没能及时的记录分享,以后有时间慢慢补上吧,这段时间主要接触了移动端app的自动化测试,公司为了快速把移动端自动化这块搞起来,试用几款目前流行的工具,腾讯的xtest定制版.神州数码的自动化测试平台.开源rf+appium框架. 经过一段试用最终还是选择了rf+appium主要原因有: 1.开源,网上社区活跃 2.扩展性强,针对不同项目不同的需求,封装

Appium+Python自动化测试(二)——运行App程序示例

在上一篇博客中,已经将环境搭建好了.现在,我们利用搭建的环境来运行一条测试脚本,脚本中启动一个计算器的应用,并实现加法的运算. 创建模拟器 在运行App之前,首先需要创建一个Android模拟器,也可以使用真机来运行,效果更佳. 进到Android SDK的目录,双击运行AVD Manager.exe 点击Create创建一个Android模拟器 输入一个模拟器名称,选择设备类型和API版本,点击进行创建.创建完成后会显示当前所有的设备,选择设备,点击Start启动 第一次启动的时候会有点慢,要

Windows&Appium&Python自动化测试-Appium安装

一.安装node.js 官方下载地址为:https://nodejs.org/en/download 傻瓜式安装即可,安装完成后,CMD中运行node -v查看版本号 输入npm 出现如上图信息,表示 node.js 安装成功.npm 是一个 node 包管理和分发工具,有了 npm,后面就可以输入指令在线安装 appium """ 此处内容无需执行,仅供参考,虽然也可以实现,但后边内容给了更好方式 安装appium服务端,可通过cmd 下输入 npm install -g

selenium+python自动化测试系列---基础知识篇(1、HTML基础知识1)

1.什么是HTML HTML是一种描述网页的语言.HTML指超文本标记语言(Hyper Text Markup Language),它不是一种编程语言,而是一种标记语言(markup language),HTML包含静态HTML和动态HTML 2.HTML标签 HTML标记标签通常被称为HTML标签(HTML tag) HTML标签是由尖括号包围的关键词,如:<html> HTML标签通常是成对出现的,如:<b>,</b> 标签对中的第一个标签是开始标签(<b&g

Appium&amp;Python自动化测试-环境搭建之安卓SDK

一.安装包工具准备: jdk1.8.0(64 位) installer_r24.4.1-windows-androidSDK 二.JDK的安装及配置 官方下载地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 选中"Accept License Agreement",下载所需版本即可,这里下载的是"Windows x64"的版本,安装过程建议使

Mac&amp;Appium&amp;Python自动化测试-环境搭建之安卓SDK

一.摘要 本博文将详细讲述在Mac环境下的jdk安装.配置以及环境校验:安卓sdk安装.配置以及环境校验 二.安装包工具准备: jdk1.8.0(64 位) android-sdk_r24.4.1-mac osx.zip 三.JDK的安装及配置 官方下载地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 选中"Accept License Agreement",下