2014-12-03 111 views
0

其实我想删除文本字段中的所有文本,并且我正在使用一个调用device.press('KEYCODE_DEL')的循环来实现此目的。如何选择monkeyrunner文本字段中的所有文本?

但有两个缺点:

  1. 没有足够有效的,特别是当我不知道有多少 字符的文本字段,所以我需要设定一个足够大的循环
  2. 需要移动光标到最后删除

所以我想通过两个步骤来完成此之前:

  1. 选择所有文字
  2. 按删除键

我发现了一个类似的问题here这是尚未解决。

there是如何选择所有文本的答案,但我认为它与我的循环删除方式有相同的问题。

我做了多次试验,发现靠近它的方式:

device.press('KEYCODE_MENU', 'MonkeyDevice.DOWN', '') 
device.press('KEYCODE_A') 
device.press('KEYCODE_MENU', 'MonkeyDevice.UP', '') 

我想这三个步骤完成一个MENU+A操作。但它并不是每次都有效。我执行了这个代码20次(在一个循环中),发现它只有约5-8次的效果。

此外,我发现这三个步骤将光标移到大部分时间的第一位。

有没有人知道为什么这个操作不可靠?或者选择所有文字的其他建议?

感谢您的任何建议!

回答

0

AndroidViewClientEditText有一个方法:

def setText(self, text): 
    """ 
    This function makes sure that any previously entered text is deleted before 
    setting the value of the field. 
    """ 
    if self.text() == text: 
     return 
    self.touch() 
    guardrail = 0 
    maxSize = len(self.text()) + 1 
    while maxSize > guardrail: 
     guardrail += 1 
     self.device.press('KEYCODE_DEL', adbclient.DOWN_AND_UP) 
     self.device.press('KEYCODE_FORWARD_DEL', adbclient.DOWN_AND_UP) 
    self.type(text, alreadyTouched=True) 
0

使用AndroidViewClient它很容易。试试这个代码 -

editText= vc.findViewByIdOrRaise(EDITTEXT ID in quotes) 
(x,y) = editText.getXY() 
editText.device.drag((x,y), (x,y), 2000, 1) 
vc.dump() 
device.press('KEYCODE_DEL') 
相关问题