坚持原创输出,点击蓝字关注我吧

作者:清菡

博客:oschina、云+社区、知乎等各大平台都有。

目录

  • 一、App 元素定位方式
  • 二、元素操作
  • 三、测试混合应用
  • 四、以代码的方式执行 Pytest 命令
  • 五、App 自动化分层设计

App 自动化目前用得是 Appium,有 Python 版本的Uiautomator2。这个是直接通过Uiautomator2去做的,一个是利用中间的 Appium 去做。Appium 跨平台跨语言。

一、App 元素定位方式

坐标idxpathandroid_uiautomatorclassnameaccesiblity_id

accesiblity_id是安卓的元素定位方式之一。

二、元素操作

这个跟 Web 自动化有些通用的操作之外,它有一些额外的操作。例如:滑屏操作、触屏操作、混合应用、toast 获取。

swipe:swipe 也是通过touchAction来实现的。

触屏操作:touchAction

toast:toast 获取对安卓版本、Appium 版本都是有要求。

用 uiautomatorview 是捕捉不到的,通过 xpath 来获取 toast 信息。

xpath表达式 文本匹配
loc ='//*[contains(@text,"{}")]'.format("手机号码或密码")

contains通过 xpath 表达式里面的contains函数@texttext 在安卓当中,它是个属性。

xpath 定位表达式,拿到它之后,经常用的是presence

# 等待的时候,要用元素存在的条件。不能用元素可见的条件。

try:
    WebDriverWait(driver,10,0.01).until(EC.presence_of_elements_located((MobileBy.XPATH,loc)))
    # 上限10秒就够了,确认toast在页面上存在的时候大概是多久,它都没有0.5秒,你去间隔0.5,可能消失了,你还只留在这。
    print(driver.find_element_by_xpath(loc).text)
except:
    print("没有找到匹配的toast!!!!")

做 Web 自动化或者其它的时候,都是等待元素可见。在 toast 信息获取的时候,是等待元素存在,然后获取它的文本内容。

这个地方有个概率的问题:用它去获取 toast,时间越短,概率越高。可能面临 1%-10%的失败率。当然不同的产品是不一样的。

三、测试混合应用

原生控件关于 html 页面的元素标识是什么?

Web 自动化中一个页面中嵌入了另外一个页面,用的是iframe。webview 代表网页视图。

如果从原生控件中切换到网页视图当中,切换的名字叫做context,切换的前提是获取到它。

获取到 webview 对应的context,然后在这里面去操作。

从原生控件切换到 html 页面,通过context切换之后,应该在 html 页面中做元素定位。

Uiautomatorview 没办法找到 html 页面,所以用 Uc-devtools。

找到元素之后,后续就是 Web 自动化操作了,要看到 Webview 页面的时候,必须要开启 debug 模式,否则你是看不到的。

网上有些操作可以强制的打开它,不过操作流程比较复杂,会破坏一些东西。

混合应用是 App 和 Web 自动化的结合。微信小程序其实就是 Web 自动化,只不过嵌在微信里面。

微信本身是个 App,在微信里操作,切换到小程序里面,在小程序里做想做的 Web 自动化测试。

原生控件+html 页面:混合应用-webview\切换 context\uc-devtools\web 自动化

四、以代码的方式执行 Pytest 命令

import pytest

if __name__ == '__main__':
    pytest.main()

这是以 Python 代码的方式来运行 Pytest 命令,来看看main函数的源码:

之前在 cmd 中输入pytest -m过滤下标签,比如 smoke 标签pytest -m smoke,或者指定 html 报告pytest -m smoke - 都是在这里写的。

pytest -m smoke这样的命令,在代码里写就好了。

它这里,第一个参数就是写的命令,但是它是个列表,用列表的方式存起来就好了。

import pytest

if __name__ == '__main__':
    pytest.main(["-m","smoke"])

在命令行中用空格隔开的,在这里一样一样放在列表当中来。代码中的执行效果跟在 cmd 中执行的效果是一模一样的。

五、App 自动化分层设计

App 自动化和 Web 自动化一样,都是这样分层的:

在 PO 模式中想要点击元素、操作元素也得等待元素可见,也有最基本的 4 种元素操作方法:输入操作、点击操作、获取它的文本内容、获取它的属性。

Locator 里面绑定了元素定位方式和定位类型。Locator 来自 PageLocators 文件夹中。

手机屏幕就那么大,App 要保证排版宽松,手指触屏,要保证点击一个功能不会碰到别的。

实际做自动化测试,Web 网页是很复杂的,App 自动化测试的周期要比 Web 自动化时间要短很多。

写框架先写页面,首先研究下页面构造,看下页面功能的关联性。


公众号 「清菡软件测试」 首发,更多原创文章:清菡软件测试 103+原创文章,欢迎关注、交流,禁止第三方擅自转载。

App自动化《元素定位方式、元素操作、混合应用、分层设计、代码方式执行Pytest 命令》的更多相关文章

  1. Web自动化必会知识:「Web基础、元素定位、元素操作、Selenium运行原理、项目实战+框架」

    1.web 基础-html.dom 对象.js 基本语法 Dom 对象里面涉及元素定位以及对元素的修改.因为对元素操作当中涉及的一些 js 操作,js 基本语法要会用.得要掌握前端的基本用法.为什么要 ...

  2. 关于appium操作真机打开app之后无法定位页面元素的问题的解决办法

    appium操作真机打开app后无法定位页面元素:例如微信或者支付宝支付时,手机的安全控件会对支付环境进行保护,会断掉当前appium与真机的链接,导致连接失败,无法定位到页面元素,在做ui自动化之前 ...

  3. UI自动化学习笔记- Selenium元素定位及元素操作

    一.元素定位 1. 如何进行元素定位? 元素定位就是通过元素的信息或元素层级结构来定位元素的 2.定位工具 浏览器开发者工具 3.元素定位方式 Selenium提供了八种定位元素方式 id name ...

  4. [python爬虫] Selenium常见元素定位方法和操作的学习介绍(转载)

    转载地址:[python爬虫] Selenium常见元素定位方法和操作的学习介绍 一. 定位元素方法 官网地址:http://selenium-python.readthedocs.org/locat ...

  5. selenium的 元素定位、元素信息、交互

    selenium的元素定位? 元素定位:自动化要做的就是模拟鼠标和键盘来操作来操作这些元素,点击.输入等等.操作这些元素前首先 要找到它们,WebDriver提供很多定位元素的方法 方法: 1.fin ...

  6. python ui自动化之元素定位和常用操作

    做ui自动化的最基础的就是页面元素定位了,如果连页面元素都定位不到,自动化从何谈起呢?接下来我们就看看页面元素定位的方法吧!(这里就用百度页面来进行演示) 一.最通用的几种定位方式: 1.通过id定位 ...

  7. [python爬虫] Selenium常见元素定位方法和操作的学习介绍

    这篇文章主要Selenium+Python自动测试或爬虫中的常见定位方法.鼠标操作.键盘操作介绍,希望该篇基础性文章对你有所帮助,如果有错误或不足之处,请海涵~同时CSDN总是屏蔽这篇文章,再加上最近 ...

  8. Selenium常见元素定位方法和操作的学习介绍

    参考地址: https://www.cnblogs.com/eastmount/p/4810690.html 这篇文章主要Selenium+Python自动测试或爬虫中的常见定位方法.鼠标操作.键盘操 ...

  9. java+selenium元素定位和元素操作

    1.元素定位 ID定位元素: findElement(By.id(“”)); 通过元素的名称定位元素: findElement(By.name(“”)); 通过元素的html中的位置定位元素: fin ...

随机推荐

  1. XJOI 夏令营501-511NOIP训练14 砍树(2)

    小A是小B家的园丁.小B的家里有n棵树,第i棵树的横坐标为i.一天,小B交给小A一个任务,让他降低自己家中的某些树木的高度.这个任务对小A来说十分简单,因为他有一把极其锋利的斧头和一门独门砍树秘籍,能 ...

  2. 【SpringBoot】05.SpringBoot整合Listener的两种方式

    SpringBoot整合Listener的两种方式: 1.通过注解扫描完成Listener组件的注册 创建一个类实现ServletContextListener (具体实现哪个Listener根据情况 ...

  3. vue实现带logo的二维码/商品条形码/打印商品吊牌

    一.带logo的二维码 1.安装 npm install vue-qr --save 2.在页面或组件中使用 <template> <div id="qrcode" ...

  4. 嗯,挺全乎儿的,Spring Boot 多环境配置都在这里了,你喜欢哪种?

    持续原创输出,点击上方蓝字关注我 目录 前言 Spring Boot 自带的多环境配置 创建不同环境的配置文件 指定运行的环境 Maven 的多环境配置 创建多环境配置文件 定义激活的变量 pom 文 ...

  5. Canvas鼠标点击特效(富强、民主...)、收藏

    <script> /* 鼠标特效 */ var a_idx = 0; jQuery(document).ready(function($) { $("body").cl ...

  6. 1. 线性DP 887. 鸡蛋掉落 (DP+二分)

    887. 鸡蛋掉落 (DP+二分) https://leetcode-cn.com/problems/super-egg-drop/ /*首先分析1个蛋,1个蛋的话,最坏情况需要N次,每次只能从0 1 ...

  7. linux下制作软件包安装服务器

    linux下的软件包在有网络的情况下比较好安装,在ubuntu下,更新sourcelist,然后使用apt-get就可以很方便的安装包,在centos下面,更新yum列表,然后使用yum也可以进行方便 ...

  8. 使用XSL解析XML输出HTML(XSL学习笔记一)

    最近项目用到 XSL + XML,XML大家应该很熟悉,XSL暂且不解释,先看效果,如果想学习XSL的内容,可以先访问: https://www.w3school.com.cn/xsl/xsl_lan ...

  9. 基于Opencv识别,矫正二维码(C++)

    参考链接 [ 基于opencv 识别.定位二维码 (c++版) ](https://www.cnblogs.com/yuanchenhui/p/opencv_qr.html) OpenCV4.0.0二 ...

  10. 万字长文!从底层开始带你了解并发编程,彻底帮你搞懂java锁!

    线程是否要锁住同步资源 锁住 悲观锁 不锁住 乐观锁 锁住同步资源失败 线程是否要阻塞 阻塞 不阻塞自旋锁,适应性自旋锁 多个线程竞争同步资源的流程细节有没有区别 不锁住资源,多个线程只有一个能修改资 ...