配置环境:
Appium version :1.9.1
Appium-desktop:后改成1.7.1
Android:6.0.1
Mac:10.13.6
1、appium-desktop配置链接Android真机
一、开启appium服务
若是报错:参考上一篇解决办法(第二节第6小点)android
二、配置链接真机的参数
其中,appPackage、appActivity如何获取呢(有坑):shell
输入以下:app
$adb shell
shell@R9s:/ $ dumpsys activity |grep mFocusedActivity
mFocusedActivity: ActivityRecord{f8dacd9 u0 cn.sqm.citymine_safety/.LoginActivity(这块有问题,见下面) t64}
其中:cn.sqm.citymine_safety/.LoginActivity是咱们须要的ide
能够点击【Save As】进行保存post
而后点击【Start Session】按钮。
可是报错:An unknown server-side error occurred while processing the command. Original error: Error occured while starting App. Original error: Permission to start activity denied.
经查询得知是:appActivity这块的问题
解决以下,命令行输入:
adb shell dumpsys activity activities >/Users/xxx/Desktop/activity.txt
打开文档,以下:
三、检查器
修改后再一次运行,会打开The Inspector:
检查器是应用程序状态的可视化表示具备在应用程序中执行某些交互的能力Appium。
四、解决每次启动时都安装setting和unlock app方法
可是有一个问题是,之后每次启动都要安装setting和unlock app,为了解决,以下:
==========================================================
下面两个由于不是在appium-desktop下修改的,因此对本文不适。
==========================================================
1)首先修改...lib/android-helpers.js文件
从网上找了不少修改的方法可是统一都在appium下的android-helpers.js修改,屡试不爽,通过查询得知应该在appium-desktop下修改,多是由于我用的是这个软件吧:
它的路径为:
# 修改android-helpers.js
open
/Applications/Project/Appium1.7.1.app/Contents/Resources/app/node_modules/appium/node_modules/appium-android-driver/lib
打开android-helpers.js文件
①搜索下面代码后注释掉:328行
await adb.install(unicodeIMEPath, false);
如图:
②接着注释掉下面两行代码:46九、472行
await helpers.pushSettingsApp(adb);
await helpers.pushUnlock(adb);
这个文件就算改完了,保存并退出。
2)其次修改.../build/lib/android-helpers.js文件
#修改android-helpers.js
open /Applications/Project/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-android-driver/build/lib/
①注释掉代码并在下一行添加一行代码:89二、893行
//return _regeneratorRuntime.awrap(adb.install(_appiumAndroidIme.path, false));
return context$1$0.abrupt('return',defaultIME);
②接着注释下面并添加一行:128七、1288行;129七、1298行
//return _regeneratorRuntime.awrap(helpers.pushSettingsApp(adb));
return context$1$0.abrupt('return',defaultIME);//return _regeneratorRuntime.awrap(helpers.pushUnlock(adb));
return context$1$0.abrupt('return',defaultIME);
ok,保存而且退出。重启appium-desktop便可。不会再无休止地让你安装Unlock和AppiumSetting了。
2、 Android自动化py脚本编写
写一下简易的代码以下:
desired_capabilities.py
defget_desired_capabilities():
desired_caps={"platformName": "Android","platformVersion": "6.0.1","deviceName": "OPPO","appPackage": "cn.sqm.citymine_safety","appActivity": ".activity.LauncherActivity","udid": "608ad0fe"}returndesired_capsdefget_uri():return 'http://localhost:4723/wd/hub'
test.py
from appium importwebdriverfrom selenium.webdriver.support.ui importWebDriverWaitfrom selenium.webdriver.support importexpected_conditions as ECimportunittestimporttimefrom time importsleepimportMine.Appium.desired_capabilities as desired_capabilitiesfrom selenium.webdriver.common.by importByclassAndroidTest(unittest.TestCase):
@classmethoddefsetUpClass(self):
desired_cap=desired_capabilities.get_desired_capabilities()
uri=desired_capabilities.get_uri()
self.d=webdriver.Remote(uri,desired_cap)
@classmethoddeftearDownClass(self):
sleep(10)
self.driver.quit()pass
defsetUp(self):print("=======start!=======")
sleep(5)
size=self.d.get_window_size()print(size)#输入用户名
userName = self.d.find_element(By.ID,"cn.sqm.citymine_safety:id/et_login_id")
userName.send_keys("xxx")#输入密码
password = self.d.find_element(By.ID,"cn.sqm.citymine_safety:id/et_login_password")
password.send_keys("xxx")#登陆密码
button = self.d.find_element(By.ID,"cn.sqm.citymine_safety:id/btn_login")
button.click()deftearDown(self):print("=======stop!=======")deftest1(self):print("测试开始!")#发起任务
self.d.find_element_by_id("cn.sqm.citymine_safety:id/rl_add_task").click()#任务类型
self.d.find_element_by_id("cn.sqm.citymine_safety:id/tv_select_task_type").click()
self.d.swipe(534, 1630, 534, 1583, 500)#向上拖动
self.d.swipe(500, 1270, 500, 500, 500)#获取值
text = self.d.find_element_by_id("cn.sqm.citymine_safety:id/tv_get_location").text
self.assertEqual(text,"公园1","定位不对!")if __name__=='__main__':
unittest.main()
可是报错:
selenium.common.exceptions.WebDriverException: Message: Parameters were incorrect. We wanted {"required":["value"]} and you sent ["text","value","id","sessionId"]
解决参考以下:
找到缘由是selenium版本的问题,把selenium版本降到3.0.1 就能够了,执行命令以下:
#查看命令:
pip show selenium //查看当前包的版本信息#卸载命令:
pip uninstall selenium //卸载当前安装的包#安装命令:
pip install selenium==3.0.1 //指定版本号安装#查看命令:
pip show selenium //查看当前包的版本信息
可是再一次执行appium程序时又遇到以下报错:
ImportError: cannot import name 'InvalidArgumentException'
在此路径下的exceptions.py文件中添加一段代码:
/Users/xxx/.pyenv/versions/3.6.1/lib/python3.6/site-packages/selenium/common/exceptions.py
classInvalidArgumentException(WebDriverException):"""
"""
pass
再一次运行appium程序,自动化运行成功!!!!