智能终端界面自动化测试操作工具 - 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()

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

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

相关文章

网络协议--TCP的成块数据流

20.1 引言 在第15章我们看到TFTP使用了停止等待协议。数据发送方在发送下一个数据块之前需要等待接收对已发送数据的确认。本章我们将介绍TCP所使用的被称为滑动窗口协议的另一种形式的流量控制方法。该协议允许发送方在停止并等待确认前可以连续发送多个分组。由于发送方不必…

SpringMVC Day02 : 请求方式

前言 欢迎阅读 Spring MVC 系列教程的第二篇文章!在上一篇文章中,我们介绍了 Spring MVC 的基本概念和使用方法。今天,我们将深入探讨 Spring MVC 中不同的请求方式,以及如何在你的应用程序中正确地处理它们。 在 Web 开发中&am…

nlp与知识图谱代码解读_词嵌入

目录 词嵌入简单原理代码案例解读专业原理介绍场景 词嵌入 简单原理 可以使用一些比喻和生活中的例子: 老师: 你们还记得玩乐高积木的时候,每个积木块代表了一个特定的事物或形状吗?现在,想象一下,每个词…

day01:数据库DDL

一:基础概念 数据库:存储数据的仓库,数据是有组织的进行存储 数据库管理系统:操纵和管理数据库的大型软件 SQL:操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准 关系图 二:数据模型 关系型数据库:建…

vue的双向绑定的原理,和angular的对比

目录 前言 Vue的双向绑定用法 代码 Vue的双向绑定原理 Angular的双向绑定用法 代码 Angular的双向绑定原理 理解 图片 关于Vue的双向绑定原理和与Angular的对比,我们可以从以下几个方面进行深入探讨: 前言 双向绑定是现代前端框架的核心特性之…

经典卷积神经网络 - ResNet

ResNet是一种残差网络,咱们可以把它理解为一个子网络,这个子网络经过堆叠可以构成一个很深的网络。 我们一直在加深神经网络,但是加深不一定只会带来好处。 残差块 串联一个层改变函数类,我们希望能扩大函数类残差块加入快速通…

计算机网络【CN】子网划分与子网掩码

一个子网定义(X.X.X.X/n) 子网掩码为 n 个 1,32-n 个 0包含的 IP 地址数:232−n 主机号全 0 表示本网段主机号全 1 表示网段的广播地址可分配的 IP 地址数 :232−𝑛−2 子网划分原则 满足子网定义子网𝐴1…𝐴&#x…

分布式合集

1.Spring 的事务 Spring框架为应用程序提供了强大的事务管理功能。它通过将事务逻辑与业务逻辑分离,使得开发者可以专注于业务逻辑的实现,而不必过多关注事务的管理。Spring事务的核心是基于AOP(面向切面编程)的声明式事务管理&a…

iOS插件

把平时看到或项目用到的一些插件进行整理,文章后面分享一些不错的实例,若你有其它的插件欢迎分享,不断的进行更新; 一:第三方插件 1:基于响应式编程思想的oc 地址:https://github.com/ReactiveCocoa/Rea…

Three.js 基础纹理贴图

本文简介 带尬猴,我嗨德育处主任 尽管 Three.js 文档已经比较详细了,但对于刚接触 Three.js 的工友来说,最麻烦的还是不懂如何组合。Three.js 的功能实在太多了,初学者很容易被大量的新概念冲晕。 本文主要讲解入门 Three.js 必…

JVM基础:字节码文件详解①

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、Java虚拟机的组成二、字节码文件的组成2.1 为什么要了解字节码文件?2.2 如何“窥探”字节码文件的奥秘?2.2.1 使用工具打开字节码文件2.…

进程间通信(匿名管道、命名管道、消息队列、共享内存、信号量、信号、Socket)

文章目录 一、什么是进程间通信二、管道1.匿名管道(pipe)a).创建匿名管道b).管道的读写规则c).匿名管道的特点 2.有名管道(FIFO)a).创建命名管道b).命名管道的特点c).基于命名管道的进程间通信(服务端/客户端) 三、消息队列四、共享内存1.什么是共享内存…

react高阶成分(HOC)例子效果

使用React函数式组件写了一个身份验证的一个功能,示例通过高阶组件实现的一个效果展示: import React, { useState, useEffect } from react;// 定义一个高阶组件,它接受一个组件作为输入,并返回一个新的包装组件 const withAuth…

(C++进阶)正则表达式

目录 一、概念 1、简介 2、字符规则 二、常用函数 1、std::regex_match 2、std::regex_search 3、std::regex_replace 三、std::smatch 一、概念 1、简介 正则表达式(Regular Expression),通常简写为RegExp或Regex,是一种…

装了mac os 14.0 sonoma 在腾讯会议投屏时候,无法设置麦克风权限问题

愿意:界面上直接空白的,无法手动或自动弹出要配置授权的软件 解决思路: 给 TCC.db 增加1条权限记录 添加到数据库里 /usr/bin/sqlite3 ~/Library/Application\ Support/com.apple.TCC/TCC.db "INSERT INTO main.access (service, cli…

windows PC virtualBox 配置

效果: oracle vitualbox 可以访问通PC主机,可以访问外网: 注意,如果docker0网络地址,和PC主机的网络地址冲突了,需要变更docker的网络地址: root/home/mysqlPcap/anti-tamper $ cat /etc/docker/daemon.js…

YOLOv5算法改进(21)— 添加CA注意力机制 + 更换Neck网络之BiFPN + 更换损失函数之EIoU

前言:Hello大家好,我是小哥谈。通过上节课的学习,相信同学们一定了解了组合改进的核心。本节课开始,就让我们结合论文来对YOLOv5进行组合改进(添加CA注意力机制+更换Neck网络之BiFPN+更换损失函数之EIoU),希望同学们学完本节课可以有所启迪,并且后期可以自行进行YOLOv5…

GPT与创作:革命性的合作还是失业的噩梦?

作为一个从事互联网行业的从业者,我经常听到关于GPT的争议性言论。百度的​1​、CSDN的​2​,以及各种AI助手,这些工具在创作领域掀起了一场革命。但是,人们担心广泛使用GPT是否会导致人们失业,甚至挑战互联网公司的存…

【MySQL数据库重点】第二节:MySQL基础知识(基本操作)

目录 一:数据库的操作 1.显示数据库 2.创建数据库 3.使用数据库 4.删除数据库 二:常用数据类型 1.数值类型:整型和浮点型 2.字符串类型 3.日期类型 三:表的操作 1.查看表结构 2.创建表 3.删除表 一:数据库…

wait和sleep是否会触发锁的释放以及 CPU 资源的释放?

wait和sleep Object.wait()方法,会释放锁资源以及 CPU 资源。 Thread.sleep()方法,不会释放锁资源,但是会释放 CPU 资源。 wait 方法 wait()方法是让一个线程进入到阻塞状态,而这个方法必须要写在一个Synchronized 同步代码块里面…