干货 | APP自动化Android之属性获取与断言

简介: 断言是 UI 自动化测试的三要素之一,是 UI 自动化不可或缺的部分。我们使用定位器定位到元素后,通过脚本进行业务操作的交互,想要验证交互过程中的正确性就需要用到断言。## 常规的UI自动化断言分析正确的输出结果,常规的断言一般包含以下的几个情形:- 比较大小- 包含或者不包含- 验证布尔值示例代码:```#比较大小price = driver.find_element

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

常规的UI自动化断言

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

  • 比较大小
  • 包含或者不包含
  • 验证布尔值

示例代码:

#比较大小
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")]')
    if len(name)!=0:
        return True
    else:
        return False
assert check()

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

Hamcrest断言

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

Hamcrest使用方法

安装

pip install pyhamcrest
from hamcrest import *

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

1.比较两个字符串可以使用“equal_to”方法,示例代码如下:

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

2.数值匹配,比较两个值是否接近,可以使用“close_to”方法,用法:

assert_that(8,close_to(10,2))

解释:断言 8 接近于 (8 ~ 12)这个范围。
3.包含某个字符,使用“contains_string”方法,示例代码如下:

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

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

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))

上面的示例中,assert_that 是用于生成测试断言的样式化语句,比较两个值(current_price 与 expect_price)是否接近,断定实际值 current_price 在expect_price-expect_price0.1 与expect_price+expect_price0.1 范围区间浮动。
作为UI自动化测试三要素之一的断言,大家学会了么?下一篇我们来分享参数化用例,有兴趣的小伙伴可以关注一下哦!

相关文章
|
15天前
|
API Android开发
Android P 性能优化:创建APP进程白名单,杀死白名单之外的进程
本文介绍了在Android P系统中通过创建应用进程白名单并杀死白名单之外的进程来优化性能的方法,包括设置权限、获取运行中的APP列表、配置白名单以及在应用启动时杀死非白名单进程的代码实现。
36 1
|
18天前
|
IDE Java 开发工具
探索安卓开发之旅:打造你的第一款App
【8月更文挑战第24天】在这篇文章中,我们将一起踏上激动人心的安卓开发之旅。不论你是编程新手还是希望扩展技能的老手,本文将为你提供一份详尽指南,帮助你理解安卓开发的基础知识并实现你的第一个应用程序。从搭建开发环境到编写“Hello World”,每一步都将用浅显易懂的语言进行解释。那么,让我们开始吧!
|
11天前
|
C# 开发者 Windows
全面指南:WPF无障碍设计从入门到精通——让每一个用户都能无障碍地享受你的应用,从自动化属性到焦点导航的最佳实践
【8月更文挑战第31天】为了确保Windows Presentation Foundation (WPF) 应用程序对所有用户都具备无障碍性,开发者需关注无障碍设计原则。这不仅是法律要求,更是社会责任,旨在让技术更人性化,惠及包括视障、听障及行动受限等用户群体。
33 0
|
11天前
|
Android开发 iOS开发 C#
Xamarin:用C#打造跨平台移动应用的终极利器——从零开始构建你的第一个iOS与Android通用App,体验前所未有的高效与便捷开发之旅
【8月更文挑战第31天】Xamarin 是一个强大的框架,允许开发者使用单一的 C# 代码库构建高性能的原生移动应用,支持 iOS、Android 和 Windows 平台。作为微软的一部分,Xamarin 充分利用了 .NET 框架的强大功能,提供了丰富的 API 和工具集,简化了跨平台移动应用开发。本文通过一个简单的示例应用介绍了如何使用 Xamarin.Forms 快速创建跨平台应用,包括设置开发环境、定义用户界面和实现按钮点击事件处理逻辑。这个示例展示了 Xamarin.Forms 的基本功能,帮助开发者提高开发效率并实现一致的用户体验。
23 0
|
15天前
|
存储 XML Linux
深入理解操作系统:进程管理与调度策略探索安卓应用开发:从零开始构建你的第一个App
【8月更文挑战第28天】在数字世界里航行,操作系统是掌控一切的舵手。本文将带你领略操作系统的精妙设计,特别是进程管理和调度策略这两大核心领域。我们将从基础概念出发,逐步深入到复杂的实现机制,最后通过实际代码示例,揭示操作系统如何高效协调资源,确保多任务顺畅运行的秘密。准备好了吗?让我们启航,探索那些隐藏在日常电脑使用背后的奥秘。 【8月更文挑战第28天】在这个数字时代,拥有一款自己的移动应用程序不仅是技术的展示,也是实现创意和解决问题的一种方式。本文将引导初学者了解安卓开发的基础知识,通过一个简单的待办事项列表App项目,逐步介绍如何利用安卓开发工具和语言来创建、测试并发布一个基本的安卓应用
|
16天前
|
Java 程序员 Android开发
探索安卓开发:构建你的第一个App
【8月更文挑战第27天】在数字化时代的浪潮中,移动应用成为人们生活不可或缺的一部分。对于渴望进入软件开发领域的新手而言,掌握如何构建一款简单的安卓App是开启技术之旅的关键一步。本文旨在通过浅显易懂的语言和步骤分解,引导初学者了解安卓开发的基础知识,并跟随示例代码,一步步实现自己的第一个安卓App。从环境搭建到界面设计,再到功能实现,我们将一同揭开编程的神秘面纱,让每个人都能体会到创造软件的乐趣。
|
5天前
|
运维 Ubuntu Devops
自动化运维工具的魅力:Ansible入门
【9月更文挑战第5天】在快速变化的IT世界里,自动化运维不再是可选项,而是必需品。Ansible,一款简单却强大的自动化工具,正成为众多DevOps工程师的首选。本文将带你了解Ansible的基本概念、安装步骤以及如何编写简单的Playbook,从而开启你的自动化之旅。
55 35
|
3天前
|
存储 弹性计算 运维
自动化监控和响应ECS系统事件
阿里云提供的ECS系统事件用于记录云资源信息,如实例启停、到期通知等。为实现自动化运维,如故障处理与动态调度,可使用云助手插件`ecs-tool-event`。该插件定时获取并转化ECS事件为日志存储,便于监控与响应,无需额外开发,适用于大规模集群管理。详情及示例可见链接文档。
|
7天前
|
运维 监控 安全
python在自动化运维中的妙用分享
python在自动化运维中的妙用分享
22 8
|
6天前
|
运维 Ubuntu Linux
掌握自动化运维:使用Ansible进行服务器配置管理
【9月更文挑战第5天】本文旨在通过深入浅出的方式,介绍如何利用Ansible这一强大的自动化工具来简化和加速日常的服务器配置管理工作。文章将首先概述自动化运维的重要性,接着详细讲解Ansible的基本概念、安装过程及其在服务器配置中的应用实例。我们将通过具体的操作步骤和代码示例,展示如何使用Ansible编写任务,以及如何执行这些任务以实现批量的服务器配置。最后,文章将探讨一些高级用法,帮助读者进一步提升自动化运维的能力。

热门文章

最新文章