智能终端界面自动化测试操作工具 - Appium常见用法
1. Appium 是什么可以做什么?
Appium 是一款开源的移动应用自动化测试框架,用于测试移动应用程序的功能和用户界面。它支持多种移动平台,包括 Android 和 iOS,可以使用多种编程语言进行脚本编写,如 Python、Java、JavaScript 等。
简单理解,Selenium是用于桌面系统的Web界面自动化测试框架,Appium是在智能终端,如Android Apple iPhone iPad等手机设备上,自动访问控制手机,在相关App上进行自动化测试操作。
2. Appium 依赖软件包安装
在使用 Appium 进行 Android 自动化测试之前,需要安装以下依赖软件和工具:
-
Java Development Kit (JDK): Appium 是基于 Java 开发的,因此需要安装 JDK。你可以从 Oracle 官方网站下载适用于你的操作系统的 JDK 版本,并按照官方指南进行安装。
-
Android SDK: Android SDK 提供了 Android 平台的开发工具和 API,用于构建和运行 Android 应用程序。你可以从 Android 开发者网站下载 Android SDK,并按照指南进行安装。
-
Node.js: Appium 是使用 Node.js 编写的,因此需要安装 Node.js 运行环境。你可以从 Node.js 官方网站下载适用于你的操作系统的 Node.js 版本,并按照官方指南进行安装。
-
Appium Server: Appium Server 是 Appium 的核心组件,用于驱动设备或模拟器,并提供与移动应用的通信接口。你可以从 Appium 官方网站下载 Appium Server,并按照指南进行安装。
-
Appium Python 客户端库: 如果你选择使用 Python 编写 Appium 脚本,需要安装 Appium Python 客户端库。你可以使用 pip 命令在命令行中安装 Appium Python 客户端库,如下所示:
pip install Appium-Python-Client
- Android 虚拟设备或真机: 为了运行和测试 Android 应用程序,你需要准备一个 Android 虚拟设备(模拟器)或连接一台 Android 真机设备,并确保设备已启用开发者选项和 USB 调试功能。
确保安装和配置正确后,你将能够开始编写和运行 Appium 脚本来自动化测试 Android 应用程序。
3. 启用Android设备的开发者选项和USB调试功能
开始编写自动化测试脚本之前,需要连接手机,启用 Android 设备的开发者选项和 USB 调试功能:
-
打开设备的设置(Settings):在 Android 设备上,滑动下拉通知栏,然后点击右上角的设置图标,或者在应用程序列表中找到并点击设置应用程序图标。
-
查找设备信息(About Phone 或 About Device):在设置中,向下滚动或浏览列表,找到 “关于手机” 或 “关于设备” (可能会有轻微的差异),然后点击进入该选项。
-
查找设备版本号:在设备信息中,查找 “版本号” 或 “软件信息”。通常,你需要点击 “版本号” 字段七次或更多次,直到出现一个提示表示开发者选项已经启用。
-
返回设置并找到开发者选项:返回到设置界面,在设置列表的末尾或在其他选项下,你将看到 “开发者选项”。点击进入该选项。
-
启用开发者选项:在开发者选项页面,找到并点击开关按钮或复选框,将其从 “关闭” 改为 “打开” 或 “启用”。这将启用开发者选项。
-
启用 USB 调试:在开发者选项页面,滚动或浏览列表,找到 “USB 调试” 选项,并勾选复选框以启用 USB 调试功能。
完成上述步骤后,你的 Android 设备将启用开发者选项和 USB 调试功能。现在你可以使用 Appium 或其他工具与设备进行连接,并进行 Android 自动化测试。请注意,不同的 Android 设备可能会有略微不同的界面和选项标签,但基本上遵循相似的步骤。
4. Appium常见用法
当使用 Appium 和 Python 进行移动应用自动化测试时,以下是一些常见的代码示例,涵盖元素定位、操作和断言等方面:
- 启动应用程序并连接到 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)
- 通过 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()
- 通过 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')
- 滑动屏幕:
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()
- 断言元素的文本内容:
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恢复,它们都需要归档日志,它们关键的差别是…...
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…...
大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...
大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...
《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...
Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
