前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >App自动化《元素定位方式、元素操作、混合应用、分层设计、代码方式执行Pytest 命令》

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

作者头像
清菡
发布2020-12-16 10:51:34
6010
发布2020-12-16 10:51:34
举报
文章被收录于专栏:清菡软件测试清菡软件测试

作者:清菡 博客: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 信息。

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

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

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

代码语言:javascript
复制
# 等待的时候,要用元素存在的条件。不能用元素可见的条件。

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 命令

代码语言:javascript
复制
import pytest

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

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

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

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

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

代码语言:javascript
复制
import pytest

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

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

五、App 自动化分层设计

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

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

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

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

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

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-12-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 清菡软件测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 作者:清菡 博客:oschina、云+社区、知乎等各大平台都有。
  • 目录
    • 一、App 元素定位方式
      • 二、元素操作
        • 三、测试混合应用
          • 四、以代码的方式执行 Pytest 命令
            • 五、App 自动化分层设计
            相关产品与服务
            云开发 CloudBase
            云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档