如何选择monkeyrunner中文本字段中的所有文本?

时间:2014-12-03 12:11:34

标签: android monkeyrunner

实际上我想要删除文本字段中的所有文本,并且我正在使用一个调用device.press('KEYCODE_DEL')的循环来实现此目的。

但有两个缺点:

  1. 效率不高,尤其是当我不知道有多少时 文本字段中的字符,所以我需要设置一个足够大的循环
  2. 需要在删除之前将光标移动到末尾
  3. 所以我试图通过两个步骤来实现这个目标:

    1. 选择所有文字
    2. 按删除按钮
    3. 我发现了一个类似的问题here尚未解决。

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

      我做了几次测试,并找到了接近它的方法:

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

      我认为这三个步骤可以完成MENU+A操作。但它每次都不起作用。我执行了20次这个代码(循环),发现它只生效了大约5-8次。

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

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

      感谢任何建议!

2 个答案:

答案 0 :(得分:0)

AndroidViewClient EditText有一个方法:

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)

答案 1 :(得分: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')