1.安装和配置环境
1.1 安装jdk
jdk官网下载
https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
配置环境变量
添加变量
JAVA_HOME=D:\Program Files\Java\jdk\jdk1.8.0_151(换成自己的路径)
在Path添加
%JAVA_HOME%\bin
1.2 安装SDK
Android SDK官网下载
http://dl.google.com/android/android-sdk_r24.4.1-windows.zip
http://tools.android-studio.org/
配置环境变量
新建变量
ANDROID_HOME=E:\sofeware\AndroidSDK\android-sdk(换成自己的路径)
在Path中添加
%ANDROID_HOME%\tools
%ANDROID_HOME%\platform-tools
配置环境变量比较简单,如果不懂可以另外百度一下
1.3 安装模拟器
额,这个只是为了方便演示,其实直接使用真机也是可以的。如果想要使用模拟器,百度一下,就会有很多,随便下载一个呗,我这里使用的是雷电模拟器,安卓版本是5.1.1
不管是真机还是模拟器,都要打开debug格式。打开设置–关于手机–连续点击五次版本号,直到提示开启开发者模式,之后进入开发者模式,开启USB调试,因为步骤比较简单,而且不同手机操作可能不一样,所以不懂的话可以自己百度一下
处于开发者模式之后,打开cmd窗口,输入adb devices
看是否列出当前设备。adb这个工具是SDK里带有的工具,配置好环境变量之后应该就能用。如果没有,自己去网上下载一个adb
1.4 安装Appinum
可以在Appinum或者GitHub上下载
https://github.com/appium/appium-desktop/releases
下载安装好之后打开该软件,点击下面的那个编辑配置文件,填写好你的ANDROID_HOME和JAVA_HOME的路径,保存重启Appium,之后StartServer进入服务窗口(host和port不用修改)
2.元素定位
我们想要操控元素,首先得定位它,我们可以使用SDK里提供的 uiautomatorviewer,该工具位于SDK目录里的tool文件
双击uiautomatorviewer.bat
启动该软件,左上角的按钮可以获取设备屏幕信息,然后点击你要定位的元素即可看到相关信息,比如说资源id
相关方法(因为appium继承selenium,所以selenium有的方法appium都有)
driver = find_element_by_id("id") # 通过id定位元素
driver = find_element_by_xpath(“//*”) # 通过xpath定位元素
# find_XXX_by_XXX() 因为appium继承selenium,所以selenium有的方法appium都有
driver.current_url # 查看当前网页url(webview)
driver.page_source # 查看网页源码(webview)
element.click() # 点击元素
element.send_keys() # 输入文本
driver.quit() # 结束调试
driver.contexts # 返回上下文列表
driver.current_context # 返回当前上下文
driver.current_activity # 返回当前的activity
driver.tap([(x,y),(x1,y1)],500) # 点击,可以模拟多指触控
driver.scroll(el1, el2) # 从元素1滚动到元素2
driver.drag_and_drop(el1,el2) # 将元素1拖动到元素2
driver.swipe(x1,y1,x2,y2,500) # 从A点滑动到B点
driver.pinch(element) # 元素缩小操作
driver.zoom(element) # 元素放大操作
driver.hide_keyboard() # 隐藏键盘
driver.press_ keycode(‘4’) # 发送按键码(按键码可网上搜)
driver.install_app(app_path) # 安装APP
driver.remove_app(“com.xxx.”) # 卸载APP
driver.shake() # 摇一摇手机
driver.set_location(纬度,经度,高度) # 设置位置
driver.background_app(5) # 将应用置于后台,参数单位是秒
driver.get_window_size() # 获取屏幕的宽高
driver.get_screenshot_as_file('c:/1.png') # 屏幕截图
3.Appium
我们使用python去写代码,所以应该先安装python的包
pip install Appium-Python-Client -i https://pypi.tuna.tsinghua.edu.cn/simple
如果前面的环境都没有问题,那我们应该是可以使用了
3.1 简单使用
首先打开模拟器里的一个APP,比如说,打开设置
我们先在模拟器里打开设置,然后使用adb获取该APP的包名和活动名
# win系统
adb shell dumpsys window windows | findstr mFocusedApp
# Linux或Mac
adb shell dumpsys activity activities | grep LAUNCHER
关于adb命令的使用,感兴趣的话可以参考之前的笔记
【Android】安卓调试工具adb shell常用命令总结
获取到包名和活动名之后我们就可以打开该APP了
from appium import webdriver
import time
desired_caps = {
'platformName': 'Android', # 表示平台类型
'platformVersion': '5.1.1', # 改成实际的安卓版本
'deviceName': '****', # 表示的是设备的ID,如果当前电脑只连接了一台手机或模拟器,可以使用4个*号代替
'appPackage': 'com.android.settings', # APP的包名
'appActivity': '.Settings', # APP的活动名
'noReset': True # 启动app时不要清除app里的原有的数据
}
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
time.sleep(1)
driver.quit()
不出意外的话,执行上面这段代码,模拟器就会自动打开设置界面,一秒后再自动关闭
3.2 打开浏览器
再举个粒子,就是打开浏览器搜索某个关键词
首先,还是打开浏览器,获取它的包名和活动名
然后使用uiautomatorviewer进行元素定位,定位到百度的搜索框,可以看到它的resource-id是index-kw,因为id是唯一的,那我们就通过该id去定位吧。再定位一下搜索按钮,获取资源id为index-bn
思路就是,先通过xpath定位到搜索框,然后输入内容,再定位到搜索按钮,然后点击搜索按钮
from appium import webdriver
import time
# 初始化平台信息
desired_caps = {
'platformName': 'Android', # 表示平台类型
'platformVersion': '5.1.1', # 表示平台的系统版本
'deviceName': '****', # 表示的是设备的ID,如果当前电脑只连接了一台手机或模拟器,可以使用4个*号代替
'appPackage': 'com.android.browser', # 表示app的包名
'appActivity': '.BrowserActivity', # 表示的是app的界面名,这里为`设置`的界面
'noReset': True # 启动app时不要清除app里的原有的数据
}
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
time.sleep(2)
driver.switch_to.context("WEBVIEW_com.android.browser")
time.sleep(2)
element = driver.find_element_by_xpath('//*[@id="index-kw"]')
element.send_keys("冰冷的希望")
time.sleep(2)
driver.find_element_by_id("index-bn").click()
time.sleep(2)
driver.quit()
注意: 这里元素定位有一个坑,浏览器是原生应用,而浏览器显示的网页内容是一个WebView,我们是不能直接通过resource-id去定位搜索框的(它会报错找不到该元素)。我们应该先切换上下文即进入到WebView再定位,即driver.switch_to.context("XXXXXX")
,因为不熟悉,所以我在这个坑研究了两个小时…特地记录一下吧