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