2

我正在尝试使用由 Robotium 支持的 Testdroid。

背景: FragmentStatePagerAdapter不为片段分配标签值(与 不同FragmentPagerAdapter)因此waitForFragmentByTag不起作用;结果我使用了waitForFragmentById,我无法按预期工作。

我的片段在定义 UI 结构和布局的 xml ( fragment.xml ) 中定义。我的片段也在代码(Fragment.java)中定义,这是注册监听器等的地方。

我已经通过ExtSolo源代码进行了调试,当调用时,为 XML 中父元素的@id 标记中定义的 ID()以及文件本身定义的 ID ( )Waiter返回了 fragmentManager(两个)空值.R.id.fragmentR.layout.fragment

这些是要使用的正确 ID 值吗?如果不是,那是什么?非常感谢任何帮助。

4

2 回答 2

0

Robotium 基于 FragmentManager 和方法 findFragmentById/findFragemntByTag。使用示例应用程序 Support4Demos,我检查了 State Pager 中的片段,这似乎与您的上下文相似。使用此代码:

List<Fragment> fragList = new ArrayList<Fragment>();

@Override
public void onAttachFragment (Fragment fragment) {
    if (!fragList.contains(fragment)) {
        fragList.add(fragment);
        Log.d("TEST", "Fragment id ("+ fragment.getId() +")");
        if (fragment.getId() != View.NO_ID && fragment.getId() != 0) {
            String id = fragment.getResources().getResourceEntryName(
                    fragment.getId());
            Log.d("TEST", "Fragment id " + id);
        }
    }
}

你可以检查,你的片段有什么 id。不幸的是,它们都有 ViewPager 的 id 或 id = 0,因此似乎无法通过 id 来区分它们。不知道会不会对你有帮助,但我希望如此。

于 2013-02-25T12:35:24.943 回答
0

我最终使用了一个令人讨厌的工作,如果结构发生变化,这将导致测试失败:

private void assertAtHomeFragment() {
    assertTrue(solo.waitForView(ListView.class, 1, 2000));
    assertTrue(solo.waitForView(ImageButton.class, 3, 2000));
    assertTrue(solo.waitForView(Button.class, 1, 2000));
    solo.sleep(1000);
}

private void assertAtLibraryFragment() {
    assertTrue(solo.waitForView(ListView.class, 1, 2000));
    assertTrue(solo.waitForView(ImageButton.class, 0, 2000));
    solo.sleep(1000);
}
于 2013-04-04T04:47:43.170 回答