第一次appium自动化
今天,自己独自做了一下app自动化,从搭环境到写好一个脚本花了很长时间。用的主要环境是python3.7+appium+sdk+夜神模拟器。appium环境搭建较于复杂,这里就不累述,参考百度教程。
首先先导入模块 from appium import webdriver,获取驱动对象。驱动对象可以帮助我们完成,脚本跟手机之间的交互操作。
然后声明手机驱动对象 driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps) 中间跟了2个参数http://127.0.0.1:4723/wd/hub 代表,appium的地址和端口。wd是指的webdriver对象,hub是中心节点。desired_caps是跟的是手机启动参数,参数及其含义如下:
desired_caps = {
"platformName":"Android", #平台名称
"platformVersion":"5.1", #系统版本号
"deviceName":"127.0.0.1:62001", #设备号,用adb devices查看
"appPackage":"com.xk.span.zutuan", #apk的包名 包名和启动名可以用这个命令查看:1,abd shell 进入shell目录下,2dumpsys activity | grep mFocusedActivity
"appActivity":".module.main.ui.activity.MainActivity" #apk启动名或者叫启动的界面
}
包名和启动界面获取方式:先打开手机中你要获取包名的APP,用adb命令查看:1,abd shell 进入shell目录下,2,dumpsys activity | grep mFocusedActivity 如下图:
参数以字典的形式组合起来,中间逗号隔开。定位元素先打开要操作app,然后在打开定位元素的工具,工具名为这个uiautomatorviewer.bat。安装了sdk就自带这个工具,去这个目录下找D:\software\SDK\android-sdk-windows\tools。具体以你的安装sdk目录位准。打开长这样。下图:
其他没啥好说的了,就是定位元素咯,有个注意事项,运行脚本脚本前,打开你appium服务端,然后检查下设备有没有连接上,可以帮你省下许多报错。上菜鸟代码:
# todo 实现自动登录美逛的功能,运行脚本前先用adb查看是否连接,运行成功后再次运行需退出登录
from appium import webdriver
import time class OpenMg():
def __init__(self):
'''打开APP及初始化工作'''
desired_caps = {
"platformName": "Android",
"platformVersion": "5.1",
"deviceName": "127.0.0.1:62001",
"appPackage": "com.xk.span.zutuan",
"appActivity": ".module.main.ui.activity.MainActivity"}
self.driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
time.sleep(6) def register_page(self):
'''由注册切换到输入账号界面'''
self.driver.find_element_by_id('com.xk.span.zutuan:id/tv_tab_txt4').click()
self.driver.find_element_by_id('com.xk.span.zutuan:id/stv_user_un_login').click()
time.sleep(0.01)
self.driver.find_element_by_id('com.xk.span.zutuan:id/stv_login_mobile').click()
time.sleep(0.01) def input_account(self, phone, password):
'''输入账号密码到个人中心界面'''
self.driver.find_element_by_id('com.xk.span.zutuan:id/et_mobile').send_keys(phone)
self.driver.find_element_by_id('com.xk.span.zutuan:id/password').click()
self.driver.find_element_by_id('com.xk.span.zutuan:id/et_password').send_keys(password)
self.driver.find_element_by_xpath('//*[@text="登录"]').click()
time.sleep(3.9)
self.driver.find_element_by_xpath('//*[@text="个人中心"]').click() def finally_result(self):
'''断言结果是否正确'''
if '邀请码: 182635' in self.driver.page_source:
print('邀请码正确,登录成功')
else:
print('邀请码错误,登录失败')
def click_exit(self):
'''点击退出,清理登录信息'''
time.sleep(0.5)
self.driver.find_element_by_id('com.xk.span.zutuan:id/iv_user_logout').click()
time.sleep(0.5)
self.driver.find_element_by_xpath('//*[@text="确定"]').click() def closed(self):
'''关闭驱动对象'''
time.sleep(3)
self.driver.quit() def main():
'''根据操作顺序,调用方法执行'''
mg = OpenMg()
mg.register_page()
mg.input_account('1582', 'mg123456')
mg.finally_result()
mg.click_exit()
mg.closed() if __name__ == '__main__':
main()
第一次appium自动化的更多相关文章
- appium自动化测试之UIautomatorviewer元素定位
appium自动化测试之UIautomatorviewer元素定位 标签(空格分隔): uiautomatorviewer元素定位 前面的章节,已经总结了怎么搭建环境,怎样成功启动一个APP了,这里具 ...
- Appium自动化部署及连接Appium服务
Appium自动化部署: 1)安装appium桌面程序安装:超链接 2)安装客户端 pip install appium-python-client 3)安装服务器 安装 Nodejs 4)连接app ...
- appium自动化的工作原理(1)
用appium开发移动端自动化测试脚本这么长时间,还没有认证的了解下它的原理是什么,到底是如何实现的呢? 1.先看一个Appium加载的过程图解(来自:了解appium自动化的工作原理--https: ...
- Appium自动化 - 设置unicodeKeyboard: True运行脚本后,手机输入时无法调出软键盘
问题背景 做appium自动化的时候,使用了UiAutomator1驱动,然后设置了UnicodeKeyboard 执行自动化脚本之后,玩手机的时候发现平时用的输入法键盘没法调出来了 'automat ...
- Appium自动化(10) - appium高级元素定位方式之 UI Automator API 的详解
如果你还想从头学起Appium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1693896.html 前言 前面介绍过根据id,clas ...
- 通过无线连接的方式来做 Appium 自动化
感谢TesterHome里各种大牛,提出的宝贵思路,我这里只是将他们的想法综合了一下,试出来的成果,谢谢大家分享你们的智慧. 简单说下背景: 由于公司要测试APP 产品的耗电问题,我们采取的办法很lo ...
- java+appium 自动化环境搭建
1.安装JDK1.7及以上 2.下载解压sdk并且配置环境变量: ANDROID_HOME:...\adt-bundle-windows-x86_64-20140702\sdk PATH:%ANDRO ...
- WiFi无线连接真机进行Appium自动化测试方法
有时需要测试APP 产品的耗电问题,但用自动化又面临了一个USB接电脑供电的问题,从而导致计算出来的功耗与手动跑,存在有很大的误差,因此可使用wifi无线连接到手机进行自动化测试,解决功耗问题. 前提 ...
- Appium自动化—浅谈iOS自动化测试环境搭建
在日常的测试工作中,我们会发现有些测试工作重复率极高,测试人员需要花费大量的时间进行这些重复性的测试,浪费了大量的人力与时间.若能够将常用的测试场景进行自动化,那必定能节省许多的人力与时间.作为一个初 ...
随机推荐
- 洛谷P2001 硬币的面值 题解
题目链接:https://www.luogu.org/problemnew/show/P2001 这题的数据范围吓得我很慌. 分析: 这道题蒟蒻本来想用背包的,但是发现m太大,一写肯定炸,然后看到数据 ...
- Spring Boot从入门到实战(十):异步处理
原文地址:http://blog.jboost.cn/2019/07/22/springboot-async.html 在业务开发中,有时候会遇到一些非核心的附加功能,比如短信或微信模板消息通知,或者 ...
- python3.x 与 python2.x 差别记录
从2.x过渡到3.x的时候,遇到了大大小小的坑,于是便记录下来- 1.print: 3.x 所有print都要加 "( )",print更像(就是)一个函数了. 2.x 可以加& ...
- sql nvarchar类型和varchar类型存储中文字符长度
今天遇到了,随手记录一下. sql server 存储数据里面 NVARCHAR 记录中文的时候是 一个中文对应一个字符串长度,记录英文也是一个字母一个长度 标点符号也是一样. ...
- 通过sysbench工具实现MySQL数据库的性能测试
1.背景 sysbench是一款压力测试工具,可以测试系统的硬件性能,也可以用来对数据库进行基准测试.sysbench 支持的测试有CPU运算性能测试.内存分配及传输速度测试.磁盘IO性能测试.POS ...
- vue教程(五)--路由router介绍
一.html页面中如何使用 1.引入 vue-router.js 2.安装插件 Vue.use(VueRouter) 3.创建路由对象 var router = new VueRouter({ // ...
- kubernetes 1.15.1 高可用部署 -- 从零开始
这是一本书!!! 一本写我在容器生态圈的所学!!! 重点先知: 1. centos 7.6安装优化 2. k8s 1.15.1 高可用部署 3. 网络插件calico 4. dashboard 插件 ...
- java并发笔记之synchronized 偏向锁 轻量级锁 重量级锁证明
警告⚠️:本文耗时很长,先做好心理准备 本篇将从hotspot源码(64 bits)入手,通过分析java对象头引申出锁的状态:本文采用大量实例及分析,请耐心看完,谢谢 先来看一下hotspot的 ...
- 【MySQL】添加多个字段
MySQL 遇到了添加多个字段的问题,尝试了几次,搞定了,记录下. 示例代码如下: alter table ad_data add ( exposure_count bigint(20) defaul ...
- 一道看似简单的go程序的深入分析
先上代码: func main() { var a [10]int for i := 0; i < 10; i++ { go func(i int) { for { a[i]++ } }(i) ...