简单介绍
之前已经将macaca的环境搭建好了,现在就需要进行元素的定位,这里使用app-inspector,然后进行自动化脚本的编写。
实际操作
一、安装app-inspector
npm i app-inspector -g
![](https://i-blog.csdnimg.cn/blog_migrate/61627fab8625f14f73cb6d9ed21a68c5.webp?x-image-process=image/format,png)
确保如下命令中有手机或模拟器的连接,可以取得设备ID
adb devices
启动app-inspector的命令
app-inspector -u设备id
![](https://i-blog.csdnimg.cn/blog_migrate/517fdf94bc366e9a0666ee4a81c236b1.webp?x-image-process=image/format,png)
![](https://i-blog.csdnimg.cn/blog_migrate/339d1d058369619131208597783b45e9.webp?x-image-process=image/format,png)
至此已经完成app-inspector的配置,接下来就是进行元素的定位以及脚本编写。
二、定位
这里用微信登录为例子介绍一下。首先微信安装后需要选择“登录”,再选择登录方式(手机号码或者微信账号等),之后输入微信账号密码,最后点击登录即可。按照这个思路可以进行自动的开始了。
1、连接设备,开启服务
![](https://i-blog.csdnimg.cn/blog_migrate/5e4f45b339e230a66185a9a6201060e9.webp?x-image-process=image/format,png)
![](https://i-blog.csdnimg.cn/blog_migrate/78a69c501c16c79336723d9db7d503e7.webp?x-image-process=image/format,png)
![](https://i-blog.csdnimg.cn/blog_migrate/b5dc6ca4c49333e0b3c6e0d72ac48a69.webp?x-image-process=image/format,png)
注释:
1:手机微信界面
2:元素
3:定位方式
2、选择定位方式
元素定位有多种定位方式,可以通过id、class name、name、css、xpath等。具体的查看文档:Macaca。
3、编写脚本
如下:
# -*- coding: utf-8 -*-
'''
@author: M_派森
@time: 2018/5/22 14:22
'''
import unittest
import time
from macaca import WebDriver
from retrying import retry
desired_caps = {
'platformName': 'android',
'package':'com.tencent.mm',
'activity':'.ui.LauncherUI'
}
server_url = {
'hostname': 'localhost',
'port': 3456
}
class MacacaTest(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.driver = WebDriver(desired_caps, server_url)
cls.initDriver()
@classmethod
@retry
def initDriver(cls):
print("Retry connecting server...")
cls.driver.init()
def test_01_login(self):
# 确认弹窗
self.driver.accept_alert()
# 确认弹窗
self.driver.accept_alert()
# 登录
self.driver.wait_for_elements_by_id('com.tencent.mm:id/d1w')[0].click()
# 微信号/QQ号/邮箱登录
self.driver.wait_for_elements_by_id('com.tencent.mm:id/bwm')[0].click()
# 输入账号
self.driver.wait_for_elements_by_class_name('android.widget.EditText')[0].send_keys('*****')
# 输入密码
self.driver.wait_for_elements_by_class_name('android.widget.EditText')[1].send_keys('*****')
# 登录
self.driver.wait_for_elements_by_id('com.tencent.mm:id/bwn')[0].click()
time.sleep(10)
@classmethod
def tearDownClass(cls):
cls.driver.quit()
if __name__ == '__main__':
unittest.main()
问题:这里获取到的元素为list,必须使用list的下标索引方式将元素取出,不然会报错。
![](https://i-blog.csdnimg.cn/blog_migrate/7059f9d89b4997e90b02aee0f3f03c1c.webp?x-image-process=image/format,png)
以上就是一个微信的登录过程。