Appium+python自动化(七)- 认识Appium- 上

news2025/6/4 17:17:08

简介

 经过前边的各项准备工作,终于才把appium搞定。

一、appium自我介绍    

       appium是一款开源的自动化测试工具,可以支持iOS和安卓平台上的原生的,基于移动浏览器的,混合的应用(APP)。

1、 使用appium进行自动化测试的好处

       在不同平台中使用了标准的自动化APIs,所以在跨平台时,不需要重新编译或者修改自己的应用。

       支持Selenium WebDriver支持的所有语言,如java、Object-C、JavaScript、Php、Python、Ruby、C#、Clojure,或者Perl语言,更可以使用Selenium WebDriver的Api。Appium支持任何一种测试框架.Appium实现了真正的跨平台自动化测试。主要介绍Python的用法

2、Appium架构

      appium是一个用Node.js编写的HTTP server,它创建、并管理多个 WebDriver sessions 来和不同平台交互,如 iOS ,Android等等. 

      appium开始一个测试后,就会在被测设备--手机上启动一个 server ,监听来自 Appium server的指令. 每种平台像 iOS 和Android都有不同的运行、和交互方式。所以appium会用某个桩程序“侵入”该平台,并接受指令,来完成测试用例的运行。

二、appium实战技艺(以真机<appium>为例)

这里是给大家列举的一些appium的指法(命令)   

    aapt dump badging D:\XXX.apk  获取安装包的所有信息

       adb devices(查看手机是否连接到电脑)

       adb shell pm list packages:列出所有的包名,找到所查看包的包名。

       adb shell dumpsys package com.android.XXX:查看某个包的具体信息

       其它:

       adb devices:查看Android设备是否连接到电脑。

       adb shell dumpsys activity:查看当前运行的是哪个activity,运行的一些进程等

       adb shell dumpsys activity activities

       adb shell pm list packages:列出所有的包名。

       adb shell dumpsys package:列出所有的安装应用的信息

       adb shell dumpsys package com.android.XXX:查看某个包的具体信息

       adb shell dumpsys activity | grep mFocusedActivity:查看当前resume的是哪个activity

       adb logcat | grep ActivityManager:查看当前正在运行的Activity

       adb logcat | grep Displayed:查看当前正在运行的Activity

1、 连接真机或者模拟器 -- 这里是appium和手机如何接触连接

1)连接手机时注意选择手机的开发者模式,cmd打开命令行窗口,输入adb devices获取到设备的deviceName

2)启动模拟器,连接模拟器AVD(Google自带),cmd打开命令行窗口,输入adb devices获取到设备的deviceName

3)启动模拟器,连接夜神模拟器,要注意先输入  nox_adb.exe connect 127.0.0.1:62001(相当于插入数据线),再继续,输入adb devices

2、获取Activity

1)cmd打开命令行窗口,输入aapt dump badging D:\XXX.apk(xxx指安装包名,D:\是指路径)直接查看需要测试app安装包的具体信息。

2)标记的就是包名,继续往下拖拽,可以找到activity的信息。

       这里的红圈就可以看到activity的信息。这两个值,在appium脚本中都需要提前获取到,所以需要提前介绍这个获取方法。如果你觉得在cmd里面不好看,你可以把cmd信息导出到一个txt文件,例如 aapt dump badging shoujibaidu.apk > 123.txt 回车后,会在桌面生成一个123.txt文件,你可以打开,通过查询找到这些信息。通过上面的方法,只要我们有android SDK环境,那么我们就可以获取到任意一个包的包名和Activity信息。

3、启动Appium 

     1)  双击桌面上的appium图标打开,点击Android Settings进行设置。

2)将上方获取到的真机的deviceName填入 ,选择platformName和platformVersion

 3)将服务的session配置成可重写(非必要的配置)

4)配置好后,点击右上角的启动按钮进行启动即可。

5)启动成功,下一步该写代码了。

4、将上方得到的设备和安装包信息写入脚本中

1 # coding=utf-8
10 # 1.导入模块
11 from appium import webdriver
12 import time
13 desired_caps = {}
14 desired_caps['platformName'] = 'Android'   #android的apk还是IOS的ipa
15 desired_caps['platformVersion'] = '8.0'  #android系统的版本号
16 desired_caps['deviceName'] = 'emulator-5554'    #手机设备名称,通过adb devices  查看
17 desired_caps['appPackage'] = 'com.taobao.taobao'  #apk的包名
18 desired_caps['appActivity'] = 'com.taobao.tao.welcome.Welcome'  #apk的launcherActivity
19 # desired_caps['unicodeKeyboard'] = True   #使用unicodeKeyboard的编码方式来发送字符串
20 # desired_caps['resetKeyboard'] = True   #将键盘给隐藏起来

5、查找app定位元素

1)启动Android SDK中的一个神器可以查找app的定位元素进行脚本的编写。在Android SDK中的tools中有一个uiautomatorviewer.bat,如下图所示:

2)点击uiautomatorviewer.bat进行启动,左上角一共四个按钮,作用分别是打开本地文件(open)、Device Screenshot (uiautomator dump)dump页面、dump压缩格式的页面、保存;启动后点击左上角第三个图标进行真机界面的呈现。

3)选择设备模拟器或者真机

4)第一次连接会比较慢,耐心等候一下,连接好后以后就快了。我这里以百度界面为例。

这是连接夜神模拟器后的界面显示。这样就可以根据id、class、text等定位元素进行定位了。

1 driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
2 driver.find_element_by_id("index-kw").click()
3 driver.find_element_by_id("index-kw").clear()
4 driver.find_element_by_id("index-kw").send_keys('appium测试')
5 
6 7 driver.find_element_by_id("index-bn").click()
8 
9 driver.quit()

三、以淘宝APP为实例

1、实例代码

2、代码运行结果

3、appium运行结果

4、模拟器运行结果

5、参考代码

1 # coding=utf-8
10 # 1.导入模块
11 from appium import webdriver
12 import time
13 desired_caps = {}
14 desired_caps['platformName'] = 'Android'   #android的apk还是IOS的ipa
15 desired_caps['platformVersion'] = '8.0'  #android系统的版本号
16 desired_caps['deviceName'] = '127.0.0.1:62001'    #手机设备名称,通过adb devices  查看
17 desired_caps['appPackage'] = 'com.taobao.taobao'  #apk的包名
18 desired_caps['appActivity'] = 'com.taobao.tao.welcome.Welcome'  #apk的launcherActivity
19 #desired_caps['unicodeKeyboard'] = True   #使用unicodeKeyboard的编码方式来发送字符串
20 #desired_caps['resetKeyboard'] = True   #将键盘给隐藏起来
21 driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps) #启动服务器地址,后面跟的是手机信息
22 # 休眠五秒等待页面加载完成
23 time.sleep(5)
24 
25 driver.find_element_by_id("com.taobao.taobao:id/home_searchedit").click()
26 time.sleep(4)
27 driver.find_element_by_id("com.taobao.taobao:id/searchEdit").clear()
28 time.sleep(3)
29 driver.find_element_by_id("com.taobao.taobao:id/searchEdit").send_keys("琵琶")
30 time.sleep(2)
31 driver.find_element_by_id("com.taobao.taobao:id/searchbtn").click()
32 
33 # driver.quit()

至此运行脚本即可进行自动化测试。

小结

1、adb.exe connect 127.0.0.1:62001nox_adb.exe connect 127.0.0.1:62001的效果是一样的,前提就是你已经配置好系统变量和解决了版本冲突。

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

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

相关文章

模块联邦:更快的微前端方式!

什么是模块联邦 在前端项目中&#xff0c;不同团队之间的业务模块可能有耦合&#xff0c;比如A团队的页面里有一个富文本模块&#xff08;组件&#xff09;&#xff0c;而B团队 的页面恰好也需要使用这个富文本模块。 传统模式下&#xff0c;B团队只能去抄A团队的代码&#x…

前端基础学习html+css+js

HTML 区块 div标签&#xff0c;块级标签 span包装小部分文本&#xff0c;行内元素 表单 CSS css选择器 css属性 特性blockinlineinline-block是否换行✅ 换行❌ 不换行❌ 不换行可设置宽高✅ 支持❌ 不支持✅ 支持常见元素div容器 p段落 h标题span文本容器 a超链接img图片…

手机打电话时将对方DTMF数字转为RFC2833发给局域网SIP坐席

手机打电话时将对方DTMF数字转为RFC2833发给局域网SIP坐席 --局域网SIP坐席呼叫 上一篇&#xff1a;手机打电话时由对方DTMF响应切换多级IVR语音菜单&#xff08;完结&#xff09; 下一篇&#xff1a;安卓App识别手机系统弹授权框包含某段文字-并自动点击确定按钮 一、前言 …

SAP Business One:无锡哲讯科技助力中小企业数字化转型的智慧之选

数字化转型&#xff0c;中小企业的必经之路 在当今竞争激烈的商业环境中&#xff0c;数字化转型已不再是大型企业的专利&#xff0c;越来越多的中小企业开始寻求高效、灵活的管理系统来优化业务流程、提升运营效率。作为全球领先的企业管理软件&#xff0c;SAP Business One…

小型语言模型:为何“小”才是“大”?

当说到人工智能&#xff08;AI&#xff09;的时候&#xff0c;大家通常会想到那些拥有数十亿参数的超大型语言模型&#xff0c;它们能做出一些令人惊叹的事情。 厉害不厉害&#xff1f;绝对厉害&#xff01; 但对于大多数企业和开发者来说&#xff0c;实用吗&#xff1f;可能…

秋招Day12 - 计算机网络 - 网络综合

从浏览器地址栏输入URL到显示网页的过程了解吗&#xff1f; 从在浏览器地址栏输入 URL 到显示网页的完整过程&#xff0c;并不是一个单一的数据包从头到尾、一次性地完成七层封装再七层解析的过程。 而是涉及到多次、针对不同目的、与不同服务器进行的、独立的网络通信交互&a…

QT-JSON

#include <QJsonDocument>#include <QJsonObject>#include <QJsonArray>#include <QFile>#include <QDebug>void createJsonFile() {// 创建一个JSON对象 键值对QJsonObject jsonObj;jsonObj["name"] "John Doe";jsonObj[…

IP 风险画像技术略解

IP 风险画像的技术定义与价值 IP 风险画像通过整合 IP 查询数据与 IP 离线库信息&#xff0c;结合机器学习算法&#xff0c;为每个 IP 地址生成多维度风险评估模型。其核心价值在于将传统的静态 IP 黑名单升级为动态风险评估体系&#xff0c;可实时识别新型网络威胁&#xff0…

秋招Day12 - 计算机网络 - 基础

说一下计算机网络体系结构 OSI七层模型&#xff0c;TCP/IP四层模型和五层体系结构 说说OSI七层模型&#xff1f; 应用层&#xff1a;最靠近用户的层&#xff0c;用于处理特定应用程序的细节&#xff0c;提供了应用程序和网络服务之间的接口。表示层&#xff1a;确保从一个系…

【网络安全】——Modbus协议详解:工业通信的“通用语言”

目录 一、初识Modbus&#xff1a;工业通信的基石 1.1 协议全称 1.2 协议简史 二、核心特性解析 2.1 架构设计 2.2 典型应用场景 三、协议族全景图 3.1 协议栈分类 3.2 版本演进对比 四、协议报文深度解析 4.1 Modbus RTU帧结构 4.2 Modbus TCP报文 五、通信机制实…

【GlobalMapper精品教程】095:如何获取无人机照片的拍摄方位角

文章目录 一、加载无人机照片二、计算方位角三、Globalmapper符号化显示方向四、arcgis符号化显示方向一、加载无人机照片 打开软件,加载无人机照片,在GLobalmapperV26中文版中,默认显示如下的航线信息。 关于航线的起止问题,可以直接从照片名称来确定。 二、计算方位角 …

小提琴图绘制-Graph prism

在 GraphPad Prism 中为小提琴图添加显著性标记(如*P<0.05)的步骤如下: 步骤1:完成统计检验 选择数据表:确保数据已按分组排列(如A列=Group1,B列=Group2)。执行统计检验: 点击工具栏 Analyze → Column analyses → Mann-Whitney test(非参数检验,适用于非正态数…

[GHCTF 2025]SQL???

打开题目在线环境&#xff1a; 先尝试注入&#xff1a; id1;show databases; 发现报错&#xff0c;后来看了wp才知道这个题目是SQLite注入。 我看的是这个师傅的wp: https://blog.csdn.net/2401_86190146/article/details/146164505?ops_request_misc%257B%2522request%255Fid…

【科研绘图系列】R语言绘制GO term 富集分析图(enrichment barplot)

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍加载R包数据下载导入数据数据预处理画图code 2code 3系统信息介绍 本文介绍了使用R语言绘制GO富集分析条形图的方法。通过加载ggplot2等R包,对GO term数据进行预处理,包括p值转换…

Laravel单元测试使用示例

Date: 2025-05-28 17:35:46 author: lijianzhan 在 Laravel 框架中&#xff0c;单元测试是一种常用的测试方法&#xff0c;它是允许你测试应用程序中的最小可测试单元&#xff0c;通常是方法或函数。Laravel 提供了内置的测试工具PHPUnit&#xff0c;实践中进行单元测试是保障代…

Kotlin委托机制使用方式和原理

目录 类委托属性委托简单的实现属性委托Kotlin标准库中提供的几个委托延迟属性LazyLazy委托参数可观察属性Observable委托vetoable委托属性储存在Map中 实践方式双击back退出Fragment/Activity传参ViewBinding和委托 类委托 类委托有点类似于Java中的代理模式 interface Base…

基于 HT for Web 轻量化 3D 数字孪生数据中心解决方案

一、技术架构&#xff1a;HT for Web 的核心能力 图扑软件自主研发的 HT for Web 是基于 HTML5 的 2D/3D 可视化引擎&#xff0c;核心技术特性包括&#xff1a; 跨平台渲染&#xff1a;采用 WebGL 技术&#xff0c;支持 PC、移动端浏览器直接访问&#xff0c;兼容主流操作系统…

精英-探索双群协同优化(Elite-Exploration Dual Swarm Cooperative Optimization, EEDSCO)

一种多群体智能优化算法&#xff0c;其核心思想是通过两个分工明确的群体——精英群和探索群——协同工作&#xff0c;平衡算法的全局探索与局部开发能力&#xff0c;从而提高收敛精度并避免早熟收敛。 一 核心概念 在传统优化算法&#xff08;如粒子群优化、遗传算法&#xf…

解决Ubuntu20.04上Qt串口通信 QSerialPort 打开失败的问题

运行Qt串口通信 open(QIODevice::ReadWrite) 时&#xff0c;总是失败。 1、打印失败原因 QString QSerialHelper::openSerail() {if(this->open(QIODevice::ReadWrite) true){return this->portName();}else{return "打开失败";//return this->errorStri…

设计模式——观察者设计模式(行为型)

摘要 本文详细介绍了观察者设计模式&#xff0c;包括其定义、结构、实现方式、适用场景以及实战示例。通过代码示例展示了如何在Spring框架下实现观察者模式&#xff0c;以及如何通过该模式实现状态变化通知。同时&#xff0c;对比了观察者模式与消息中间件在设计理念、耦合程…