当前位置: 首页 > news >正文

智能终端界面自动化测试操作工具 - Appium常见用法

1. Appium 是什么可以做什么?

Appium 是一款开源的移动应用自动化测试框架,用于测试移动应用程序的功能和用户界面。它支持多种移动平台,包括 Android 和 iOS,可以使用多种编程语言进行脚本编写,如 Python、Java、JavaScript 等。
简单理解,Selenium是用于桌面系统的Web界面自动化测试框架,Appium是在智能终端,如Android Apple iPhone iPad等手机设备上,自动访问控制手机,在相关App上进行自动化测试操作。

2. Appium 依赖软件包安装

在使用 Appium 进行 Android 自动化测试之前,需要安装以下依赖软件和工具:

  1. Java Development Kit (JDK): Appium 是基于 Java 开发的,因此需要安装 JDK。你可以从 Oracle 官方网站下载适用于你的操作系统的 JDK 版本,并按照官方指南进行安装。

  2. Android SDK: Android SDK 提供了 Android 平台的开发工具和 API,用于构建和运行 Android 应用程序。你可以从 Android 开发者网站下载 Android SDK,并按照指南进行安装。

  3. Node.js: Appium 是使用 Node.js 编写的,因此需要安装 Node.js 运行环境。你可以从 Node.js 官方网站下载适用于你的操作系统的 Node.js 版本,并按照官方指南进行安装。

  4. Appium Server: Appium Server 是 Appium 的核心组件,用于驱动设备或模拟器,并提供与移动应用的通信接口。你可以从 Appium 官方网站下载 Appium Server,并按照指南进行安装。

  5. Appium Python 客户端库: 如果你选择使用 Python 编写 Appium 脚本,需要安装 Appium Python 客户端库。你可以使用 pip 命令在命令行中安装 Appium Python 客户端库,如下所示:

pip install Appium-Python-Client
  1. Android 虚拟设备或真机: 为了运行和测试 Android 应用程序,你需要准备一个 Android 虚拟设备(模拟器)或连接一台 Android 真机设备,并确保设备已启用开发者选项和 USB 调试功能。

确保安装和配置正确后,你将能够开始编写和运行 Appium 脚本来自动化测试 Android 应用程序。

3. 启用Android设备的开发者选项和USB调试功能

开始编写自动化测试脚本之前,需要连接手机,启用 Android 设备的开发者选项和 USB 调试功能:

  1. 打开设备的设置(Settings):在 Android 设备上,滑动下拉通知栏,然后点击右上角的设置图标,或者在应用程序列表中找到并点击设置应用程序图标。

  2. 查找设备信息(About Phone 或 About Device):在设置中,向下滚动或浏览列表,找到 “关于手机” 或 “关于设备” (可能会有轻微的差异),然后点击进入该选项。

  3. 查找设备版本号:在设备信息中,查找 “版本号” 或 “软件信息”。通常,你需要点击 “版本号” 字段七次或更多次,直到出现一个提示表示开发者选项已经启用。

  4. 返回设置并找到开发者选项:返回到设置界面,在设置列表的末尾或在其他选项下,你将看到 “开发者选项”。点击进入该选项。

  5. 启用开发者选项:在开发者选项页面,找到并点击开关按钮或复选框,将其从 “关闭” 改为 “打开” 或 “启用”。这将启用开发者选项。

  6. 启用 USB 调试:在开发者选项页面,滚动或浏览列表,找到 “USB 调试” 选项,并勾选复选框以启用 USB 调试功能。

完成上述步骤后,你的 Android 设备将启用开发者选项和 USB 调试功能。现在你可以使用 Appium 或其他工具与设备进行连接,并进行 Android 自动化测试。请注意,不同的 Android 设备可能会有略微不同的界面和选项标签,但基本上遵循相似的步骤。

4. Appium常见用法

当使用 Appium 和 Python 进行移动应用自动化测试时,以下是一些常见的代码示例,涵盖元素定位、操作和断言等方面:

  1. 启动应用程序并连接到 Appium 服务器
from appium import webdriverdesired_caps = {'platformName': 'Android','deviceName': 'Android Emulator','appPackage': 'com.example.app','appActivity': 'com.example.app.MainActivity'
}driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
  1. 通过 ID 定位元素并进行点击操作
from appium.webdriver.common.mobileby import MobileBy
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC# 等待元素出现
wait = WebDriverWait(driver, 10)
element = wait.until(EC.presence_of_element_located((MobileBy.ID, 'com.example.app:id/button')))# 点击按钮
element.click()
  1. 通过 XPath 定位元素并输入文本
from appium.webdriver.common.mobileby import MobileBy
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC# 等待元素可见
wait = WebDriverWait(driver, 10)
text_input = wait.until(EC.visibility_of_element_located((MobileBy.XPATH, '//android.widget.EditText[@text="Username"]')))# 输入文本
text_input.send_keys('John Doe')
  1. 滑动屏幕
from appium.webdriver.common.touch_action import TouchAction# 获取屏幕尺寸
screen_size = driver.get_window_size()
start_x = int(screen_size['width'] * 0.5)
start_y = int(screen_size['height'] * 0.8)
end_x = int(screen_size['width'] * 0.5)
end_y = int(screen_size['height'] * 0.2)# 滑动屏幕
action = TouchAction(driver)
action.press(x=start_x, y=start_y).move_to(x=end_x, y=end_y).release().perform()
  1. 断言元素的文本内容
from appium.webdriver.common.mobileby import MobileBy
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC# 等待元素出现
wait = WebDriverWait(driver, 10)
element = wait.until(EC.presence_of_element_located((MobileBy.ID, 'com.example.app:id/text_view')))# 断言文本内容
expected_text = 'Hello, Appium!'
actual_text = element.text
assert expected_text == actual_text

这些示例演示了常见的 Appium Python 代码用法,包括启动应用程序、定位元素、进行操作和断言验证。你可以根据具体的应用程序和测试需求进行相应的修改和扩展。请注意,这些示例中的元素定位方式和元素的标识符(如 ID、XPath)可能因应用程序的不同而有所变化,需要根据实际情况进行调整。

5. 简单代码示例 - 通过Chrome访问csdn

from appium import webdriver
import time# Appium服务器地址和设备配置
desired_caps = {'platformName': 'Android','platformVersion': 'your_android_version','deviceName': 'your_device_name','browserName': 'Chrome',
}
appium_server = 'http://localhost:4723/wd/hub'# 创建Appium WebDriver实例
driver = webdriver.Remote(appium_server, desired_caps)
driver.implicitly_wait(10)# 打开Google Chrome浏览器并访问网址
print("打开Google Chrome浏览器")
driver.get('https://blog.csdn.net/')
time.sleep(2)# 找到搜索框并输入关键字
print("在搜索框中输入关键字: Entropy-Go")
search_box = driver.find_element_by_id('search_input')
search_box.send_keys('Entropy-Go')# 提交搜索表单
print("提交搜索表单")
submit_button = driver.find_element_by_id('search_button')
submit_button.click()
time.sleep(2)# 打开搜索结果的第一个网页
print("打开搜索结果的第一个网页")
first_result = driver.find_element_by_css_selector('div.search-list-con > dl > dt > a')
first_result.click()
time.sleep(2)# 关闭浏览器并退出
driver.quit()

相关文章:

智能终端界面自动化测试操作工具 - Appium常见用法

1. Appium 是什么可以做什么? Appium 是一款开源的移动应用自动化测试框架,用于测试移动应用程序的功能和用户界面。它支持多种移动平台,包括 Android 和 iOS,可以使用多种编程语言进行脚本编写,如 Python、Java、Jav…...

结构体数组经典运用---选票系统

结构体的引入 1、概念:结构体和其他类型基础数据类型一样,例如int类型,char类型,float类型等。整型数,浮点型数,字符串是分散的数据表示,有时候我们需要用很多类型的数据来表示一个整体&#x…...

code too large

描述:比较尴尬,一个方法的代码接近10000行了,部署服务器的时候提示(java :code[255,21] too large),提示代码过长,无法运行。 查看了一下百度:解决的思路 JVM规范:「类或接口可以声明的字段数量限制在 655…...

vue中把弹出层.vue文件注册成组件供其他.vue文件调用的写法

背景:因弹出层多个页面的详情都是一样的,因此把弹出层定义成组件,多次调用 定义组件的过程中出现很多问题,因此再次记录最终成功的写法 一、 简单实现页面调用弹出层组件的打开弹出层方法: 1. 弹出层组件 (in…...

mac 查看GPU使用

首先搜索活动监视器 然后 点击窗口->gpu历史记录 记住不是立马出结果,而是 需要等半分钟左右的...

工业4.0的安全挑战与解决方案

在当今数字化时代,工业4.0已经成为制造业的核心趋势。工业4.0的兴起为生产企业带来了前所未有的效率和灵活性,但与之伴随而来的是一系列的安全挑战。本文将深入探讨工业4.0的安全挑战,并提供一些解决方案,以确保制造业的数字化转型…...

如何查找特定基因集合免疫基因集 炎症基因集

温故而知新,再次看下Msigdb数据库。它更新了很多内容。给我们提供了一个查询基因集的地方。 关注微信:生信小博士 比如纤维化基因集: 打开网址:https://www.gsea-msigdb.org/gsea/msigdb/index.jsp 2.点击search 3.比如我对纤维…...

轮转数组(Java)

大家好我是苏麟 , 这篇文章是凑数的 ... 轮转数组 描述 : 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 题目 : 牛客 NC110 旋转数组: 这里牛客给出了数组长度我们直接用就可以了 . LeetCode 189.轮转数组 : 189. 轮…...

Spring体系结构

Spring体系结构 核心容器 核心容器由 spring-core,spring-beans,spring-context,spring-context-support和spring-expression(SpEL,Spring 表达式语言,Spring Expression Language)等模块组成&…...

PostgreSQL basebackup备份和恢复

一、概述 备份和恢复分为逻辑和物理,这里指物理备份和恢复。 PG的物理备份依赖basebackup,这差不多就是数据目录的拷贝,还依赖归档日志。 恢复分为完全恢复和PITR恢复,它们都需要归档日志,它们关键的差别是&#xf…...

XTU-OJ 1248-Alice and Bob

Alice和Bob在玩骰子游戏,他们用三颗六面的骰子,游戏规则如下: 点数的优先级是1点最大,其次是6,5,4,3,2。三个骰子点数相同,称为"豹子",豹子之间按点数优先级比较大小。如果只有两个骰子点数相同&…...

第四章 文件管理 十、文件系统的全局结构

目录 一、文件系统的建立 1、原始磁盘 2、物理格式化后 3、逻辑格式化后 二、文件系统在内存中的结构 三、系统调用背后的过程 一、文件系统的建立 1、原始磁盘 2、物理格式化后 物理格式化,即低级格式化――划分扇区,检测坏扇区,并用…...

【PythonGIS】基于高德Api实现批量地址查询经纬度

之前因为同事需要几千个小区的经纬度信息,所以就帮同事写了一段Python代码,通过调取高德地图的api实现地址查询经纬度这个功能。对于如何使用经纬度查询地址的方法,我之前分享过博文:【Python入门教程】获取图片可视化精准定位&am…...

vue数组中的变更方法和替换方法

变更方法: Vue 能够侦听响应式数组的变更方法,并在它们被调用时触发相关的更新。这些变更方法包括: push():在数组末尾添加一个或者多个元素,返回新的长度。 var arr [1, 2, 3, 4, 5]; // 定义一个数组 arr.push(6…...

Java - 工具类参数初始化

在做第三方接口调用时,经常需要根据不同的环境指定初始化的参数。以下做一个简单的记录。 一、使用static初始化 使用static初始化,仅会初始化一次,但无法从配置文件中获取参数。并且如果写了多个初始化工具类,会互相覆盖。 /**…...

一文搞懂 MineCraft 服务器启动操作和常见问题 2023年10月

文章目录 前言1. 新建文件夹2. 创建 bat 文件3. 编辑 bat 文件4. 启动服务器5. 恭喜完成 文章持续更新中,如果你有问题可以通过 qq 1317699264 获取免费协助,解决的问题将会被更新到本文章中 前言 无论你是使用服务端整合包,还是从上一篇我的…...

第2篇 机器学习基础 —(2)分类和回归

前言:Hello大家好,我是小哥谈。机器学习中的分类和回归都是监督学习的问题。分类问题的目标是将输入数据分为不同的类别,而回归问题的目标是预测一个连续的数值。分类问题输出的是物体所属的类别,而回归问题输出的是数值。本节课就…...

Java游戏修炼手册:2023 最新学习线路图

前言 有没有一种令人兴奋的学习方法?当然有!绝对有!而且我要告诉你,学习的快乐可以媲美游戏的刺激。 小学时代,我曾深陷于一款名为"八百万勇士的梦"的游戏。每当放学,我总是迫不及待地打开电脑&a…...

前端访问geoserver服务发生跨域的解决办法,以及利用html2canvas下载绘制的地图

我的业务场景: 需要利用html2canvas下载Openlayers绘制的地图。 预期:可以下载成图片甚至其他格式(svg)文件。 结果:下载下来是个空白图片。 排查错误:请求数据正常回显到页面上,利用html2canvas截取的时候会发生跨域,导致无法绘制。 首先处理tomcat跨域问题 第一步…...

Word docx转html和markdown

Pypandoc使用pandoc来进行各种文本格式的转换。 安装 # 不带pandoc执行库 pip install pypandoc# 自带pandoc pip install pypandoc_binary使用 import pypandoc# convert all markdown files in a chapters/ subdirectory. pypandoc.convert_file(chapters/*.md, docx, out…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查

在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

FFmpeg:Windows系统小白安装及其使用

一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】,注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录(即exe所在文件夹)加入系统变量…...

LangFlow技术架构分析

🔧 LangFlow 的可视化技术栈 前端节点编辑器 底层框架:基于 (一个现代化的 React 节点绘图库) 功能: 拖拽式构建 LangGraph 状态机 实时连线定义节点依赖关系 可视化调试循环和分支逻辑 与 LangGraph 的深…...

MFE(微前端) Module Federation:Webpack.config.js文件中每个属性的含义解释

以Module Federation 插件详为例,Webpack.config.js它可能的配置和含义如下: 前言 Module Federation 的Webpack.config.js核心配置包括: name filename(定义应用标识) remotes(引用远程模块&#xff0…...

【堆垛策略】设计方法

堆垛策略的设计是积木堆叠系统的核心,直接影响堆叠的稳定性、效率和容错能力。以下是分层次的堆垛策略设计方法,涵盖基础规则、优化算法和容错机制: 1. 基础堆垛规则 (1) 物理稳定性优先 重心原则: 大尺寸/重量积木在下&#xf…...

微服务通信安全:深入解析mTLS的原理与实践

🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、引言:微服务时代的通信安全挑战 随着云原生和微服务架构的普及,服务间的通信安全成为系统设计的核心议题。传统的单体架构中&…...

【大模型】RankRAG:基于大模型的上下文排序与检索增强生成的统一框架

文章目录 A 论文出处B 背景B.1 背景介绍B.2 问题提出B.3 创新点 C 模型结构C.1 指令微调阶段C.2 排名与生成的总和指令微调阶段C.3 RankRAG推理:检索-重排-生成 D 实验设计E 个人总结 A 论文出处 论文题目:RankRAG:Unifying Context Ranking…...

基于stm32F10x 系列微控制器的智能电子琴(附完整项目源码、详细接线及讲解视频)

注:文章末尾网盘链接中自取成品使用演示视频、项目源码、项目文档 所用硬件:STM32F103C8T6、无源蜂鸣器、44矩阵键盘、flash存储模块、OLED显示屏、RGB三色灯、面包板、杜邦线、usb转ttl串口 stm32f103c8t6 面包板 …...

SpringCloud优势

目录 完善的微服务支持 高可用性和容错性 灵活的配置管理 强大的服务网关 分布式追踪能力 丰富的社区生态 易于与其他技术栈集成 完善的微服务支持 Spring Cloud 提供了一整套工具和组件来支持微服务架构的开发,包括服务注册与发现、负载均衡、断路器、配置管理等功能…...

联邦学习带宽资源分配

带宽资源分配是指在网络中如何合理分配有限的带宽资源,以满足各个通信任务和用户的需求,尤其是在多用户共享带宽的情况下,如何确保各个设备或用户的通信需求得到高效且公平的满足。带宽是网络中的一个重要资源,通常指的是单位时间…...