记一次appium识别toast问题解决经历
来源:互联网 发布:左右声道测试软件 编辑:程序博客网 时间:2024/06/03 16:52
经查询appium1.6.3以上才能识别toast,之前安装appium版本是1.4.X,于是重整了测试环境,这篇后半部分有记录appium环境搭建(Android)
官方文档是这么说的
Firstly you should install appium server. Appium getting started. The version 1.6.3 or greater is recommended.
Since version 5.x there many features based on Java 8. So we recommend to install JDK SE 8 and provide that source compatibility.
也就是更新appium 到1.6.3以上,java-client版本最好是5.x,jdk要用1.8、selenium要用3.x,其他版本不一定兼容,要自己亲测是否可用
根据要求重整环境如下:
appium:1.6.3
UiAutomator2 Drvier: 0.2.3
java-client :5.0.0-BETA6
selenium:3.3.1
jdk:1.8
sdk:4.4.2
想识别toast,官网是这么说
There are three automation types
capabilities.setCapability(MobileCapabilityType.AUTOMATION_NAME, AutomationName.SELENDROID);
This automation type is usually recommended for old versions (<4.2) of Android.
Default Android UIAutomator does not require any specific capability. However you can
capabilities.setCapability(MobileCapabilityType.AUTOMATION_NAME, AutomationName.APPIUM);
You have to define this automation type to be able to use Android UIAutomator2 for new Android versions
capabilities.setCapability(MobileCapabilityType.AUTOMATION_NAME, AutomationName.ANDROID_UIAUTOMATOR2);
我手机系统是6.0,sdk版本4.4.2,使用UIAutomator2,加上这句
capabilities.setCapability(MobileCapabilityType.AUTOMATION_NAME, AutomationName.ANDROID_UIAUTOMATOR2);
运行后手机会装如下两个apk
io.appium.uiautomator2.server
io.appium.uiautomator2.server.test
启动driver代码如下:
protected AndroidDriver<WebElement> driver;@Parameters({ "serverIP","port", "platformName","udid","appPackage", "appActivity" })@BeforeTestpublic void setUp(String serverIP,String port,String platformName,String udid, String appPackage,String appActivity) throws Exception {DesiredCapabilities capabilities = new DesiredCapabilities();capabilities.setCapability(CapabilityType.BROWSER_NAME, "");capabilities.setCapability("platformName", platformName);capabilities.setCapability("deviceName", udid);capabilities.setCapability("udid", udid);capabilities.setCapability("platformVersion", "6.0");capabilities.setCapability("unicodeKeyboard", true);capabilities.setCapability("resetKeyboard", true);capabilities.setCapability("noReset", true); capabilities.setCapability("noSign", true); capabilities.setCapability("appPackage", appPackage); capabilities.setCapability("appActivity", appActivity); capabilities.setCapability("automationName","uiautomator2");//调用uiautomator2,获取toastdriver = new AndroidDriver(new URL("http://" + serverIP + ":" + port + "/wd/hub"),capabilities); }识别toast代码:
final WebDriverWait wait = new WebDriverWait(driver,3);Assert.assertNotNull(wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath(".//*[contains(@text,'"+ toast + "')]"))));log.info("查找toast成功!");return true;} catch (Exception e) {throw new AssertionError("找不到"+toast);
运行后driver初始化失败,也没有装如上所说的两个apk,去掉这句capabilities.setCapability("automationName","uiautomator2"),就可以运行正常,排除了其他无法启动driver的可能,最后定位就是增加了这句capabilities.setCapability("automationName","uiautomator2")引起的
报错信息如下:
[debug] [ADB] 1 device(s) connected[debug] [ADB] Running 'D:\andriod\android-sdk-windows\platform-tools\adb.exe' with args: ["-P",5037,"-s","WTKDU16707010313","shell","pm","list","packages","-3","io.appium.uiautomator2.server.test"][debug] [ADB] App is not installed[debug] [ADB] Checking app cert for C:\Users\Administrator\AppData\Roaming\npm\node_modules\appium\node_modules\appium-uiautomator2-driver\uiautomator2\appium-uiautomator2-server-v0.0.8.apk.[debug] [ADB] App already signed.[debug] [ADB] Zip-aligning 'C:\Users\Administrator\AppData\Roaming\npm\node_modules\appium\node_modules\appium-uiautomator2-driver\uiautomator2\appium-uiautomator2-server-v0.0.8.apk'[ADB] Checking whether zipalign is present[debug] [ADB] App not signed with debug cert.[debug] [ADB] Resigning apk.[debug] [ADB] Zip-aligning 'C:\Users\Administrator\AppData\Roaming\npm\node_modules\appium\node_modules\appium-uiautomator2-driver\uiautomator2\appium-uiautomator2-server-v0.0.8.apk'[ADB] Checking whether zipalign is present[debug] [UiAutomator2] Deleting UiAutomator2 session[debug] [UiAutomator2] Deleting UiAutomator2 server session[UiAutomator2] Did not get confirmation UiAutomator2 deleteSession worked; Error was: Error: Trying to proxy a session command without session id[debug] [ADB] Getting connected devices...[debug] [ADB] 1 device(s) connected[debug] [ADB] Running 'D:\andriod\android-sdk-windows\platform-tools\adb.exe' with args: ["-P",5037,"-s","WTKDU16707010313","shell","am","force-stop","com.fxicrazy.sjml"][debug] [Logcat] Stopping logcat capture[debug] [ADB] Removing forwarded port socket connection: 8200[debug] [ADB] Running 'D:\andriod\android-sdk-windows\platform-tools\adb.exe' with args: ["-P",5037,"-s","WTKDU16707010313","forward","--remove","tcp:8200"][MJSONWP] Encountered internal error running command: Error: Could not find zipalign.exe in tools, platform-tools, or supported build-tools under D:\andriod\android-sdk-windows do you have the Android SDK installed at this location? at ADB.callee$0$0$ (../../../lib/tools/system-calls.js:66:11) at tryCatch (C:\Users\Administrator\AppData\Roaming\npm\node_modules\appium\node_modules\babel-runtime\regenerator\runtime.js:67:40) at GeneratorFunctionPrototype.invoke [as _invoke] (C:\Users\Administrator\AppData\Roaming\npm\node_modules\appium\node_modules\babel-runtime\regenerator\runtime.js:315:22) at GeneratorFunctionPrototype.prototype.(anonymous function) [as next] (C:\Users\Administrator\AppData\Roaming\npm\node_modules\appium\node_modules\babel-runtime\regenerator\runtime.js:100:21) at GeneratorFunctionPrototype.invoke (C:\Users\Administrator\AppData\Roaming\npm\node_modules\appium\node_modules\babel-runtime\regenerator\runtime.js:136:37)[HTTP] <-- POST /wd/hub/session 500 8932 ms - 310[HTTP] --> POST /wd/hub/session {"capabilities":[{"desiredCapabilities":{"appPackage":"com.fxicrazy.sjml","appActivity":".ui.welcome.WelcomeActivity","noSign":true,"platformVersion":"6.0","automationName":"UIAutomator2","platformName":"Android","deviceName":"Android Emulator"}},{"requiredCapabilities":{}}]}[debug] [MJSONWP] Bad parameters: BadParametersError: Parameters were incorrect. We wanted {"required":["desiredCapabilities"],"optional":["requiredCapabilities","capabilities","sessionId","id","sessionId","id","sessionId","id"]} and you sent ["capabilities"]看这个报错信息有点蒙,服务日志一句一句跟下来,发现这句
[MJSONWP] Encountered internal error running command: Error: Could not find zipalign.exe in tools, platform-tools, or supported build-tools under D:\andriod\android-sdk-windows do you have the Android SDK installed at this location?
额,原来是sdk没这个工具,没办法进行 Zip-aligning apk,然后安装。所以报错,很是欣喜,然后用360手机助手手动安装了这两个apk到手机,再次运行,一直在等待uiautomator2,最后超时报错,说明uiautomator2 server没起来
[UiAutomator2] Waiting for UiAutomator2 to be online...[debug] [JSONWP Proxy] Proxying [GET /status] to [GET http://localhost:8200/wd/hub/status] with no body[debug] [JSONWP Proxy] Proxying [GET /status] to [GET http://localhost:8200/wd/hub/status] with no body[debug] [JSONWP Proxy] Proxying [GET /status] to [GET http://localhost:8200/wd/hub/status] with no body[debug] [JSONWP Proxy] Proxying [GET /status] to [GET http://localhost:8200/wd/hub/status] with no body
百度相关信息特别少,只能查官网,按官网所说我的配置,代码都没问题。查单元测试源码,也证明这样做是对的,后来怀疑,appium版本与java-client,selenium版本不兼容,前前后后换了好几个版本,整了好几天,还是不行,最后也排除了这几个版本兼容性,最后更新了sdk,最高支持Android6.0,并且tool里有zipalign.exe,这次不进行手动安装,完全交给appium去做,再运行,成功!成功启动了driver并识别了toast,附上成功日志如下
[HTTP] --> POST /wd/hub/session/be19a6ec-33b4-49c2-a209-b6e7fd8ad9ce/elements {"using":"xpath","value":".//*[contains(@text,'当前小区暂无门禁设备')]"}[debug] [MJSONWP] Calling AppiumDriver.findElements() with args: ["xpath",".//*[contains(@text,'当前小区暂无门禁设备')]","be19a6ec-33b4-49c2-a209-b6e7fd8ad9ce"][debug] [BaseDriver] Valid locator strategies for this request: xpath, id, class name, accessibility id, -android uiautomator[debug] [BaseDriver] Valid locator strategies for this request: xpath, id, class name, accessibility id, -android uiautomator[debug] [BaseDriver] Waiting up to 15000 ms for condition[debug] [JSONWP Proxy] Proxying [POST /elements] to [POST http://localhost:8200/wd/hub/session/8b26bb2b-fc12-446d-8158-68b75ee0d44a/elements] with body: {"strategy":"xpath","selector":".//*[contains(@text,'当前小区暂无门禁设备')]","context":"","multiple":true}[debug] [JSONWP Proxy] Got response with status 200: {"sessionId":"8b26bb2b-fc12-446d-8158-68b75ee0d44a","status":0,"value":[{"ELEMENT":"d794bb72-e404-49ac-b196-d61b420a8291"}]}[debug] [MJSONWP] Responding to client with driver.findElements() result: [{"ELEMENT":"d794bb72-e404-49ac-b196-d61b420a8291"}][HTTP] <-- POST /wd/hub/session/be19a6ec-33b4-49c2-a209-b6e7fd8ad9ce/elements 200 982 ms - 124
最后针对这次问题的解决过程,又做了重新梳理,最后得出结论是io.appium.uiautomator2.server、io.appium.uiautomator2.server.test这两个apk,一定要进行Zip-aligning apk,然后再安装,才能正常使用,手动安装不行,跟sdk版本是否更新到6.0无直接关系,中间踩了好几个坑,费了好几天时间。大家可以借鉴一下,有什么问题,也可以留言,大家一起讨论。
- 记一次appium识别toast问题解决经历
- appium 识别toast找不到zipalign.exe
- 记一次面试经历
- 记一次面试经历
- 记一次面试经历
- 记一次考研经历
- 记一次QQ被骗经历
- 记一次IBM面试经历
- 记一次I2S调试经历
- 记一次shellcode提取经历
- 记一次pptp实践经历
- 记一次java面试经历
- 记一次有意思的经历
- 记一次项目升级经历
- appium获取toast消息
- 记一次入侵XP系统的经历
- 记一次内存释放调试经历
- 记一次WPF莫名崩溃的经历
- C++创建单链表
- 蒟蒻养成记——构造数列(2)
- NOJ_1004
- Leetcode学习(17)—— Single Number
- turtle图形函数画图
- 记一次appium识别toast问题解决经历
- Spring(1)初识Spring+IOC(控制反转)+DI(依赖注入)(附:快速入门案例)
- 二叉树遍历(非递归版)
- Eclipse注释模板设置详解
- Linux打卡Day10-扩展权限
- Web Cache替换算法分析(一)
- poj 1733种类并查集+离散化
- 学习设计模式-桥接模式
- 微信开发设置QQ表情 可用于关注自动回复等