#28 楼 @spikeshen 呵呵,解决了.edittext 继承自 textview, 支持我上面列举的方法.
第一个坑是 ctrl+v 对应的 event 其实是 meta_ctrl_mask+v, 好几个 ctrl 相关的 event, 当时没测试这个.
第二个坑是搜狗输入法, 搜狗输入法会截获 ctrl+v, 会让你的输入变成了 v. 所以需要切换为系统默认的输入法.
两个大坑
另外 appium 是支持发送 keyevent 的. 我会补充对应的测试用例给官方. 不容易啊.
#28 楼 @spikeshen 我看了下 editview 的代码, 是支持的
public boolean onKeyShortcut(int keyCode, KeyEvent event) {
final int filteredMetaState = event.getMetaState() & ~KeyEvent.META_CTRL_MASK;
if (KeyEvent.metaStateHasNoModifiers(filteredMetaState)) {
switch (keyCode) {
case KeyEvent.KEYCODE_A:
if (canSelectText()) {
return onTextContextMenuItem(ID_SELECT_ALL);
}
break;
case KeyEvent.KEYCODE_X:
if (canCut()) {
return onTextContextMenuItem(ID_CUT);
}
break;
case KeyEvent.KEYCODE_C:
if (canCopy()) {
return onTextContextMenuItem(ID_COPY);
}
break;
case KeyEvent.KEYCODE_V:
if (canPaste()) {
return onTextContextMenuItem(ID_PASTE);
}
break;
}
}
return super.onKeyShortcut(keyCode, event);
}
#28 楼 @spikeshen 我也试过 action_paste 了 也不好用 我在看输入法的实现 还打算读读 edittext 的源码试试
#4 楼 @lihuazhang 他没描述清楚 连测试用例代码都没贴, 不太好下结论.对于简单的应用, 放入 setup 就足够了. 如果是路径很深的, 可以自己设计复用, 可以放入更高层级的 setup 里面,
#26 楼 @spikeshen 在文档中翻到了这么一段内容, 貌似是 uiautomator 并没有返回所有的控件, 需要显式的设置标记才可以拿到那个粘贴按钮
Important: The ability to investigate the view hierarchy from an AccessibilityEvent potentially exposes private user information to your accessibility service. For this reason, your service must request this level of access through the accessibility service configuration XML file, by including the canRetrieveWindowContent attribute and setting it to true. If you do not include this setting in your service configuration xml file, calls to getSource() fail.
Note: In Android 4.1 (API Level 16) and higher, the getSource() method, as well as AccessibilityNodeInfo.getChild() and getParent(), return only view objects that are considered important for accessibility (views that draw content or respond to user actions). If your service requires all views, it can request them by setting the flags member of the service's AccessibilityServiceInfo instance to FLAG_INCLUDE_NOT_IMPORTANT_VIEWS.
#19 楼 @lihuazhang 我也不了解, 有个介绍吗, 这个概念还不知道从什么地方起的.
我在天天关注他们的 issue, 他们提交的 issue 很重要, 里面有很多信息, 我是从里面看到他们讨论这个, 才知道的.
#17 楼 @spikeshen appium1.0 就会有完整的 xpath 支持, 到时候问题就没了. 找父类这种事情, 应该从 root 上找.
#13 楼 @spikeshen 我觉得 xpath 比 id 和 name 还方便, 就算研发设置了 id, 使用 xpath 来描述 id 定位也很直接. 我现在基本上都在用 xpath 了. 在底层, 这三种方式会变成一个描述结构.
建议采用 page object 方式去搞, 尽量屏蔽定位细节.
帅气, appium 貌似考虑的更远, 他支持的是 ios 的 automation. 这个比 ios driver 更好.
其次是 selendroid 的地位开始上升了, 我很奇怪的是, selenium 官方为什么没有提 robotium.
好像 robotium 也要搞 wd 驱动的. 目前也有个 rc 模式了.
#10 楼 @spikeshen 是的, 是我看错了
map.put("tabhost", "TabHost");
map.put("tabwidget", "TabWidget");
map.put("table", "TableLayout");
testerhome 的 git 我重新整理过了, 你们同步下吧.
然后放进去这个文章, 我打算本周发起 pull request
包含了 monkey 之前的更新, 你的这个文章, 还有我的一个代码 merge
#2 楼 @lihuazhang 我是中软资源出来的
#8 楼 @zws20041984 详细的话, 还是看我们翻译好的 appium 中文文档吧, 你可以搜搜以前的帖子
#4 楼 @zws20041984 用法不对, 所以没找到. android 的 tabwidget 会被映射为 tab 标签.
使用//tab[1] 就可以了.
读一下我们翻译的文档吧. 论坛上已经很多资料了