2017-02-28 3 views
0

私が使用して私のエスプレッソテストのチェックボックスのチェックを外す/チェックしようとしています:エスプレッソのページ要素に焦点を当てるには?

termsAndConditionsCheckbox.check(matches(isChecked())); 
termsAndConditionsCheckbox.perform(scrollTo()).perform(click()); 
termsAndConditionsCheckbox.check(matches(isNotChecked())); 

しかし、エラーを取得する:

(scrollToを除去してクリックするだけを使用してみました
Error performing 'scroll to' on view 
Caused by: java.lang.RuntimeException: Action will not be performed because the target view does not match one or more of the following constraints: 
      (view has effective visibility=VISIBLE and is descendant of a: (is assignable from class: class android.widget.ScrollView or is assignable from class: class android.widget.HorizontalScrollView)) 
      Target view: "AppCompatCheckBox{id=2131689839, res-name=tnc_checkbox, visibility=VISIBLE, width=96, height=96, has-focus=false, has-focusable=true, has-window-focus=true, is-clickable=true, is-enabled=true, is-focused=false, is-focusable=true, is-layout-requested=false, is-selected=false, root-is-layout-requested=false, has-input-conn 

)にはまだできない.Butクリックを実行します。

+0

'CheckBox'は' ScrollView'の中にありますか? –

+0

いいえ、scrollTo()のようないくつかのオプションを試しました –

+0

'scrollTo()'はターゲット要素が 'ScrollView'の子であることを期待しています。したがって、ビューが大きすぎて画面に収まらない場合は、それをレイアウトXML内の 'ScrollView'でラップします。すぐに完全な答えを書くだろう。 –

答えて

1

CheckBoxは、VISIBLEと、ScrollViewまたはHorizontalScrollViewの子である必要がありますというエラーメッセージが表示されます。あなたのCheckBoxは実際にVISIBLEですが、ScrollViewの子ではありません。 android:...

<ScrollView ...> 
    <LinearLayout ...> 
     <TextView android:id="@+id/lbl_license_text" ... /> 
     <CheckBox android:id="@+id/chk_accept" ... /> 
    </LinearLayout> 
</ScrollView> 

(明らかに置き換えるインスタンス:あなたはScrollViewので、ビュー内でそれをラップする必要が

<LinearLayout ...> 
    <TextView android:id="@+id/lbl_license_text" ... /> 
    <CheckBox android:id="@+id/chk_accept" ... /> 
</LinearLayout> 

小さな画面のデバイスを上にスクロールすることができます:あなたは、レイアウトのように持っているのであればその要素の特性)

これにより、エスプレッソはテストを実行するときにCheckBoxまでスクロールすることができます。

0

私が(stackoverflowの上の答えの一つにそれを見た)

public static ViewAction setChecked(final boolean checked) { 
    return new ViewAction() { 
     @Override 
     public Matcher<View> getConstraints() { 
      return new Matcher<View>() { 
       @Override 
       public boolean matches(Object item) { 
        return isA(Checkable.class).matches(item); 
       } 

       @Override 
       public void describeMismatch(Object item, Description mismatchDescription) {} 

       @Override 
       public void _dont_implement_Matcher___instead_extend_BaseMatcher_() {} 

       @Override 
       public void describeTo(Description description) {} 
      }; 
     } 

     @Override 
     public String getDescription() { 
      return null; 
     } 

     @Override 
     public void perform(UiController uiController, View view) { 
      Checkable checkableView = (Checkable) view; 
      checkableView.setChecked(checked); 
     } 
    }; 
} 

カスタムViewAction機能を実装することにより、この問題を解決することができましたし、その後の呼び出し:オフに

termsAndConditionsCheckbox.perform(Helper.setChecked(false)); 

をし、通過チェックボックスをオンにするとtrueになります。

関連する問題