APP自动化测试-4. App控件交互

2023-11-10

APP自动化测试-4. App控件交互



前言

简单介绍元素的操作方法和元素的属性


一、元素常用的操作方法

  • click():元素点击
  • send_keys():对元素进行输入操作
  • set_value():设置元素的值
  • clear():清除元素的值
  • is_displayed():判断元素是否可见
  • is_enable():判断元素是否可用
  • is_selected():判断元素是否为选中状态

代码示例:

from time import sleep

from appium import webdriver
from appium.webdriver.common.appiumby import AppiumBy

desired_caps = {
  "platformName": "android",
  "appium:deviceName": "b1f37e8e",
  "appium:appPackage": "com.jianshu.haruki",
  "appium:appActivity": "com.baiji.jianshu.ui.splash.SplashScreenActivity",
  # 添加noReset后,会记录该应用之前的操作
  "noReset": True,
  # 设置dontStopAppOnReset后,如果应用已打开,则不会关闭应用重新打开
  "dontStopAppOnReset": True,
  # 跳过安装及权限设置操作,提升执行速度
  "skipDeviceInitialization": True
}
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
# 设置隐式等待
driver.implicitly_wait(3)

# 获取元素
element = driver.find_element(by=AppiumBy.ID, value="com.jianshu.haruki:id/et_account")
# 点击元素
element.click()

# 元素中输入内容
element.send_keys("this is a test message")

# 设置元素的值
element.set_value("test value")

# 清除元素的值
element.clear()

# 判断元素是否可见
element.is_displayed()

# 判断元素是否可用
element.is_enabled()

# 判断元素是否为选中状态
element.is_selected()

sleep(3)
driver.quit()

二、元素的常用属性

  • get_attribute(attributeName):根据传入的属性名称,获取元素属性值
  • text():获取元素的text内容
  • location():获取元素的坐标(元素左上角的坐标,配合元素的尺寸属性确定元素)
  • size:获取尺寸
# 获取元素的属性值
print(element.get_attribute("displayed"))

# 获取元素的text内容
print(element.text)

# 获取元素坐标
print(element.location)

# 获取尺寸
print(element.size)

Attribute源码(部分)

/*
 * 
 */

package io.appium.uiautomator2.utils;

import android.text.TextUtils;

import androidx.annotation.Nullable;

import java.util.ArrayList;
import java.util.List;

public enum Attribute {
	// checkable判断是否可被勾选,get_attribute("checkable"),返回true/false
    CHECKABLE(new String[]{"checkable"}),
    // checked判断是否已被勾选,get_attribute("checked"),返回true/false
    CHECKED(new String[]{"checked"}),
    // class/className, get_attribute("class")/get_attribute("className"),返回元素的类名称,例如:android.widget.EditText
    CLASS(new String[]{"class", "className"}),
    // clickable判断是否可被点击,get_attribute("clickable"),返回true/false
    CLICKABLE(new String[]{"clickable"}),
    // content-desc返回元素该属性的值,get_attribute("content-desc")/get_attribute("contentDescription")
    CONTENT_DESC(new String[]{"content-desc", "contentDescription"}),
    // enabled,判断元素是否可用,get_attribute("enabled"),返回true/false
    ENABLED(new String[]{"enabled"}),
    // focusable判断当前元素是否可以获取焦点,get_attribute("focusable"),返回true/false
    FOCUSABLE(new String[]{"focusable"}),
    // focused判断当前元素是否为焦点,get_attribute("focused"),返回true/false
    FOCUSED(new String[]{"focused"}),
    // longClickable判断是否可以长按点击操作,get_attribute("longClickable"),返回true/false
    LONG_CLICKABLE(new String[]{"long-clickable", "longClickable"}),
    // package获取包名字符串,get_attribute("package"), 例如:com.jianshu.haruki
    PACKAGE(new String[]{"package"}),
    // password判断是否密码框,get_attribute("password"),返回true/false
    PASSWORD(new String[]{"password"}),
    // 返回元素resourceId属性的值,get_attribute("resourceId")/get_attribute("resource-id"),例如:com.jianshu.haruki:id/et_account
    RESOURCE_ID(new String[]{"resource-id", "resourceId"}),
    // scrollable判断是否可滚动,get_attribute("scrollable"),返回true/false
    SCROLLABLE(new String[]{"scrollable"}),
   	// 自动选择开始位置 
    SELECTION_START(new String[]{"selection-start"}),
    // 自动选择结束为止
    SELECTION_END(new String[]{"selection-end"}),
    // selected判断元素是否被选中(多数为下拉框),get_attribute("selected"),返回true/false
    SELECTED(new String[]{"selected"}),
    // 获取元素的text/name属性值,get_attribute("text")/get_attribute("name")返回字符串,例如:
    TEXT(new String[]{"text", "name"}),
    // 获取提示
    HINT(new String[]{"hint"}),
    // 获取附加信息
    EXTRAS(new String[]{"extras"}),
    // The main difference of this attribute from the preceding one is that
    // it does not replace null values with empty strings
    // 获取原始文本信息
    ORIGINAL_TEXT(new String[]{"original-text"}, false, false),
    // bounds获取元素完整坐标,get_attribute("bounds"),返回坐标,例如:[0,466][1080,562]
    BOUNDS(new String[]{"bounds"}),
    // 获取元素的索引,get_attribute("index"),返回元素索引值
    INDEX(new String[]{"index"}, false, true),
    // 判断元素是否可见,get_attribute("displayed"),返回true/false
    DISPLAYED(new String[]{"displayed"}),
    // 返回内容的长度
    CONTENT_SIZE(new String[]{"contentSize"}, true, false);

    ...

总结

元素的属性可以通过方法返回,也可以使用get_attribute(“属性名称”)进行获取

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

APP自动化测试-4. App控件交互 的相关文章

随机推荐

  • osgEarth的Rex引擎原理分析(一二八)rex的引擎和图层投影及其关系

    目标 一二七 中问题214 主要存在三个地方 一是map的type属性 可取两个值geocentric projected 前者用于三维显示 后者用于二维显示 二是map的options属性的srs 可以取spherical mercato
  • 用户复购行为预测--数据挖掘分析案例(天池/python)

    阿里天池新人赛中的一个 记录分享 Repeat Buyers Prediction Challenge the Baseline 天池大赛 阿里云天池 第一次提交 8简单特征 随机森林模型 score 0 5507327 排名 278 第二
  • vue3 父子组件传值 记录

    最近这个组件之间传值用的较多 我这该死的记性 总给忘记写法 特此记录下 第一种 父传子 补充 LeftView vue 是父组件 Video vue 是子组件 第二种 子传父 Video vue 子组件 第一步 引入 import defi
  • PHP Advent 2011:带有CORS的跨域Ajax

    I ve had the honor of writing for this year s PHP Advent blessing you all about Cross Origin Requests with CORS 我很荣幸为今年P
  • nginx中间件漏洞复现

    nginx中间件漏洞复现 nginx介绍 Nginx engine x 是一个高性能的HTTP和反向代理web服务器 同时也提供了IMAP POP3 SMTP服务 Nginx是由伊戈尔 赛索耶夫为俄罗斯访问量第二的Rambler ru站点
  • VMware虚拟机中调用本机摄像头详解

    本机环境 虚拟机 VMware Workstation 16 Player 虚拟机内系统 Centos7 其它也ok的 本机 win10 任何系统都ok 调用本机摄像头 首先wins R输入services msc 打开本地服务列表 确保
  • Java图片透明度调整

    package com image import java awt AlphaComposite import java awt BorderLayout import java awt Graphics import java awt G
  • Java 实现 Base64 加密&解密方法

    1 Base64 加密算法 1 1 标准 Base64 算法 Base64 编码是程序开发中比较常用的一种编码算法 是常用来存储或传输一些二进制数据的方法 也是 MIME 多用途互联网邮件扩展 中的一种编码方法 Base64 可以实现将任何
  • Spring Boot - swagger2 整合

    swagger官网 https swagger io 一 引入依赖
  • 怎么用系统做固定资产管理

    企业如何高效地管理其固定资产已成为了一个不容忽视的问题 传统的资产管理方式往往依赖于人力和纸质记录 这种方式不仅效率低下 而且容易出错 因此 引入一个先进的固定资产管理系统显得尤为重要 本文将探讨如何使用系统进行固定资产管理 并提出一些创新
  • win7无法访问服务器共享文件夹解决办法

    方案 今天的工作本来安排的好好的 本来都已经在开始高效的做事情了 因为服务器要安装一个驱动程序 在安装好了之后结果发现自己的电脑再也没有办法连接到服务器的共享了 真是恼火 造理说我也是可什么设置都没有动过啊 我就只是用下网络的共享服务而已那
  • Eclipse配置

    一 eclipse安装时选择的专门开发java项目的Eclipse IDE for Java Developers 因此没有new Dynamic Web Project 属于JavaEE 选项 方法1 直接安装JavaEE版本eclips
  • 开源ehr系统_国家通过开源EHR节省数百万美元

    开源ehr系统 自从2009年成为 经济和临床健康卫生信息技术 HITECH 法案 的基石以来 电子健康记录 EHR 在美国卫生系统中已无处不在 EHR使医疗保健提供者可以跟踪患者的医疗数据 并与其他授权方共享 VistA是美国退伍军人事务
  • orz项目编译的要点

    Orz 0 4 0 AllInOne iso 的编译指导 其实也没有什么需要指导的 只是想说明 这个过程是很容易的 要有信心 下载到Orz 0 4 0 AllInOne iso之后 按照文档readme hta来操作 因为这是个很老的教材
  • 2008.06.02 读华为前执行副总裁李玉琢的《我与商业领袖的合作与冲突》有感(三)

    理解一下书中提到的几点管理思想 和大家一起分享 1 柳传志的 搭班子 定战略 带队伍 这里需要注意的是搭班子 定战略 带队伍顺序不可乱 为什么这样说 一个组织只有先存在核心 才可能确定明确的战略 不同的核心 定出来的战略就可能不一样 因此是
  • 力扣202.快乐数(java语言HashSet方法,类双指针方法)

    前言 此题被分类到散列表算法题目中 但乍一看此题实在想不到如何去使用散列表 直到看了官方给的答案 题目描述 编写一个算法来判断一个数 n 是不是快乐数 快乐数 定义为 对于一个正整数 每一次将该数替换为它每个位置上的数字的平方和 然后重复这
  • 2021年度

    践行开源共创的精神 FISCO BCOS开源社区致力打造开放多元的开源联盟链生态 目前 社区已汇聚了超70000名社区用户 大家聚集于此碰撞观点 交流技术 围绕FISCO BCOS开发各类实用的应用组件 持续优化项目 并自发输出技术解析 使
  • 使用Java写入Excel下拉选择框选项过多不显示问题

    1 问题描述 工作中遇到需要使用Java poi读写Excel文件的问题 因为需求中有要求在写文件时创建下拉选择框 按照传统的直接使用List集合保存下拉选择框的选项 再通过poi本身的方法将选择框的选项添加到下拉框中 一开始编写demo测
  • 【01】花卉识别-基于tensorflow2.3实现

    2021年6月18日重大更新 目前已经退出bug修复之后的tensorflow2 3物体分类代码 大家可以训练自己的数据集 快来试试吧 csdn教程链接 手把手教你用tensorflow2 3训练自己的分类数据集 CSDN博客 b站视频链接
  • APP自动化测试-4. App控件交互

    APP自动化测试 4 App控件交互 文章目录 APP自动化测试 4 App控件交互 前言 一 元素常用的操作方法 二 元素的常用属性 总结 前言 简单介绍元素的操作方法和元素的属性 一 元素常用的操作方法 click 元素点击 send