12.1 什么是混合App

12.1.1 混合app定义

  什么是混合app,其实这个不言而喻,我们的app正常来说应该都是native的,但是实际工作中却不是,反正种种原因我们的app会有native的而且中间还会有H5页面,这其实就是我们常说的混合,当然还有一种就是纯H5的,但是这里我们不做过多的讲解。

12.2 混合app实战思路

12.2.1 代码实战

  在前面的的章节内嵌h5页面定位我们就已经讲过这个问题,其实本讲的内容大家可以仔细把定位的内嵌h5定位问题再回顾一遍那么你就能够理解这里面的东西,这里会有一个问题是,在我们的app自动化中和web自动化中会有一些区别,这里一些api的用法上需要注意一下。下面我们还是来看一个流程,看下面两张图片:

第一张图片是我们app的原生页面:

第二张图片是我们的webview的界面:

我们在前面的章节讲过如果我们需要从第一个页面切换到第二个页面的时候我们需要进行“context”的切换,只有当我们切换了之后才能够进行进一步对该页面进行操作,看下面代码:

def view(self):#获取当前页面所有的contexts
time.sleep(5) webview = self.driver.contexts
#在获取到的contexts list里面去挨个循环
for context in webview:
#判断循环中单个的context是否是webview,如果是就进行切换,并且跳出循环
if 'WEBVIEW' in context:
self.driver.switch_to.context(context)
break
self.driver.find_element_by_link_text('JAVA').click()

到目前为止我们是不是就能够很轻松自由的操作app内嵌的H5页面了呢。动手操作一下

备注:如果你用真机一直无法切换,不要激动这个很正常,用模拟器试一试,因为真机有很多限制,你可以尝试root后去试一试。

12.3 混合app实战

  上面的知识我相信大家很容易都懂了,但是在实际操作中大家会遇见一个起码的问题,上面问题看我们下面讲解,在我们正常的操作情况下我们是不是操作完第二个页面是否应该关闭该页面然后直接去操作其它页面呢?于是乎就有了我们下面的代码:

def view(self):#获取当前页面所有的contexts
time.sleep(10) webview = self.driver.contexts
#在获取到的contexts list里面去挨个循环
for context in webview:
#判断循环中单个的context是否是webview,如果是就进行切换,并且跳出循环
if 'WEBVIEW' in context:
self.driver.switch_to.context(context)
break
self.driver.find_element_by_link_text('JAVA').click()
#关闭按钮定位
self.driver.find_element_by_id("cn.com.open.mooc:id/left_icon").click

  动了手的小伙伴就知道问题了,你们无论如何都操作不了这个关闭按钮或者是关闭了操作不了其他页面的元素,上面的代码无论如何到关闭的时候都报错,对吧!但是你仔细思考会发现,我们前面讲了在我们从原生的app中切换到h5页面的时候都经过了切换,那么现在的driver是不是还是处于h5的呢?思考思考思考!!!你driver都还在h5家里,然后你让他去操作原来家里的东西能行吗?答案肯定是否定的,所以这个时候你又需要将driver切换到原来的driver。

思考:如果你的app有超级多的h5 页面然后在测试过程中你是不是需要进行不断的切换?麻烦吗?肯定啊。你每次切换都需要去写这个方法你不嫌弃累我都嫌弃累。so,我们这里是不是需要思考解决方案?那么之前我们python说的函数封装是不是起到作用了呢?这里给大家留一个思考题,如果做到高效的封装。

备注:这个在工作中经常用到,大家一定去动手练习一下这个思考题。

提示:笨一点的方法是封装成两个方法,好一点封装成一个方法,然后通过传递参数的形式去实现。

Appium python自动化测试系列之混合app实战(十一)的更多相关文章

  1. Appium python自动化测试系列之自动化截图(十一)

    11.1 截图函数的正常使用 11.1.1 截图方法 无论是在手动测试还是自动化测试中场景复现永远是一个很重要的事情,有时候一些问题可能很难复现,这个都需要测试人员对bug有很高的敏感度,在一般的情况 ...

  2. Appium python自动化测试系列之等待函数如何进行实战(九)

    ​9.1 等待函数的使用 9.1.1 为什么要使用等待函数 我们在做自动化的时候很多时候都不是很顺利,不是因为app的问题,我们的脚本也没问题,但是很多时候都会报错,比如一个页面本来就有id为1的这个 ...

  3. Appium python自动化测试系列之滑动函数封装实战(八)

    8.1 什么是函数的封装 教科书上函数的封装太官方,我们这里暂且将函数的封装就是为了偷懒把一些有共性的功能或者一些经常用的功能以及模块放在一起,方便我们以后再其他地方调用.这个只是个人的理解所以大家懂 ...

  4. Appium python自动化测试系列之元素的定位(六)

    ​6.1 常用定位方法讲解 对象定位是自动化测试中很关键的一步,也可以说是最关键的一步,毕竟你对象都没定位那么你想操作也不行.所以本章节的知识我希望大家多动手去操作,不要仅仅只是书本上的知识,毕竟这个 ...

  5. Appium python自动化测试系列之Capability介绍(五)

    ​5.1 Capability介绍 5.1.1 什么是Capability 在讲capability之前大家是否还记得在讲log时给大家看过的启动时的日志?在我们的整个启动日志中会出现一些配置信息,其 ...

  6. Appium python自动化测试系列之认识Appium(四)

    ​4.1界面认识 在之前安装appium的时候说过我们有两种方法安装,也就有两种结果,一种是有界面的,一种是没有界面的,首先我们先讲一下有界面的,以及界面有哪些东西. 首先看第一幅图,如果你的是win ...

  7. Appium python自动化测试系列之移动自动化测试前提(一)

    1.1 移动自动化测试现状 因为软件行业越来越发达,用户的接受度也在不断提高,所以对软件质量的要求也随之提高,当然这个也要分行业,但这个还是包含了大部分.因为成本.质量的变化现在对自动化测试的重视度越 ...

  8. Appium python自动化测试系列之appium环境搭建(二)

    ​2.1 基础环境搭建 当我们学习新的一项技术开始基本都是从环境搭建开始,本书除了第一章节也是的,如果你连最基础的环境都没有那么我们也没必要去说太多,大概介绍一下: 1.因为appium是支持andr ...

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

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

随机推荐

  1. Android 字体修改,所有的细节都在这里 | 开篇

    版权声明: 本账号发布文章均来自公众号,承香墨影(cxmyDev),版权归承香墨影所有. 每周会统一更新到这里,如果喜欢,可关注公众号获取最新文章. 未经允许,不得转载. 序 在 Android 下使 ...

  2. XML的序列化(Serializer)

    步骤: //1获取XmlSerializer 类的实例 通过Xml这个工具类去获取 XmlSerializer xmlSerializer = Xml.newSerializer(); try { / ...

  3. Safe Area Layout Guide

    原文:Safe Area Layout Guide Apple在iOS 7中引入了topLayoutGuide和bottomLayoutGuide作为UIViewController属性.它们允许您创 ...

  4. 翻译 | 一行 JavaScript 代码的逆向工程

    原文地址:Reverse Engineering One Line of JavaScript 原文作者:Alex Kras 译者:李波 校对者:冬青.小萝卜 几个月前,我看到一个邮件问:有没有人可以 ...

  5. memcached readme

    memcache======== http://www.cnblogs.com/jeffwongishandsome/archive/2011/11/06/2238265.html # 命令 ## 存 ...

  6. String.getBytes(),源码之下,了无秘密

    @Deprecated public void getBytes(int srcBegin, int srcEnd, byte dst[], int dstBegin) { if (srcBegin ...

  7. 关于JetBrains CLion 激活 (CLion License Activation)的解决办法,带hosts详细修改

    CLion版本号:JetBrains CLion 2017.2.1 第一行选择Activite,第二行Activate license with:选择Activation code. 这个时候里面的代 ...

  8. BP算法

    1986年Rumelhart和McCelland在<并行分布式处理>中提出了BP算法,即非线性连续变换函数的多层感知器网络误差反向传播算法. 该算法的思想是:学习过程分为信号的正向传播与误 ...

  9. Springboot - 学习笔记 ②

    前言 这一篇是关于spring boot中的配置(configuration)的介绍,我们接下来要说的男主就是 “application.properties”. “男神”默认是生成在“/src/ma ...

  10. 使用Scrapy创建一个爬虫

    使用Scrapy创建一个爬虫 创建项目 您可以使用下面的命令来创建 Scrapy 项目: scrapy startproject 项目名称 例:scrapy startproject scrapy_p ...