技术分享 | app自动化测试(Android)-- 属性获取与断言

news2024/12/26 11:38:21

断言是 UI 自动化测试的三要素之一,是 UI 自动化不可或缺的部分。在使用定位器定位到元素后,通过脚本进行业务操作的交互,想要验证交互过程中的正确性就需要用到断言。

常规的UI自动化断言

分析正确的输出结果,常规的断言一般包含以下的几个情形:

  • 比较大小

  • 包含或者不包含

  • 验证布尔值

Python 示例代码
# 第一种 :比较大小
price = driver.find_element(
    By.XPATH,'//*[contains(@resource-id="current_price")]').text
assert float(price) >=170

# 第二种 :包含验证
name = driver.find_element(
    By.XPATH,'//*[contains(@resource-id="stockName")]').text
assert "BABA" in name

# 第三种 :布尔值验证
def check():
    name = driver.find_elements(By.XPATH,'//*[contains(@resource-id="stockName")]')
    return True if len(name)!=0 else False
assert check()

上面的示例可以看出,Python 的 assert 是用来判断一个条件是否为真,如果它为真,就继续执行,如果为假,则抛出 AssertError 并且包含错误信息。断言可以在条件不满足程序运行的情况下直接返回错误。

Java 示例代码
// 第一种 :比较大小
String price = driver.findElement(By.xpath("//*[contains(@resource-id=\"current_price\")]")).getText();
float currentprice = Float.parseFloat(price);
float expectprice = 170;
assert currentprice >= expectprice;

// 第二种 :包含验证
String name = driver.findElement(By.xpath("//*[contains(@resource-id=\"stockName\")]")).getText();

assert name.contains("BABA");

// 第三种 :布尔值验证
@Test
public boolean check(){
    List<WebElement> names = driver.findElements(By.xpath("//*[contains(@resource-id=\"stockName\")]"));
    return names.size() > 0 ? true : false;
}

@Test
public void checkTest(){
    assert check();
}

上面的示例可以看出,测试中经常会需要使用断言来判断一个条件是否为真,Java 语法中也可以通过 assert 关键字进行断言。另外如果需要更复杂的断言处理,可以使用 Hamcrest 提供的方法,Hamcrest 提供了大量被称为“匹配器”的方法。

Hamcrest断言

Hamcrest 是一个以测试为目的,能组合成灵活表达式的匹配器类库,用于编写断言的框架,使用这个框架编写断言,可以提高可读性以及开发测试的效率。Hamcrest 提供了大量被称为“匹配器”的方法。每个匹配器都设计用于执行特定的比较操作。Hamcrest 的可扩展性强,允许创建自定义的匹配器,并支持多种语言。

Hamcrest 安装
  • Python 版本

pip install pyhamcrest

  • Java 版本
<dependency>
    <groupId>org.hamcrest</groupId>
    <artifactId>hamcrest</artifactId>
    <version>2.2</version>
    <scope>test</scope>
</dependency>

Hamcrest 导包
  • Python 版本

from hamcrest import *

  • Java 版
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.*;

Hamcrest 提供了一个全新的断言语法(assert_that),可以只使用 assert_that 一个断言语句,结合 Hamcrest 提供的匹配符,就可以完成各种断言场景。

常用方法 API

1.比较两个字符串相等,示例代码如下:

  • Python 版本

assert_that("this is a string",equal_to("this is a string"))

  • Java 版本

assertThat("this is a string",equalTo("this is a string"));

2.数值匹配,比较两个值是否接近,示例代码如下:

  • Python 版本

assert_that(8,close_to(10,2))

  • Java 版本

assertThat(8.0,closeTo(10,2));

解释:断言 8 接近于 (8 ~ 12)这个范围。

3.包含某个字符,示例代码如下:

  • Python 版本

assert_that('abc',contains_string('d'))

  • Java 版本

assertThat("abc",containsString("d"));

案例

使用“雪球”应用,打开雪球 APP,点击页面上的搜索输入框输入“alibaba”,然后在搜索联想出来的列表里面点击“阿里巴巴”,选择股票分类,获取股票类型为“09988”的股票价格,最后验证价格在预期价格的 10% 范围浮动。核心代码如下:

PYTHON 版本
from hamcrest import assert_that, close_to
...
def test_wait(self):
    # 点击搜索输入框
    self.driver.find_element_by_id(
        "com.xueqiu.android:id/tv_search").click()
    # 输入 “alibaba”
    self.driver.find_element_by_id(
        "com.xueqiu.android:id/search_input_text"
        ).send_keys("alibaba")
    # 点击“阿里巴巴”
    self.driver.find_element_by_xpath("//*[@text='阿里巴巴']").click()
    # 点击“股票”
    self.driver.find_element_by_xpath(
        "//*[contains(@resource-id,'title_container')]//*[@text='股票']"
        ).click()
    # 获取股票价格
    locator = (MobileBy.XPATH,
    "//*[@text='09988']/../../..\
    //*[@resource-id='com.xueqiu.android:id/current_price'")

    ele = WebDriverWait(self.driver,10)\
    .until(expected_conditions.element_to_be_clickable(locator))

    print(ele.text)
    current_price = float(ele.text)
    expect_price = 170

    # 使用 hamcrest 断言来判断股票价格浮动在 10% 范围内
    assert_that(current_price,
    close_to(expect_price, expect_price*0.1))
...

JAVA 版本
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.*;
...
@Test
public void wait1Test(){
    // 点击搜索输入框
    driver.findElementById("com.xueqiu.android:id/tv_search").click();
    // 输入 “alibaba”
    driver.findElementById("com.xueqiu.android:id/search_input_text").sendKeys("alibaba");

    // 点击“阿里巴巴”
    driver.findElementByXPath("//*[@text=\"阿里巴巴\"]").click();

    // 点击“股票”
    driver.findElementByXPath("//*[contains(@resource-id,\"title_container\")]//*[@text=\"股票\"]").click();

    // 获取股票价格
    By price_locator = By.xpath("//*[@text='09988']/../../..//*[@resource-id=\"com.xueqiu.android:id/current_price\"]");
    WebDriverWait wait = new WebDriverWait(driver, 10);
    WebElement ele = wait.until(ExpectedConditions.elementToBeClickable(price_locator));

    System.out.println(ele.getText());
    double currentPrice = Double.parseDouble(ele.getText());
    double expectPrice = 170;
    // 使用 hamcrest 断言来判断股票价格浮动在 10% 范围内
    assertThat(currentPrice, closeTo(expectPrice,expectPrice*0.1));

}
...

上面的示例中,通过assert_that/assertThat 是用于生成测试断言的样式化语句,比较两个值(current_price 与 expect_price)是否接近,断定实际值 current_price 在expect_price-expect_price0.1 与 expect_price+expect_price0.1 范围区间浮动。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1181389.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

检测和排除Wi-Fi性能问题的工具

在监控 Wi-Fi 网络时&#xff0c;需要持续监控和分析各种 Wi-Fi 网络方面&#xff0c;包括信号强度和接入点正常运行时间&#xff0c;以避免遇到网络问题。Wi-Fi 分析器工具可帮助您轻松跟踪和分析无线网络的性能&#xff0c;管理员可以从不同的无线组件&#xff08;如WLC和接入…

mysql的备份和恢复

备份&#xff1a;完全备份 增量备份 完全备份&#xff1a;将整个数据库完整的进行备份 增量备份&#xff1a;在完全备份的基础之上&#xff0c;对后续新增的内容进行备份 备份的需求 1、在生产环境中&#xff0c;数据的安全至关重要&#xff0c;任何数据的都可能产生非常严重…

蛋白质中不同氨基酸chi角原子的one-hot表示

蛋白质中的"chi角"&#xff08;chi angle&#xff09;通常是指侧链自由旋转的二面角&#xff0c;用于描述氨基酸侧链中的旋转构象。侧链是氨基酸分子的一部分&#xff0c;它们附着在氨基酸主链上&#xff0c;并可以以不同的角度自由旋转。chi角用于描述侧链旋转的几何…

EPLAN-P8软件技术分享文章

EPLAN公司成立于1984年德国。EPLAN最初的产品是基于DOS平台&#xff0c;然后经历了Windows3.1、Windows95、Windows98、Windows2000、Windows Vista等、Windows7、Windows8等平台发展历史。EPLAN是以电气设计为基础的跨专业的设计平台&#xff0c;包括电气设计、流体设计、仪表…

OpenCV学习之图像获取和显示

目录 图像获取从图片文件获取图像从视频文件获取图像 图像显示示例代码从图片文件获取图像从视频获取图像 图像获取 OpenCV 支持从图片文件获取图像、从视频文件获取图像以及从摄像头获取图像等方式。 从图片文件获取图像 使用函数imread可以从图片文件中读取图像,具体用法如…

Bean的生命周期,循环依赖

右边部分为生命周期。 二级缓存和三级缓存的区别就是是否被引用过&#xff0c;未被引用的放在三级缓存。如果被引用了&#xff0c;则把三级缓存的删除放到二级缓存

清华深圳2024届推免拟录取名单

名单 分析 清华深圳 数据科学与信息技术专业 共录取41人&#xff1b; 清华深圳 计算机技术专业共录取37人&#xff0c;都是专硕085404计算机技术&#xff1b; 电子信息专业大数据工程方向录取推免生13人&#xff1b; 电子信息集成电路与系统方向录取推免生18人&#xff1b; 电…

njust校园网自动认证

分析校园网登录页面 打开登录界面&#xff0c;填入你自己的账号和密码(先别点击登录)&#xff0c;然后按下 F12 点击了登录后&#xff1a; 获取登录请求的URL链接&#xff0c;可以看到南理校园网是使用POST的方式来登录的。 查看POST请求参数&#xff1a; 后面需要用到的…

SAT Encoding and CDCL Algorithm听课笔记

CDCL&#xff1a;&#xff1a;归结式 如果x不出现在公式的别的地方&#xff0c;那么两者可以等价 CDCL&#xff1a;&#xff1a;watched literals 通过监测文字来判断当前子句是否是单元子句 先选择两个未赋值的文字作为监测文字&#xff0c;若其中的监测文字被赋值后则去寻找…

基于单片机的土壤温湿度控制系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 技术交流认准下方 CSDN 官方提供的联系方式 文章目录 概要 一、温湿度控制系统的整体规划2.3系统的总体构架 二、温度湿度控制系统硬件设计3.1系统硬件概述 三、 温湿度系统软件…

Java web(七):VueElement

文章目录 一、Vue1.1 基本介绍1.2 常用指令1.3 生命周期1.4 案例VueAxios 二、Element三、综合案例【VueElementAxiosServeltMybatis】 一、Vue 1.1 基本介绍 Vue 是一套前端框架&#xff0c;免除原生JavaScript中的DOM操作&#xff0c;简化书写。 基于MVVM(Model-View-View…

六大排序算法:插入、选择、冒泡、快排、希尔、归并

1、插入排序 解析&#xff1a;第一个元素设定为已经排好序&#xff0c;依次选择后续的元素插入到已经排好序的组内进行排序。 图示&#xff1a; 代码&#xff1a; public static void insertionSort(int[] arr) {int n arr.length;for (int i 1; i < n; i) {int key a…

Databend 开源周报第 118 期

Databend 是一款现代云数仓。专为弹性和高效设计&#xff0c;为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务&#xff1a;https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展&#xff0c;遇到更贴近你心意的 Databend 。 MERGE INTO 现已…

计算机毕业设计 基于SpringBoot高校毕业与学位资格审核系统的设计与实现 Javaweb项目 Java实战项目 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

VR全景在旅游中应用有哪些?VR云游的优势是什么?

近日受到剧烈日冕物质抛射活动影响&#xff0c;漠河再现极光美景&#xff0c;极光舞动的灿烂星空下&#xff0c;正在封冻的黑龙江上&#xff0c;无数的冰排随波而去&#xff0c;天地之间光影流动好不美丽。相信很多人都想了解、观赏祖国的大好风光&#xff0c;但是碍于没时间、…

关于SSP3D复现

关于SSP3D复现的问题 准备工作 下载Xshell和XFTP&#xff1a;家校免费版下载链接连接服务器&#xff08;可能需要与服务器处在相同网络下&#xff09;GitHub上下载源码&#xff1a;SSP3D 左上角新建会话&#xff0c;输入名称和主机 点击左侧菜单“用户身份验证”&#xff0c…

Freeswitch实现软电话功能

1.话务步骤 分机注册(需要查询分机状态来判断是否可用)->登录&#xff08;接听呼入电话需要登录到指定queue&#xff09;->拨打电话->就绪->未就绪-> 登出 2. sdk调用方式 /*<--注册分机-->*/ //EslMessage eslMessage1 inboundClient.sendApiCommand(…

Linux文件系统——文件描述符

文章目录 0. 前言1. C文件接口文件打开文件写入 2. 系统文件接口open && write && closeopen的返回值 本章gitee代码仓库&#xff1a;文件描述符 0. 前言 基础原理知识&#xff1a; 文件 内容 属性 文件分为&#xff1a;打开的文件&#xff08;本章重点讲解…

python使用pysqlcipher3对sqlite数据库进行加密

python对很多项目都需要对sqlite数据库的数据进行加密&#xff0c;最流行的加密方式是使用pysqlcipher3&#xff0c;当前使用的python版本为3.7&#xff0c;本博文是直接使用pysqlcipher3在项目上的应用&#xff0c;使用的是已编译好的pysqlcipher3包&#xff0c;如果你需要pys…

6个常用的小程序UI组件库,大厂设计师都在用!

UI组件库是设计系统的一部分&#xff0c;在一般的页面设计过程中可以直接用来构建交互界面。因此&#xff0c;一个有效的小程序UI组件库可以帮助设计师快速掌握基本的交互框架&#xff0c;提高设计师的工作效率&#xff0c;让设计师有更多的时间打磨和提高小程序的整体效果。小…