【问题标题】:Testing AutoCompleteTextView with Espresso用 Espresso 测试 AutoCompleteTextView
【发布时间】:2016-02-08 22:53:09
【问题描述】:

我正在使用 Espresso 测试具有多个 AutoCompleteTextViews 的应用程序。对于一个特定的测试,会出现自动完成弹出窗口,但我想忽略它并转到下一个 TextView。我怎样才能做到这一点?我的想法是模拟“返回”按下或模拟弹出窗口中的点击。

更新:

我正在尝试以下方法来点击自动完成弹出窗口:

onView(withId(R.id.brand_text))
        .perform(scrollTo(), typeText(card.getBrand()));
onData(allOf(is(instanceOf(String.class)), is(card.getBrand())))
        .inRoot(isPlatformPopup())
        .perform(click());
onView(withId(R.id.brand_text))
        .check(matches(withText(card.getBrand())));

现在的问题是,在某些情况下,输入的文本没有任何自动完成匹配项,因此不会出现弹出窗口。如何根据视图是否匹配有条件地执行点击?

【问题讨论】:

    标签: android autocompletetextview android-espresso testing-support-library


    【解决方案1】:

    我的解决方案是将 UI Automator 中的 UiDevice 对象添加到我的测试中:

     UiDevice device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
    

    然后我打电话给UiDevice.pressEnter() 前进到下一个TextView

    device.pressEnter();
    

    遇到的问题是它不能按预期开箱即用。我还在每个AutoCompleteTextView 中添加了一个View.OnKeyListener 来处理Enter 键事件。现在我为每个视图添加一个监听器,并明确说明哪些视图请求关注 Enter 键事件。

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        // ...
    
        brandText.setOnKeyListener(new View.OnKeyListener() { 
            @Override 
            public boolean onKey(View v, int keyCode, KeyEvent event) { 
                if (event.getAction() == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_ENTER) { 
                    yearText.requestFocus(); 
                    return true; 
                } 
    
                return false; 
            } 
        });
    
        //...
    }
    

    这并不理想。最终,我计划使用一个继承自 AutoCompleteTextView 的自定义组件来概括这一点,它可以按我的预期处理 Enter 键。它将焦点发送到“下一个”视图。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多