还有个手机 logcat 日志不知道你会不会看,看 espresso 的 server 发生了什么
看你这个表好像是一样的
value 值不符合规则?
你是用 espresso driver 来做测试的吗?
我看这个错误只在 espresso 中才会存在:
/*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* See the NOTICE file distributed with this work for additional
* information regarding copyright ownership.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.appium.espressoserver.lib.helpers.w3c.processor;
import java.util.Arrays;
import io.appium.espressoserver.lib.handlers.exceptions.InvalidArgumentException;
import io.appium.espressoserver.lib.helpers.w3c.models.ActionObject;
import io.appium.espressoserver.lib.helpers.w3c.models.InputSource.Action;
import io.appium.espressoserver.lib.helpers.w3c.models.InputSource.ActionType;
import io.appium.espressoserver.lib.helpers.w3c.models.InputSource.InputSourceType;
import static io.appium.espressoserver.lib.helpers.w3c.models.InputSource.ActionType.KEY_DOWN;
import static io.appium.espressoserver.lib.helpers.w3c.models.InputSource.ActionType.KEY_UP;
import static io.appium.espressoserver.lib.helpers.w3c.models.InputSource.ActionType.PAUSE;
import static io.appium.espressoserver.lib.helpers.w3c.processor.PauseProcessor.processPauseAction;
import static io.appium.espressoserver.lib.helpers.w3c.processor.ProcessorHelpers.throwArgException;
@SuppressWarnings("unused")
public class KeyProcessor {
/**
* Follows the 'process a key action' algorithm in 17.2
* @param action Action being processed
* @param inputSourceType Source type
* @param id ID of input source that it's part of
* @param index Index within the 'actions' array
* @return Processed action object
* @throws InvalidArgumentException If failed to process, throw this. Means that args are bad.
*/
public static ActionObject processKeyAction(Action action, InputSourceType inputSourceType, String id, int index)
throws InvalidArgumentException {
// 1-3 get and validate the action type
ActionType subType = action.getType();
ActionType[] validKeyTypes = new ActionType[]{ KEY_UP, KEY_DOWN, PAUSE };
if (!Arrays.asList(validKeyTypes).contains(subType)) {
throwArgException(index, id, "has an invalid type. 'type' for 'key' actions must be one of: keyUp, keyDown or pause");
}
// 4 if pause return PAUSE action
if (subType.equals(PAUSE)) {
return processPauseAction(action, inputSourceType, id, index);
}
// 5-7 get the Unicode value of the keystroke (verify that it's a single character)
String key = action.getValue();
if (key.length() != 1) {
throwArgException(index, id, String.format("has invalid 'value' %s. Must be a unicode point", key));
}
ActionObject actionObject = new ActionObject(id, inputSourceType, subType, index);
actionObject.setValue(key);
return actionObject;
}
}
错误说按键 key 值不是的字符长度不是 1 就会抛出异常,检查下吧
方案一:你可以做一个简单的测试,按下,滑动,弹起,在这个华为手机上看行不行,如果行,基本就可以说跟手机没关系的。
方案二:比对两个手机的时候,这个 while 循环最后产生的 actions 数量和信息是不是一致的(推荐先验证这个)
注意看:unimplemented command: session/8f1ab4e86d833902be2f4ba7b24d79f4/actions
这个请求是会包装一系列请求发送过去的,通常用来做连贯的绘制,你确保在华为手机的时候,发送过去的 actions 能形成一个连贯的闭合,否则 appium 是会解析失败的
你这是 python 脚本日志,得看看 appium 日志
小菜一个,努力成为大牛,关注我的自定义 appium 专栏:https://zhuanlan.zhihu.com/custom-appium
appium 版本是多少?
确定按照我的方法重新打包了吗?
博客:https://cmlanche.com
知乎专栏:https://zhuanlan.zhihu.com/custom-appium 自定义 appium,你都可以关注
是不是感觉有一个蒙层一样?
是这个?npm run build:bootstrap
大佬求推荐精华
只要能力可以,当然支持定制开发,需要对 UIAutomator1,UIAutomator2,espresso 有深入理解,请看我的知乎专栏:https://zhuanlan.zhihu.com/custom-appium,如有需要,我可以提供商业技术支持
关键还是 xpath 写的有问题吧,可以直接打开一个 chrome 网页,模拟调试,看怎样的 xpath 是只获取你所说的子元素,屏蔽孙元素(我也不会写 )
之前在 testin,对这俩货做了深入的改造
老深入了,国内应该没几个人比我更了解了
没有精力维护
desired_caps ["automationName"] = "uiautomator2" 改为 UiAutomator2
控件没找到,最后超时了吧
uiautomator2 自己安装时不也弹框吗,怎么办?
用 UIAutomator1 就好了,很简单,你可以直接把 appium 中的 Bootstrap 工程拿出来做改造,内置你说的那个脚本程序行为就好了
测试过程中的动态权限冒出,或者其他系统弹框弹出怎么办?
只能解决部分手机部分权限吧