偶然接触到这个自动化测试工具,现记录一下使用过程,另外我没有安卓真机,先用的genymotion模拟器,觉得夜神模拟器更加方便一点
提供一部分安装包给大家,方便大家下载
链接:https://pan.baidu.com/s/1MdSD14KGH_NU8n3cRrzknw
提取码:cu5y
略
略
使用的过程中一直报错:找不到JAVA_HOME,所以也就索性重装一了一遍,安装包见前面百度云链接
JAVA_HOME
C:\Program Files\Java\jre1.8.0_261
CLASSPATH
.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
Path
%JAVA_HOME%\jre\bin;%JAVA_HOME%\bin;
另外记住把java bin的变量值放在path前面一点
记得一定要点第一个,我第一次点的第二个,各种错误,重装后选第一个才能正常使用
注意将安装路径加入到Path变量中,比如我的安装目录是E:\learn\Nox\bin
则在path中加上
然后将;%ANDROID_HOME%\platform-tools文件夹下的里面的adb.exe重命名为nox_adb.exe,复制到上面对应的目录E:\learn\Nox\bin,如果找不到可以试试我百度云链接里面的nox_adb.exe。
打开夜神模拟器,我们先安装BILIBILI软件
然后打开Appium
直接点击“启动服务器v1.15.1”,弹出如下界面
然后打开命令提示符,输入nox_adb connect 127.0.0.1:62001
接着在pycharm中执行代码,源代码参见Appium 自动化的打开 B站 应用
执行完后,效果如下
这时你可以点开Appium界面的放大镜
添加名称,也就是desired_caps对应的内容
{
'platformName': 'Android',
'deviceName': '127.0.0.1:62001',
'appPackage': 'tv.danmaku.bili',
'appActivity': '.ui.splash.SplashActivity',
}
得到最后的调试画面
放大镜可以录制动作并转化成代码
回顾一下我们如何使用appium-client启动夜神模拟器中的应用
1我们需要开启Appium服务,端口号设置为4723
2开启夜神模拟器,
3使用nox_adb命令,连接模拟器的ip+端口
4在pycharm连接Appium服务器,发送指令给Appium,Appium再控制手机
第三步的nox_adb,我们的命令是nox_adb connect 127.0.0.1:62001,为什么夜神模拟器的ip是127.0.0.1,端口号62001又是怎么来的呢。62001是夜深模拟器的默认端口,我们看看对不对
先在任务管理器找到夜神模拟器的
可以看到noxvmsvhandle对应的PID是10664
打开命令提示符,输入netstat -aon
然后查找10664
夜神模拟器确实用了62001这个端口
第四步中,我们的代码出现了
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
因为pycharm利用appium-client连接了4723端口对应的appium服务器。
最后回到我们的代码中来
启动快手APP,只用了下面9行代码(前提是在模拟器中首先安装了快手)
from appium import webdriver
desired_caps = {
'platformName': 'Android', # 被测手机是安卓
'platformVersion': '5.1.1', # 手机安卓版本
'deviceName': '0.0.0.0:62001', # 设备名,安卓手机可以随意填写
'appPackage': 'com.smile.gifmaker', # 启动APP Package名称
'appActivity': 'com.yxcorp.gifshow.HomeActivity', # 启动Activity名称
}
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
platformName就是测试平台
platformVersion是安卓版本,可以看到我的模拟器版本确实是5.1.1
deviceName是设备名称,安卓可以随便写
重点是appPackage和appActivity,前者是包名,区别不同的应用,后者对应的是哪个界面,那么这两个值是怎么来的呢,这里我给出一个方法
首先打开模拟器中的快手
然后在命令提示符中输入:adb shell dumpsys window windows | findstr mFocusedApp
得出包名和界面名
先启动快手,再启动哔哩哔哩,可以使用start_activity方法
from appium import webdriver
import time
desired_caps = {
'platformName': 'Android', # 被测手机是安卓
'platformVersion': '5.1.1', # 手机安卓版本
'deviceName': '0.0.0.0:62001', # 设备名,安卓手机可以随意填写
'appPackage': 'com.smile.gifmaker', # 启动APP Package名称
'appActivity': 'com.yxcorp.gifshow.HomeActivity', # 启动Activity名称
}
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
time.sleep(3)
driver.start_activity("tv.danmaku.bili",".ui.splash.SplashActivity")
time.sleep(3)
driver.quit()
可以打印正在运行的包名和页面名称
print(driver.current_package,driver.current_activity)
driver.close_app()
driver.background_app(s)
home_button = driver.find_element_by_id("com.smile.gifmaker:id/left_btn")
点击:home_button.click()
输入:home_button.send_keys('123456')
清除:home_button.clear()
滑动:swipe/scroll/drag_and_drop
user= wait.until(lambda x: x.find_element_by_id("com.smile.gifmaker:id/name"))
user.click()
我们在快手拉黑一个人,是不是先打开APP,然后搜素该用户,最后拉黑。前面的找到元素
home_button = driver.find_element_by_id("com.smile.gifmaker:id/left_btn") ,这个括号里的参数是怎么获取的呢
如果你能成功的运行“启动快手APP”这一步,则你需要的只是一个uiautomatorviewer
该文件在AndroidStudioSdk\tools\bin下。点击uiautomatorviewer.bat,如下
然后在我们的夜神模拟器中打开快手,停在搜索页面,点击工具栏第二个图标,然后鼠标点击到这个搜索框,下面的resource-id的值就是我们需要找的内容
最后附完整代码
from appium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
desired_caps = {
'platformName': 'Android', # 被测手机是安卓
'platformVersion': '5.1.1', # 手机安卓版本
'deviceName': '0.0.0.0:62001', # 设备名,安卓手机可以随意填写
'appPackage': 'com.smile.gifmaker', # 启动APP Package名称
'appActivity': 'com.yxcorp.gifshow.HomeActivity', # 启动Activity名称
'noReset': True, # 不要重置App
'unicodeKeyboard': True, # 使用自带输入法,输入中文时填True
'resetKeyboard': True, # 执行完程序恢复原来输入法
'automationName': 'UiAutomator1'
}
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
home_button = driver.find_element_by_id("com.smile.gifmaker:id/left_btn") # 进入home
home_button.click()
tab_search = driver.find_element_by_id("com.smile.gifmaker:id/tab_search") # 点击查找
tab_search.click()
wait = WebDriverWait(driver, 5, poll_frequency=1)
hint = wait.until(lambda x: x.find_element_by_id("com.smile.gifmaker:id/inside_editor_hint"))
hint.click()
search_box = driver.find_element_by_id("com.smile.gifmaker:id/editor")
search_box.send_keys("572198786") # 设置查询内容
driver.find_element_by_id("com.smile.gifmaker:id/right_tv").click(); # 点击搜素
#出现滑块,等后退
driver.find_element_by_id("com.smile.gifmaker:id/left_btn").click(); # 后退
driver.find_element_by_xpath("//*[@text='用户']").click()
user= wait.until(lambda x: x.find_element_by_id("com.smile.gifmaker:id/name"))
user.click()
send_message= wait.until(lambda x: x.find_element_by_id("com.smile.gifmaker:id/send_message"))
send_message.click()
user_info= wait.until(lambda x: x.find_element_by_id("com.smile.gifmaker:id/right_btn"))
user_info.click()
add_black_btn= wait.until(lambda x: x.find_element_by_id("com.smile.gifmaker:id/add_black_btn"))
add_black_btn.click()
confirm= wait.until(lambda x: x.find_element_by_id("com.smile.gifmaker:id/qlist_alert_dialog_item_text"))
confirm.click()
driver.close_app()
driver.quit()