Appium自动化测试 ------ 常见模拟操作!

news2024/12/23 13:46:38

Appium自动化测试中的常见模拟操作涵盖了多种用户交互行为,这些操作对于自动化测试框架来说至关重要,因为它们能够模拟真实用户的使用场景,从而验证应用程序的功能和稳定性。

以下是一些Appium自动化测试中常见的模拟操作:

图片

基本操作

01

1、点击操作

示例:element.click() 针对元素进行点击操作

2、初始化:输入中文的处理

说明:如果连接的是虚拟机(真机无需加这两个参数,加上可能会影响手工输入),在初始化配置中增加两个参数:

  • "resetKeyboard": True, # 重置设备的输入键盘

  • "unicodeKeyboard": True # 采用unicode编码输入

"resetKeyboard": True,        # 重置设备的输入键盘"unicodeKeyboard": True        # 采用unicode编码输入

3、清空和输入操作

element.clear() 针对元素进行清空操作

element.send_keys("value") 针对元素进行输入操作

输入的封装:

def input_text(element, text):    # 清除元素中的文本内容(为了保证代码的健壮性,在输入内容之前需要做一次清除操作。)    element.clear()    # 输入文本内容    element.send_keys(text)

4、获取元素的信息

获取元素的文本内容(获取的是元素text属性的内容)

element.text

获取元素的位置

element.location 返回的值是一个字典,字典中包含x和y , x和y表示的是元素在手机屏幕左上角的点的坐标

获取取元素的大小

element.size 返回值是一个字典,字典中会包含 width和height, width表示的宽度,height表示的高度

获取元素的属性值

element.get_attribute("attribute") # attribute表示的是属性名称

获取ID值时, attribute= “resourceId”

获取的是class的值 , attribute="className"

如果attribute = "name"时,获取的是text或者content-desc(text优先,找不到text值,再去找content-desc的值)

代码示例:

import timefrom appium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom appium.options.android import UiAutomator2Optionsfrom selenium.webdriver.support import expected_conditions as EC  # 定义一个初始化APP的方法def start_app(app_package, app_activity):     # 定义desired_caps 字典,初始化app的配置信息    desired_caps = {        "platformName": "android",  # 表示的是android        "platformVersion": "10",  # 表示的是设备系统的版本号        "deviceName": "DWV6R19A10002101",  # 表示的是设备的ID名称        "appPackage": app_package,  # 表示的是app的包名        "appActivity": app_activity,  # 表示的是app的界面名        "newCommandTimeout": 100000,        "noReset": True,  # 用来记住app的session,如果有登陆或做过初始化的操作,为True时,后面不需要再操作        "resetKeyboard": True,  # 重置设备的输入键盘        "unicodeKeyboard": True  # 采用unicode编码输入    }    # 创建 Appium 驱动实例    options = UiAutomator2Options().load_capabilities(desired_caps)    driver = webdriver.Remote("http://localhost:4723/wd/hub", options=options)     # 启动应用程序    driver.wait_activity(desired_caps, 5)    return driver  # 定义一个获取元素的方法def get_element_new(driver, element):    element = WebDriverWait(driver, 10).until(EC.visibility_of_element_located(element))    return element  # 定义一个输入的封装方法def input_text(element, text):    # 清除元素中的文本内容(为了保证代码的健壮性,在输入内容之前需要做一次清除操作。)    element.clear()    # 输入文本内容    element.send_keys(text)  if __name__ == "__main__":    # 本次启动的应用程序包名和活动名(作业帮)    app_package_zyb = "com.baidu.homework"    app_activity_zyb = ".activity.index.IndexActivity"     # 启动应用程序    driver_zyb = start_app(app_package_zyb, app_activity_zyb)     # 定位到首页顶部搜索框并点击    element = (By.ID, 'com.baidu.homework:id/tv_homepage_search_item')    search_element = get_element_new(driver_zyb, element)    search_element.click()    # 定位到输入框并输入"英语学习"    element = (By.ID, 'com.baidu.homework:id/index_search_et_search_text')    input_element = get_element_new(driver_zyb, element)    input_text(input_element, '英语学习')     # 获取元素的文本内容(获取的是元素text属性的内容)    print(f"输入框元素的文本信息是: {input_element.text}")    # 获取元素的位置(返回的值是一个字典,字典中包含x和y , x和y表示的是元素在手机屏幕左上角的点的坐标)    print(f"输入框的元素的位置坐标是: {input_element.location}")    # 获取取元素的大小    print(f"输入框元素的文本信息是: {input_element.size}")    '''    获取元素的属性值    element.get_attribute("attribute")  # attribute表示的是属性名称    获取ID值时,  attribute =  “resourceId”    获取的是class的值, attribute = "className"    如果attribute = "name"    时,获取的是text或者content - desc(text优先,找不到text值,再去找content - desc的值)    '''    print(f"输入框元素的ID属性信息是: {input_element.get_attribute('resourceId')}")    print(f"输入框元素的class属性信息是: {input_element.get_attribute('className')}")    print(f"输入框元素的name属性信息是: {input_element.get_attribute('name')}")     # 关闭驱动    time.sleep(3)    print("代码执行完毕")    driver_zyb.quit()

2、获取手机操作

图片

1、获取手机分辨率

目的:保证脚本在不同机型上都能实现滑屏的操作。

示例:driver.get_window_size()

说明:返回的值是字典类型, 包含 height 和 width 高度和宽度的值

2、获取手机截图

示例:driver.get_screenshot_as_file(filename)

说明:filename:1、路径必须手动创建 2、文件名称必须是以PNG结尾

3、设置/获取手机网络

目的:主要是为了实现视频类的app中,视频播放过程中网络切换时会有提示信息的操作。

示例:

  • driver.set_network_connection(connectionType) # connectionType 网络类型的值

  • driver.network_connection 获取手机网络

在 Appium 中,网络类型通过

driver.set_network_connection(connection type)

方法进行设置。其中,connection type参数表示需要被设置的网络类型,常用的网络类型有以下几种:

  • 飞行模式:1

  • WiFi 流量:2

  • 数据流量:4

  • 数据和 WiFi 全部打开:6

4、模拟键盘操作

示例:driver.press_keycode(键值)

说明:常用的三个键值:3 HOME键, 4 返回键 , 66 回车键

5、手机通知栏操作

示例:driver.open_notifications()

import timefrom appium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom appium.options.android import UiAutomator2Optionsfrom selenium.webdriver.support import expected_conditions as EC  # 定义一个初始化APP的方法def start_app(app_package, app_activity):     # 定义desired_caps 字典,初始化app的配置信息    desired_caps = {        "platformName": "android",  # 表示的是android        "platformVersion": "10",  # 表示的是设备系统的版本号        "deviceName": "DWV6R19A10002101",  # 表示的是设备的ID名称        "appPackage": app_package,  # 表示的是app的包名        "appActivity": app_activity,  # 表示的是app的界面名        "newCommandTimeout": 100000,        "noReset": True,  # 用来记住app的session,如果有登陆或做过初始化的操作,为True时,后面不需要再操作        "resetKeyboard": True,  # 重置设备的输入键盘        "unicodeKeyboard": True  # 采用unicode编码输入    }    # 创建 Appium 驱动实例    options = UiAutomator2Options().load_capabilities(desired_caps)    driver = webdriver.Remote("http://localhost:4723/wd/hub", options=options)     # 启动应用程序    driver.wait_activity(desired_caps, 5)    return driver  # 定义一个获取元素的方法def get_element_new(driver, element):    element = WebDriverWait(driver, 10).until(EC.visibility_of_element_located(element))    return element  # 定义一个输入的封装方法def input_text(element, text):    # 清除元素中的文本内容(为了保证代码的健壮性,在输入内容之前需要做一次清除操作。)    element.clear()    # 输入文本内容    element.send_keys(text)  if __name__ == "__main__":    # 本次启动的应用程序包名和活动名(作业帮)    app_package_zyb = "com.baidu.homework"    app_activity_zyb = ".activity.index.IndexActivity"     # 启动应用程序    driver_zyb = start_app(app_package_zyb, app_activity_zyb)     # 获取手机分辨率    print(driver_zyb.get_window_size())    # 获取手机截图    """ 1、路径必须手动创建    2、文件名称必须是以PNG结尾"""    current_time_file = "/error"+str(time.time())  # 通过文件名拼接当前时间戳的方式构造唯一文件名    filename = "/Users/work_related/image" + current_time_file + ".png" # 需要设置正确的路径    driver_zyb.get_screenshot_as_file(filename)     # 设置手机网络为Wi-Fi,然后获取当前手机的网络类型    """飞行模式:1    WiFi 流量:2    数据流量:4    数据和 WiFi 全部打开:6"""    driver_zyb.set_network_connection(2)   # 设置手机网络为Wi-Fi    print(f"当前手机的网络类型是:{driver_zyb.network_connection}")  # 获取当前手机的网络类型     # 模拟键盘操作    '''常用的三个键值:3 HOME键, 4 返回键 ,  66 回车键'''    # 定位到首页顶部搜索框并点击    element = (By.ID, 'com.baidu.homework:id/tv_homepage_search_item')    search_element = get_element_new(driver_zyb, element)    search_element.click()    # 定位到输入框并输入"英语学习"    element = (By.ID, 'com.baidu.homework:id/index_search_et_search_text')    input_element = get_element_new(driver_zyb, element)    input_text(input_element, '英语学习')    # 返回到上一页    driver_zyb.press_keycode(4)    time.sleep(3)    # home键返回    driver_zyb.press_keycode(3)    time.sleep(3)     # 打开手机通知栏    driver_zyb.open_notifications()     # 关闭驱动    time.sleep(3)    print("代码执行完毕")    driver_zyb.quit()

下期更新滑动操作及高级手势操作,欢迎关注!

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

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

 

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

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

相关文章

XPathParser类

XPathParser类是mybatis对 javax.xml.xpath.XPath的包装类。 接下来我们来看下XPathParser类的结构 1、属性 // 存放读取到的整个XML文档private final Document document;// 是否开启验证private boolean validation;// 自定义的DTD约束文件实体解析器,与valida…

JavaSE面向对象进阶

static 介绍 static表示静态,是Java中的一个修饰符可以修饰成员方法、成员变量 被static修饰的成员变量,叫做静态变量被static修饰的成员方法,叫做静态方法 静态变量 特点:被该类所有对象共享 调用方式: 类名调用&am…

关于@Async

Spring Boot 2.x 开始,默认情况下,Spring AOP 使用 CGLIB 代理 Async不能在同一个类中直接调用 关于在控制器不能使用Async 并不是因为SpringBoot2以前使用JDK代理 因为JDK代理需要类实现接口,控制器没有实现接口等原因 真正原因是 Async 不能…

windows@powershell@任务计划@自动任务计划@taskschd.msc.md

文章目录 使用任务计划windows中的任务计划任务计划命令行程序开发windows 应用中相关api传统图形界面FAQ schtasks 命令常见用法创建计划任务删除计划任务查询计划任务修改计划任务运行计划任务 PowerShell ScheduledTasks常用 cmdlet 简介1. Get-ScheduledTask2. Register-Sc…

手动在ubuntu上搭建一个nginx,并安装证书的最简化完整过程

背景:由于想做个测试:即IP为A的服务器,绑定完域名X后,如果再绑定域名Y,能不能被访问到。(假设对A不做绑定域名的设置) 这个问题的来源,见上一篇文章:《云服务器被非法域名…

kaggle使用api下载数据集

背景 kaggle通过api并配置代理下载数据集datasets 步骤 获取api key 登录kaggle,点个人资料,获取到自己的api key 创建好的key会自动下载 将key放至家目录下的kaggle.json文件中 我这里是windows的administrator用户。 装包 我用了虚拟环境 pip …

021.自定义指纹浏览器编译-修改ClientRects指纹

一、什么是ClientRects指纹 ClientRects指纹获取的核心方法是DOM元素方法getClientRects()​ 。getClientRects()​ 可以返回一个元素的所有 CSS 边界框(ClientRect对象数组),包括其大小、位置等信息。每个边界框由其左上角的 x, y 坐标和宽…

基于YOLOv10深度学习的商品条形码智能检测与识别系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标检测

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…

小程序、H5、APP中的微信支付概述和实战总结

最近开发的一个微信小程序的项目结束了,里面用到了支付相关的api,借着项目总结一下小程序各种场景支付的逻辑。 1. 微信支付概述 1.1 微信支付的重要性 微信支付作为中国领先的移动支付方式之一,其便捷性、安全性以及广泛的用户基础使其成为…

已解决丨怎么快速的让IP地址实现HTTPS访问?

要快速让IP地址实现HTTPS访问,可以遵循以下简洁步骤: 1. 确认公网IP地址 确保你拥有一个固定的公网IP地址,因为HTTPS访问需要通过互联网上的公网IP进行。 2. 选择证书颁发机构(CA) 选择一个受信任的证书颁发机构&a…

从PLC到云端,ZP3000系列网关助力工业数字化转型

ZP3000系列远程控制网关是一款专为满足现代工业自动化和远程监控需求而设计且功能强大的通讯模块。它的多接口设计和灵活配置能力,使得它能够适应多种复杂的工业通信和监控场景。以下是关于ZP3000系列远程控制网关的详细特点和应用场景: 产品特点 双以太…

playwright 模拟F11 全屏

直接上源代码 import multiprocessing import time from multiprocessing import Processfrom playwright.sync_api import sync_playwrightdef run(playwright):# 使用 Chromium 浏览器运行 设置 headlessFalse 以打开可视化窗口browser playwright.chromium.launch(headles…

C语言——设计TVM(地铁自动售票机)机软件。

输入站数,计算费用,计费规则,6站2元,7-10站3元,11站以上为4元。 输入钱数,计算找零(找零时优先找回面额大的钞票),找零方式为各种面额张数,可识别面额: 100,50,20,10,5,1…

linux中mysql的安装使用(普通版版本+docker版本)

linux中mysql的安装使用 一、普通安装1.下载安装包2.流程 二、用docker安装1.拉取mysql镜像2.启动镜像3.开启权限第一种情况第二种情况 三、用Navicat连接 一、普通安装 1.下载安装包 挑选个你喜欢的目录,用wget下载并且解压 wget http://dev.mysql.com/get/Down…

指针!!C语言 字符串篇(第四篇)

目录 一. sizeof和strlen的对比 二. 数组和指针笔试题解析 2.1 一维数组 2.2 字符数组 2.3 二维数组 一. sizeof和strlen的对比 在C语言中有两个比较相似的知识点,就是sizeof和strlen,下面我们来讲一下它们两者之间有什么不同之处? &a…

python脚本制作循环执行命令行

python import subprocess import sysif __name____main__:ret 1while ret!0:ret subprocess.call(sys.argv[1:], textTrue)pack pip install pyinstaller pyinstaller --onefile loop.py pyinstaller -i *.ico loop.py #指定ico图标 使用场景 使用上面生成的loop.exe调用c…

前端开发者必备:揭秘谷歌F12调试的隐藏技巧!

前言 使用断点(breakpoint)是调试 JavaScript 代码的一种非常有效的方式。通过在代码的关键位置设置断点,可以阻止页面的状态变化,从而方便地检查和修改页面的当前状态。 1. 使用 setTimeout 配合 debugger 和 console.log setTi…

调用百度的大模型API接口实现AI对话!手把手教程!

本文介绍如何使用百度的大模型API接口实现一个AI对话项目 1 注册百度云 2 获取API接口 3 配置环境 4 代码编写与运行 5 chat models 1 注册百度云 搜索百度云,打开官网注册,充值一点点大米(收费很低,大概生成几个句子花费一毛…

立仪光谱共焦传感器应用测量之:汽车连接器高度差测量

01 检测要求,要求测量汽车连接器的高度差 02 检测方式 根据观察,我们采用立仪科技光谱共焦H4UC控制器搭配D65A52系列镜头,角度最大,外径最大,量程大,可以有效应用于测量弧面,大角度面等零件。 0…

【嵌入式之RTOS】什么是著名的食客问题

目录 一、问题描述 二、四个条件 三、实际应用中的意义 著名的“食客问题”(Dining Philosophers Problem)是一个经典的计算机科学问题,用来说明并发编程中的资源竞争和死锁问题。这个问题最初是由荷兰计算机科学家Edsger Dijkstra提出的…