uiautomator测试框架,深入研究之setText(String)
来源:互联网 发布:机器人编程工资待遇 编辑:程序博客网 时间:2024/05/27 06:54
在android4.2.2中的setText(String text)与android4.3的方法,内部是有些不一样的。但是我们是要学就学最新的嘛,就研究一下4.3的。其实4.2.2的也差不多。
4.3的源码
public boolean setText(String text) throws UiObjectNotFoundException {
Tracer.trace(text);
clearTextField();
return getInteractionController().sendText(text);
}
里面的clearTextField()的源码如下:
----------------------------------------------------------------------------------------------
public void clearTextField() throws UiObjectNotFoundException {
Tracer.trace();
// 找需要点击的对象的NodeInfo
AccessibilityNodeInfo node = findAccessibilityNodeInfo(mConfig.getWaitForSelectorTimeout());
if(node == null) {
throw new UiObjectNotFoundException(getSelector().toString());
}
Rect rect = getVisibleBounds(node);
// 长按聚焦
getInteractionController().longTapNoSync(rect.left + 20, rect.centerY());
UiObject selectAll = new UiObject(new UiSelector().descriptionContains("Select all"));
if(selectAll.waitForExists(50))
selectAll.click();
// wait for the selection
SystemClock.sleep(250);
// delete it
getInteractionController().sendKey(KeyEvent.KEYCODE_DEL, 0);
}
从源码可以看出,他是先制造一个痕迹,然后再找到需要的节点,再得到他的坐标(x轴+20,y轴的中间值,xy坐标原点在屏幕的左上角),然后长按 (时间是系统设置的长按时间),之后 SystemClock.sleep(250),等待 全选 后,执行delete键,即删除。
----------------------------------------------------------------------------------------------------
之后执行sendText(),
public boolean sendText(String text) {
if (DEBUG) {
Log.d(LOG_TAG, "sendText (" + text + ")");
}
KeyEvent[] events = mKeyCharacterMap.getEvents(text.toCharArray());
if (events != null) {
long keyDelay = Configurator.getInstance().getKeyInjectionDelay();
for (KeyEvent event2 : events) {
// We have to change the time of an event before injecting it because
// all KeyEvents returned by KeyCharacterMap.getEvents() have the same
// time stamp and the system rejects too old events. Hence, it is
// possible for an event to become stale before it is injected if it
// takes too long to inject the preceding ones.
KeyEvent event = KeyEvent.changeTimeRepeat(event2,
SystemClock.uptimeMillis(), 0);
if (!injectEventSync(event)) {
return false;
}
SystemClock.sleep(keyDelay);
}
}
return true;
}
他是完全模仿按键动作的。这里会有一个keyInjectionDelay(),就是插入俩个字母之间的时间间隔。最终完成字母插入动作。
所以,这里真正的setText(),执行的真正动作是,得到节点信息,再而得到节点的坐标,通过descriptionContains("Select all"),来全选,若没有则不能全选,之后点击,等250ms,执行删除键,再执行真正的按键输入动作,输入显示出你预先设定的输入内容(注意,该方法的输入方式是调用键盘的,所以一般能完成英文的输入,中文指定字符的输入会比较麻烦)。
- uiautomator测试框架,深入研究之setText(String)
- uiautomator测试框架,深入waitForIdle()
- uiAutomator测试框架,深入pinchOut() pinchIn()
- UiAutoMator 测试框架
- UiAutomator python+uiautomator 自动义测试框架
- Android自动化程测试框架之Robotium VS. UIAutomator
- 自动化测试之uiautomator
- UiAutomator自动化测试框架介绍
- Android-Uiautomator:setText输入速度
- Android自动化测试之UIAutomator
- Android自动化测试之UIAutomator
- andorid自动化测试之uiautomator
- UiAutomator Android 的自动测试框架(UiAutomator 快速调试)
- 深入研究 String
- String字符串深入研究
- 基于UIAutomator+Jenkins自动化测试框架实现
- 基于UIAutomator+Jenkins自动化测试框架实现
- Android Studio导入uiautomator测试框架
- POJ2251:Dungeon Master
- indexof 和 indexofany有什么区别
- 用户研究方法介绍――情绪板(Mood Board)
- 消息边界
- 用photoshop制作iphone圆角图片
- uiautomator测试框架,深入研究之setText(String)
- 1562 Guess the number
- u盘禁止删除和写入,只能读取的问题解决方法。
- JAVA笔记之继承(二)
- poj2255
- 最难就业季求职成本:北漂求职成本1.5万元
- Windbg双机调试
- Windows下安装squid详解
- Python 标准库 cmd模块