无法在Espresso中输入Unicode字符

时间:2016-03-10 00:35:11

标签: unicode android-espresso

这是一个简单的命令,用于匹配文本字段并输入变量name

private final String name = "foo";
onView(withId(R.id.editTextName)).perform(typeText(name));

在我的应用程序中使用" foo"它可以正常工作。但是:

private final String name = "á";
private final String name = "\u00E1";

在这两种情况下,onView行都失败了,导致无法在上一个活动的视图中找到一个视图:

android.support.test.espresso.NoMatchingViewException: No views in hierarchy found matching: with id: <myappid>:id/listViewAccounts

似乎Espresso无法处理Unicode字符,如果要求输入它们将失败。这是在AVD上使用&#34;英语(美国)Android键盘(AOSP)&#34;或者&#34;英语(美国)样本软键盘&#34;。后者也会使双字母变平,这可能与Espresso进入它们的速度有关。

有没有人遇到过这个?是浓咖啡,还是使用的键盘,还是别的东西?

我已将Android软键盘更改为可以长按a以获得á的美国国际软键盘,但Espresso失败的相同。

更新

使用á会将其留在堆栈跟踪中(但\u00E1不会):

java.lang.RuntimeException: Failed to get key events for string á (i.e. current IME does not understand how to translate the string into key events). As a workaround, you can use replaceText action to set the text directly in the EditText field.

可能值得做到这一点,尽管它与真实用户互动的方式略有分离。

1 个答案:

答案 0 :(得分:2)

package main

import (
    "bufio"
    "fmt"
    "os"
)

func main() {
    // Open the file.
    f, _ := os.Open("C:\\programs\\file.txt")
    // Create a new Scanner for the file.
    scanner := bufio.NewScanner(f)
    // Loop over all lines in the file and print them.
    for scanner.Scan() {
      line := scanner.Text()
      fmt.Println(line)
    }
}

onView(withId(R.id.editTextName)).perform(replaceText(name)); 切换typeText()可以输入其他字符。我不确定这是一个理想的解决方案,因为按键上可能存在未触发的事件,但如果你只是想测试这些字符串是如何在内部处理那么它可能就好了。

Espresso明确建议解决方法。