“webview 控件会本地化成 view 控件”
这个变化是是跟着 webview 控件的版本还是 Android 系统的版本?
这部分内容有官方说明信息的链接吗?
你清楚是什么原因导致的这个情况吗?因为 5.0 上面是不行,难道是 6.0,7.0 有对应内容作了更新
在 6.0,7.0 的 Android 上,第一次显示不出来,第二次可以完整的 dump 出来 .
5.0 的却不行.
如果 webview 里面的东西都能 dump 出来,那回放脚本的时候针对 webview 中的内容就不需要走 webdriver 了吧.
我现在很想知道具体的原因是什么。
@seveniruby 思寒,请问你清楚这个问题吗?
#7 楼 @yangweiwei 哈哈哈
哈哈 看到两个同事
有时候 还得看看团队的情况
为啥回复不了呢
#10 楼 @jamesparagon
第三个问题,回放的执行效率和录制时不一样
如果录制出来的脚本直接进行回放,的确是有这个问题,除非你自己在录制功能模块中加入了计时功能,能记录测试人员录制时的时序,让然后回放的时候再体现出来 。
不过我这个没加这个功能,录制出来的脚本也不会直接进行回放,而是需要进行逻辑处理然后验证脚本健壮性没有问题后,在入库投入到使中。
#10 楼 @jamesparagon
另外一个问题,关于控件没有属性
不要忘了是有 xpath 的哦 ,xpath 相对路径下 bounds 也可以成为标注控件的唯一属性。
#10 楼 @jamesparagon
首先赞成你的说的,录制脚本这个动作存在偏差问题。(我一直认为录制这个功能有点华而不实。)
关于控件重叠问题:
我目前没有遇到完全重叠的情况,只要不是完全重叠就可以通过不断优化判定控件的计算方法来定位控件,目前我是这么做的,以计算器举例
用户点击 Delete 的时候怎么完成对控件的精准筛选呢?
看代码
private boolean isInWidget(String bounds,int x,int y){
int x1=0,y1=0,x2=0,y2=0;
Matcher matcher = pattern.matcher(bounds);
while (matcher.find()) {
x1 = Integer.valueOf(matcher.group(1));
y1 = Integer.valueOf(matcher.group(2));
x2 = Integer.valueOf(matcher.group(3));
y2 = Integer.valueOf(matcher.group(4));
}
if ((x1 <= x) && (x <= x2) && (y1 <= y) && (y <= y2)) {
return true;
}
else {
return false;
}
}
private void findWidget(Element element,int widgetX,int widgetY){
NodeList widgets = element.getChildNodes();
for (int i = 0; i < widgets.getLength(); i++) {
Element widget = (Element) widgets.item(i);
if (widget.getAttribute("clickable").equals("true") && isInWidget(widget.getAttribute("bounds"), widgetX, widgetY)) {
widgetList.add(widget);
}
if (widget.getChildNodes().getLength()>0) {
findWidget(widget, widgetX, widgetY);
}
}
}
private int findBestWidget(int x,int y){
int marginX = 0;
int marginY = 0;
int tmpIndex = 0;
if (widgetList.size() > 0) {
for (int i = 0; i < widgetList.size(); i++) {
String bounds = widgetList.get(i).getAttribute("bounds");
// 分析bounds
int x1=0,y1=0,x2=0,y2=0;
Matcher matcher = pattern.matcher(bounds);
while (matcher.find()) {
x1 = Integer.valueOf(matcher.group(1));
y1 = Integer.valueOf(matcher.group(2));
x2 = Integer.valueOf(matcher.group(3));
y2 = Integer.valueOf(matcher.group(4));
}
// 计算边距
int tmpMarginX = x - x1;
int tmpMarginY = y - y1;
if (i > 0) {
if ((tmpMarginX < marginX)||(tmpMarginY < marginY)) {
marginX = tmpMarginX;
marginY = tmpMarginY;
tmpIndex = i;
}
}
else {
marginX = tmpMarginX;
marginY = tmpMarginY;
tmpIndex = i;
}
}
return tmpIndex;
}
else {
return -1;
}
}
这段代码是在手机上面执行的哈,解析的数据会按照 JSON 串的形式返回给工具。
#2 楼 @jamesparagon 写了一半开会去了 . 要补上。
老板,加个精~
UiAutomator2 和 XCUITEST 要 3 月份
#5 楼 @liuhao121 有兴趣可以把简历发送到邮箱, 如果合适会通知你面试 .
呵呵呵 ........
成都的兄弟们来看看啊