记⼀次appium识别toast问题解决经历
经查询appium1.6.3以上才能识别toast,之前安装appium版本是1.4.X,于是重整了测试环境,这篇后半部分有记录
官⽅⽂档是这么说的
Firstly you should install appium server. . 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,官⽹是这么说
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版本UIAutomator2,加上这句
capabilities.setCapability(MobileCapabilityType.AUTOMATION_NAME, AutomationName.ANDROID_UIAUTOMATOR2);
运⾏后⼿机会装如下两个apk
io.appium.uiautomator2.server
io.appium.st
启动driver代码如下:
[java]
1.        protected AndroidDriver<WebElement> driver;
2.
3. @Parameters({ "serverIP","port", "platformName","udid",
4.        "appPackage", "appActivity" })
5. @BeforeTest
6. public void setUp(String serverIP,String port,String platformName,String udid,
7.          String appPackage,String appActivity) throws Exception {
8.    DesiredCapabilities capabilities = new DesiredCapabilities();
9.    capabilities.setCapability(CapabilityType.BROWSER_NAME, "");
10.    capabilities.setCapability("platformName", platformName);
11.    capabilities.setCapability("deviceName", udid);
12.    capabilities.setCapability("udid", udid);
13.    capabilities.setCapability("platformVersion", "6.0");
14.    capabilities.setCapability("unicodeKeyboard", true);
15.    capabilities.setCapability("resetKeyboard", true);
16.    capabilities.setCapability("noReset", true);
17.    capabilities.setCapability("noSign", true);
18.    capabilities.setCapability("appPackage", appPackage);
19.    capabilities.setCapability("appActivity", appActivity);
20.    capabilities.setCapability("automationName","uiautomator2");//调⽤uiautomator2,获取toast
21.
22.    driver = new AndroidDriver(new URL("" + serverIP + ":" + port + "/wd/hub"),
23.            capabilities);
24.      }
识别toast代码:
[java]
1. final WebDriverWait wait = new WebDriverWait(driver,3);
2. Assert.assertNotNull(wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath(".//*[contains(@text,'"+ toast + "')]"))));
unicode keyboard download
3. log.info("查toast成功!");
4. return true;
5. } catch (Exception e) {
6. throw new AssertionError("不到"+toast);
运⾏后driver初始化失败,也没有装如上所说的两个apk,去掉这句
[debug] [ADB] Running 'D:\andriod\android-sdk-windows\' wi
th args: ["-P",5037,"-s","WTKDU16707010313","shell","pm","list","packages","-3",
"io.appium.st"]
[debug] [ADB] App is  not installed
[debug] [ADB] Checking app cert for C:\Users\Administrator\AppData\Roaming\npm\n
ode_modules\appium\node_modules\appium-uiautomator2-driver\uiautomator2\appium-u
iautomator2-server-v0.0.8.apk.
[debug] [ADB] App already signed.
[debug] [ADB] Zip-aligning 'C:\Users\Administrator\AppData\Roaming\npm\node_modu
les\appium\node_modules\appium-uiautomator2-driver\uiautomator2\appium-uiautomat
or2-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_modu
les\appium\node_modules\appium-uiautomator2-driver\uiautomator2\appium-uiautomat
or2-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
[debug] [ADB] 1 device(s) connected
[debug] [ADB] Running 'D:\andriod\android-sdk-windows\' wi
th args: ["-P",5037,"-s","WTKDU16707010313","shell","am","force-stop","com.fxicr
azy.sjml"]
[debug] [Logcat] Stopping logcat capture
[debug] [ADB] Removing forwarded port socket connection: 8200
[debug] [ADB] Running 'D:\andriod\android-sdk-windows\' wi
th args: ["-P",5037,"-s","WTKDU16707010313","forward","--remove","tcp:8200"]
[MJSONWP] Encountered internal error running command: Error: Could not find zipa
< in tools, platform-tools, or supported build-tools under D:\andriod\and
roid-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\Ap
pData\Roaming\npm\node_modules\appium\node_modules\babel-runtime\regenerator\run
time.js:315:22)
at GeneratorFunctionPrototype.prototype.(anonymous function) [as next] (C:\U
sers\Administrator\AppData\Roaming\npm\node_modules\appium\node_modules\babel-ru
ntime\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:3
7)
[HTTP] <-- POST /wd/hub/session 500 8932 ms - 310
[HTTP] --> POST /wd/hub/session {"capabilities":[{"desiredCapabilities":{"appPac
kage":"com.fxicrazy.sjml","appActivity":".ui.welcome.WelcomeActivity","noSign":t
rue,"platformVersion":"6.0","automationName":"UIAutomator2","platformName":"Andr
oid","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 se
nt ["capabilities"]
看这个报错信息有点蒙,服务⽇志⼀句⼀句跟下来,发现这句
[html]
1. [MJSONWP] Encountered internal error running command: Error: Could not find zipa
2. in tools, platform-tools, or supported build-tools under D:\andriod\and
3. roid-sdk-windows do you have the Android SDK installed at this location?
额,原来是sdk没这个⼯具,没办法进⾏ Zip-aligning apk,然后安装。所以报错,很是欣喜,然后⽤36
0⼿机助⼿⼿动安装了这两个apk到⼿机,再次运⾏,⼀直在等待uiautomator2,最后超时报错,说明uiautomator2 server没起来
[html]
1. [UiAutomator2] Waiting for UiAutomator2 to
2. [debug] [JSONWP Proxy] Proxying [GET /status] to [GET localhost:8200/wd/h
3. ub/status] with no body
4. [debug] [JSONWP Proxy] Proxying [GET /status] to [GET localhost:8200/wd/h
5. ub/status] with no body
6. [debug] [JSONWP Proxy] Proxying [GET /status] to [GET localhost:8200/wd/h
7. ub/status] with no body
8. [debug] [JSONWP Proxy] Proxying [GET /status] to [GET localhost:8200/wd/h
9. ub/status] with no body
百度相关信息特别少,只能查官⽹,按官⽹所说我的配置,代码都没问题。查单元测试源码,也证明这样做是对的,后来怀疑,appium版本与java-client,selenium版本不兼容,前前后后换了好⼏个版本,整了好⼏天,还是不⾏,最后也排除了这⼏个版本兼容性,最后更新了sdk,最⾼⽀持> 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 localhost:8200/
wd/hub/session/8b26bb2b-fc12-446d-8158-68b75ee0d44a/elements] with body: {"strat
egy":"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: [{"ELE
MENT":"d794bb72-e404-49ac-b196-d61b420a8291"}]
[HTTP] <-- POST /wd/hub/session/be19a6ec-33b4-49c2-a209-b6e7fd8ad9ce/elements 20
0 982 ms - 124
最后针对这次问题的解决过程,⼜做了重新梳理,最后得出结论是io.appium.uiautomator2.server、io.appium.st这两个apk,⼀定要进⾏Zip-aligning apk,然后再安装,才能正常使⽤,⼿动安装不⾏,跟sdk版本是否更新到6.0⽆直接关系,中间踩了好⼏个坑,费了好⼏天时间。⼤家可以借鉴⼀下,有什么问题,也可以留⾔,⼤家⼀起讨论。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。