今天,自己独自做了一下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()

  

												

最新文章

  1. Service实时向Activity传递数据案例
  2. JDBC连接MySQL数据库代码模板
  3. servlet 中文乱码问题
  4. elasticseach multi-field的实际用途
  5. C++primer 练习11.33:实现你自己版本的单词转换程序
  6. 处理 insert 字段内容包含 单引号 的问题
  7. -bash: ulimit: open files: cannot modify limit: Operation not permitted
  8. pscs6
  9. Flink升级到1.4版本遇到的坑
  10. SSM-MyBatis-08:Mybatis中SqlSession的commit方法为什么会造成事物的提交
  11. Vue.js 学习笔记 第3章 计算属性
  12. c#十进制转二进制算法 和字符串反转算法
  13. Abp + gRpc 如何实现用户会话状态传递
  14. 随机--相关(Fisher_Yates算法)
  15. spring boot 1.5.3项目放到resin4.0.53报错
  16. PHP获取本周的每一天的时间
  17. Linux-HA实战(3)— 基于Pacemaker搭建TFS Nameserver HA
  18. TensorFlow 实现分类操作的函数学习
  19. [maven] 实战笔记 - 构建、打包和安装maven
  20. android主线程ActivityThread

热门文章

  1. LaTeX大全
  2. 【CYH-02】NOIp考砸后虐题赛:坐标:题解
  3. 面试中的 ThreadLocal 原理和使用场景
  4. 图像相似度中的Hash算法
  5. 计数排序and基数排序
  6. 05-k8s调度器、预选策略、优选函数
  7. Active Directory域
  8. ES 23 - 检索和过滤的区别 (query vs. filter)
  9. Java秒杀系统实战系列~商品秒杀代码实战
  10. .Net Core CLR FileFormat Call Method( Include MetaData, Stream, #~)