27

LinearLayout の textview に表示されるテキスト文字列を取得したい。エスプレッソはそれをすることができますか?そうでない場合、それを行う他の方法はありますか、それともエスプレッソ テスト ケースで Android API を使用できますか? API 17 18 以降、espresso 1.1 (最新のものである必要があります) を使用しています。私はこれについて手がかりがありません。ありがとう。

4

2 に答える 2

53

ViewAction基本的な考え方は、実行メソッドでテキストを取得する内部を持つメソッドを使用することです。匿名クラスは final フィールドにしかアクセスできないため、 のローカル変数を設定するだけではgetText()なく、 String の配列を使用してViewAction.

    String getText(final Matcher<View> matcher) {
        final String[] stringHolder = { null };
        onView(matcher).perform(new ViewAction() {
            @Override
            public Matcher<View> getConstraints() {
                return isAssignableFrom(TextView.class);
            }
    
            @Override
            public String getDescription() {
                return "getting text from a TextView";
            }
    
            @Override
            public void perform(UiController uiController, View view) {
                TextView tv = (TextView)view; //Save, because of check in getConstraints()
                stringHolder[0] = tv.getText().toString();
            }
        });
        return stringHolder[0];
    }

注:この種のビュー データ リトリーバーは注意して使用する必要があります。この種のメソッドを常に記述している場合は、最初から何か間違ったことをしている可能性が高いです。ViewAssertionまた、またはの外で View にアクセスしないでくださいViewAction。なぜなら、UI スレッドから実行されるため相互作用が安全であり、実行前にチェックされ、他の相互作用が干渉しないことが確認されるからです。

于 2014-05-05T08:01:07.957 に答える
7

テキスト値を別のテキストでチェックしたい場合は、Matcher を作成できます。独自のメソッドを作成するための私のコードを見ることができます:

 public static Matcher<View> checkConversion(final float value){
    return new TypeSafeMatcher<View>() {

        @Override
        protected boolean matchesSafely(View item) {
            if(!(item instanceof TextView)) return false;

            float convertedValue = Float.valueOf(((TextView) item).getText().toString());
            float delta = Math.abs(convertedValue - value);

            return delta < 0.005f;
        }

        @Override
        public void describeTo(Description description) {
            description.appendText("Value expected is wrong");
        }
    };
}
于 2016-01-05T08:24:29.293 に答える