Appium 安卓环境的配置

news2024/10/4 10:32:29

目录

前言:

环境准备

写个脚本玩玩


前言:

在使用Appium进行安卓自动化测试之前,需要配置相应的安卓环境。

环境准备

为了避免走弯路,我们先要确保三点:

  • Android SDK API >= 17 (Additional features require 18)
  • 环境变量 ANDROID_HOME 并确保 $ANDROID_HOME/platform-tools 和 $ANDROID_HOME/tools 包含在 PATH 里。比如:

    export ANDROID_HOME="/Applications/adt-bundle-mac-x86_64-20130729/sdk"
    export PATH=$PATH:$ANDROID_HOME/platform-tools:$ANDROID_HOME/tools
    
  • 如果用实体机测试,请确保系统是 4.1 以上的。

否则的话,你会遇到诸如此类的问题:

2.x 的真机

info: "/Applications/adt-bundle-mac-x86_64-20130729/sdk/platform-tools/adb" -s S5830f63efdb6 shell uiautomator runtest AppiumBootstrap.jar -c io.appium.android.bootstrap.Bootstrap
info: [ADB STDOUT] uiautomator: permission denied

4.0.x 的真机

info: "/Applications/adt-bundle-mac-x86_64-20130729/sdk/platform-tools/adb" -s HT1B4V803001 shell uiautomator runtest AppiumBootstrap.jar -c io.appium.android.bootstrap.Bootstrap
info: [ADB STDOUT] /system/bin/sh: uiautomator: not found

如果使用的是 Appium.dmg 安装的 Appium,那要设置 custom android sdk, 如图

这样 Appium 启动的时候可以使用 adb android 等命令。

这三点都做到的情况下,我们要看下 devices 的情况,因为运行 appium 测试脚本前要确保,devices 连接上了。所以要做的是:启动模拟器或者连上手机

  • 模拟器

    Make sure that hw.battery=yes in your AVD's config.ini.
    比如我的 AVD 叫 appium, 所以我就要去编辑 $HOME/.android/avd/appium.avd/config.ini 文件确保 hw.battery=yes

  • 真机

    Mac 上只要连接上 USB 就可以了, 无需安装驱动。不过我遇到了一个问题,海信的手机没法识别出来。
    这需要在 $HOME/.android/adb_usb.ini 里添加 vender id。

    ➜  ~  cat .android/adb_usb.ini
    # ANDROID 3RD PARTY USB VENDOR ID LIST -- DO NOT EDIT.
    # USE 'android update adb' TO GENERATE.
    # 1 USB VENDOR ID PER LINE.
    0x109b # 海信手机的 VENDOR ID + 0x
    

然后我们运行 adb devices -l,

➜  ~  adb devices -l
List of devices attached
emulator-5554          device product:sdk model:sdk device:generic
e912s                  device usb:24100000

P.S Appium 支不支持多个 device 还没有定论。

我们关掉模拟器,因为模拟器实在太慢了。(在模拟器上运行过 sample code, 都是能正常运行的。)

写个脚本玩玩

其实 sample code 里面的代码已经非常丰富了。就照搬一个吧。


# -*- coding: utf-8 -*-
import os
import glob
import unittest
from selenium import webdriver


class TestMyGame(unittest.TestCase):

    def setUp(self):
        app = os.path.abspath(glob.glob(os.path.dirname(__file__)
                                        + './*.apk')[0])
        desired_caps = {
            'device': 'appium',
            'app': app,
            'app-package': 'com.example.android.contactmanager',
            'app-activity': '.ContactManager'
        }

        self.driver = webdriver.Remote('http://localhost:4723/wd/hub',
                                       desired_caps)

    def test(self):
        driver = self.driver
        el = driver.find_element_by_name("Add Contact")
        el.click()
        textfields = driver.find_elements_by_tag_name("textfield")
        textfields[0].send_keys("My Name")
        textfields[2].send_keys("someone@somewhere.com")
        driver.find_element_by_name("Save").click()

    def tearDown(self):
        self.driver.quit()

if __name__ == '__main__':
    unittest.main()


ContactManager 是 android sample 里面的代码。 大家在安装 adt tool 的时候,可以获取。
我把 build 出来的 apk 和下面这个脚本放在一个目录下,然后运行。

在使用模拟器的时候,除了慢,工作的非常好。但是在海信的真机上就悲剧了。 因为在聚焦输入框的时候,弹出了搜狐输入法,干扰了 send_key 方法。github 上有 issue 记录,可惜没有好的解决方法。

  作为一位过来人也是希望大家少走一些弯路

在这里我给大家分享一些自动化测试前进之路的必须品,希望能对你带来帮助。

(软件测试相关资料,自动化测试相关资料,技术问题答疑等等)

相信能使你更好的进步!

点击下方小卡片

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

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

相关文章

14matlab数理统计 多项式的求根和根据根求多项式(matlab程序)

1.简述 分享一下通过多种不同的方法计算多项式的根。 数值根 使用代换法求根 特定区间内的根 符号根 数值根 roots 函数用于计算系数向量表示的单变量多项式的根。 例如,创建一个向量以表示多项式 x2−x−6,然后计算多项式的根。 p [1 -1 -6]; r …

利用Python和Selenium编程,实现定时自动检索特定网页,发现特定网页内容发生变化后,向管理员发送提醒邮件(一)

一、项目需求 要求爬取某单位网站,登录后台查看是否有新增“网友提问”,如果有新的提问,向特定邮箱发出提醒邮件。 二、项目分析 (一)判断是否可用爬虫爬取相关内容 首先查看该网站的robots.txt文件,发现…

SpringCloud(四)Hystrix服务降级、熔断、监控页面

一、服务熔断 官方文档:https://cloud.spring.io/spring-cloud-static/spring-cloud-netflix/1.3.5.RELEASE/single/spring-cloud-netflix.html#_circuit_breaker_hystrix_clients 我们知道,微服务之间是可以进行相互调用的,那么如果出现了…

YUM报错:Could not retrieve mirrorlist

​​​​​​背景说明 ESXI新安装CentOS7,无法执行yum命令 报错内容解决方案 1.报错说明:问题在于yum无法获取CentOS的软件仓库地址,导致无法找到合法的baseurl2.检查网络连接:确保服务器可以访问互联网,以及能够解析D…

C++ CEF库 源码编译及使用(VS2019)

源码编译 官网下载源码 CEF Automated Builds

linux下mmdetection安装

linux下mmdetection安装 使用 MIM 安装 MMEngine 和 MMCV。安装 MMDetection 前提条件是配置了pytorch18的linux环境 参考流程:配置pycharm环境 拷贝pycharm环境为mmdet conda create -n mmdet --clone torch18进入 conda activate mmdet使用 MIM 安装 MMEngine …

量化基础 PTQ QAT

简介 固定bit下的量化始终无法在Accuracy和 (FLOPs & Parameters)之间达到一个非常细粒度的trade-off,所以就需要混合精度量化(Mixed-Precision Quantization, MPQ)来对模型实现进一步的高效压缩 混合精度量化区别于混合精度训练这个概念,后者指的是…

c基本数据类型

关键字 charshort intintlong intfloatdouble 常量和变量 常量:在程序运行过程中,其值不可改变的量变量:其值可以改变的量称为变量 字符数据 字符常量 直接常量:用单引号括起来,如:‘a’,‘b’.转义字…

7.4Java EE——Bean的作用域

一、singleton作用域 Spring支持的5种作用域 作用域名城 描述 singleton 单例模式。在单例模式下,Spring 容器中只会存在一个共享的Bean实例, 所有对Bean的请求,只要请求的id(或name)与Bean的定义相匹配&#xff0…

msvc2017x64编译器编译项目报错”编译器的堆空间不足“错误 的解决方法

开发日常软件的时候,因为项目较大,模块较多,编译时,报错”编译器编译空间不足“,且常规方法无法消除的问题。有 opengl模块 占用内存大 尝试 尝试1   按照常规的,在pro里面加大资源配置: CONF…

记录一下uniapp开发中遇到的一些问题

概述 最近码代码的时候遇到一些问题,这里自己记录总结一下,供大家参考,说得不对的地方希望大家指出 大概介绍一下我用到的内容 用HbuilderX新建一个uni-app项目 ,vue版本选的2,爬坑轻松一点移动端ui框架选了uView&…

C 知识积累 回车与换行 Linux C 语法分析

目录 回车与换行一.知其然二.知其所以然 关键字,操作符和函数区别1:关键字2:操作符3:函数 命令行参数argv原码补码补码加法 Linux C 语法分析结构体指针类型函数宏定义其他 const语法整理 回车与换行 一.知其然 \n是换行&#x…

智能电表远程抄表系统原理

智能电表远程抄表系统是现代智能电网建设的重要组成部分,它利用物联网技术实现电表数据的远程采集、传输和处理,提高了电力公司的抄表效率,同时也为用户提供了更加便捷、准确的用电服务。本文将从远程智能电表抄表系统的工作原理、特点、应用…

KDE项目近日发布了KDE Frameworks 5.108

导读KDE项目近日发布了KDE Frameworks 5.108,作为这个开源软件套件的最新版本,它由80多个Qt附加库组成,为KDE Plasma桌面环境和KDE应用程序提供常用功能。 KDE Frameworks 5.108在这里修复了Plasma桌面崩溃的问题,该问题发生在用中…

Openlayers layer 基础及重点内容讲解

图层就像是含有文字或图形等元素的图片,一张张按顺序叠放在一起,组合起来形成页面的最终效果。 在 openlayers 中,图层是使用 layer 对象表示的,主要有 WebGLPoints Layer、热度图(HeatMap Layer)、图片图层(Image Layer)、切片图层(Tile Layer)和 矢量图层(Vector Layer…

ShardingSphere分库分表实战之水平分表

🚀 ShardingSphere 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜&…

科东软件入选“四化”赋能重点平台

科东软件Intewell工业嵌入式实时操作系统成功入选广州市“四化”赋能重点平台名单 2023年7月14日,广州市工业和信息化局公布广州市“四化”赋能重点平台名单(第二批),科东软件凭借国产化技术创新优势、成熟的数字化转型方案&#…

与 AI 数智助理 Kyligence Copilot 携手,共同挖掘数据的无限潜能

Kyligence 用户大会近日在上海顺利召开,会上 Kyligence 重磅发布了 AI 数智助理 Kyligence Copilot(预览版)。生成式 AI(Generative AI)正带来人机交互方式的革命,并将改变人类使用数据的习惯,K…

MyBatis学习笔记——1

MyBatis学习笔记——1 一、MyBatis概述1.1、框架1.2、三层架构1.4、了解MyBatis1.4、ORM思想 二、MyBatis入门程序2.1、Mybatis程序的编写2.2、MyBatis入门程序的一些小细节2.3、MyBatis事务管理机制深度解析2.4、在开发中junit是如何使用的2.5、Mybatis集成日志框架logback 三…

3.9 Bootstrap 分页

文章目录 Bootstrap 分页分页(Pagination)默认的分页分页的状态分页的大小 翻页(Pager)默认的翻页对齐的链接翻页的状态 分页 Bootstrap 分页 本章将讲解 Bootstrap 支持的分页特性。分页(Pagination)&…