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