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定位问题再回顾一遍那么你就能够理解这里面的东西,这里会有一个问题是,在我们的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实战(十一)的更多相关文章
- Appium python自动化测试系列之自动化截图(十一)
11.1 截图函数的正常使用 11.1.1 截图方法 无论是在手动测试还是自动化测试中场景复现永远是一个很重要的事情,有时候一些问题可能很难复现,这个都需要测试人员对bug有很高的敏感度,在一般的情况 ...
- Appium python自动化测试系列之等待函数如何进行实战(九)
9.1 等待函数的使用 9.1.1 为什么要使用等待函数 我们在做自动化的时候很多时候都不是很顺利,不是因为app的问题,我们的脚本也没问题,但是很多时候都会报错,比如一个页面本来就有id为1的这个 ...
- Appium python自动化测试系列之滑动函数封装实战(八)
8.1 什么是函数的封装 教科书上函数的封装太官方,我们这里暂且将函数的封装就是为了偷懒把一些有共性的功能或者一些经常用的功能以及模块放在一起,方便我们以后再其他地方调用.这个只是个人的理解所以大家懂 ...
- Appium python自动化测试系列之元素的定位(六)
6.1 常用定位方法讲解 对象定位是自动化测试中很关键的一步,也可以说是最关键的一步,毕竟你对象都没定位那么你想操作也不行.所以本章节的知识我希望大家多动手去操作,不要仅仅只是书本上的知识,毕竟这个 ...
- Appium python自动化测试系列之Capability介绍(五)
5.1 Capability介绍 5.1.1 什么是Capability 在讲capability之前大家是否还记得在讲log时给大家看过的启动时的日志?在我们的整个启动日志中会出现一些配置信息,其 ...
- Appium python自动化测试系列之认识Appium(四)
4.1界面认识 在之前安装appium的时候说过我们有两种方法安装,也就有两种结果,一种是有界面的,一种是没有界面的,首先我们先讲一下有界面的,以及界面有哪些东西. 首先看第一幅图,如果你的是win ...
- Appium python自动化测试系列之移动自动化测试前提(一)
1.1 移动自动化测试现状 因为软件行业越来越发达,用户的接受度也在不断提高,所以对软件质量的要求也随之提高,当然这个也要分行业,但这个还是包含了大部分.因为成本.质量的变化现在对自动化测试的重视度越 ...
- Appium python自动化测试系列之appium环境搭建(二)
2.1 基础环境搭建 当我们学习新的一项技术开始基本都是从环境搭建开始,本书除了第一章节也是的,如果你连最基础的环境都没有那么我们也没必要去说太多,大概介绍一下: 1.因为appium是支持andr ...
- Appium python自动化测试系列之页面滑动原理讲解(十)
10.1.1 页面滑动原理分析 在页面滑动查找章节我们就讲了滑动的知识点,只是不知道大家是否有认真练习以及去理解,如果你认真练习.理解了那么我相信这一章节的东西不用看也能够完成,下面我们还是简单分析一 ...
随机推荐
- JavaWeb学习之JDBC API中常用的接口和类
JDBC API中包含四个常用的接口和一个类分别是: 1.Connection接口 2.Statement接口 3.PreparedStatement接口 4.ResultSet接口 5.Driver ...
- MongoDB 索引篇
MongoDB 索引篇 索引的简介 索引可以加快查询的速度,但是过多的索引或者规范不好的索引也会影响到查询的速度.且添加索引之后的对文档的删除,修改会比以前速度慢.因为在进行修改的时候会对索引进行更新 ...
- Java学习笔记一---JVM、JRE、JDK
jdk包含jre,jre包含jvm. 用java语言进行开发时,必须先装jdk: 只运行java程序,不进行开发时,可以只装jre. JVM 即Java Virtual machine,Java虚拟机 ...
- SpringAop详解
近几天学习了一下SpringAop在网上找了一些资料,此链接为原文链接http://www.cnblogs.com/xrq730/p/4919025.html AOP AOP(Aspect Orien ...
- 《MATLAB从入门到放弃》二维曲线和图形绘制基础(二):使用Help文档学习line、plot、plotyy、subplot、hold绘图函数
目录: » plot 最常用的二维曲线绘图函数 > 帮助文档 > 基本使用语法 > 线条的样式.符号和颜色调整 > 图形属性调整 > 使用图形句柄进行设置 » ...
- BZOJ-1050-[HAOI2006]旅行comf(并查集)
Description 给你一个无向图,N(N<=500)个顶点, M(M<=5000)条边,每条边有一个权值Vi(Vi<30000).给你两个顶点S和T,求 一条路径,使得路径上最 ...
- LPCTSTR LPCWSTR LPCSTR 含义
#ifdef UNICODE#define LPCTSTR LPCWSTR#else#define LPCTSTR LPCSTR#endif LPCTSTR A 32-bit pointer ...
- 【JVM】Java中的JavaCore/HeapDump文件及其分析方法
产生时间 Java程序运行时,有时会产生JavaCore及HeapDump文件,它一般发生于Java程序遇到致命问题的情况下. 有时致命问题发生后,Java应用不会死掉,还能继续运行: 但有时致命问题 ...
- ApplicationContextAware
1.实现了ApplicationContextAware接口,在Bean的实例化时会自动调用setApplicationContext()方法! 2.通过调用静态方法getBean即可获取 sprin ...
- 【模板】AC自动机(加强版)
题目描述 有个由小写字母组成的模式串以及一个文本串.每个模式串可能会在文本串中出现多次.你需要找出哪些模式串在文本串中出现的次数最多. 输入输出格式 输入格式: 输入含多组数据. 每组数据的第一行为一 ...