【发布时间】:2015-07-09 13:22:35
【问题描述】:
您好,我是 Android 测试的新手。我试图在 UI 测试期间检查我的应用程序中是否可见按钮。我写了一些东西:
@RunWith(AndroidJUnit4.class)
public class MainActivityTest {
@Rule
public ActivityTestRule<MainActivity> mRule = new ActivityTestRule<>(MainActivity.class);
@Before
public void setUp() {
}
@Test
public void clickOnProductTest() {
if (isRegisterClosed()) {
openRegister();
}
onView(withText("Food")).perform(click());
onView(withText("Mineral water")).perform(click());
}
private boolean isRegisterClosed() {
MainActivity activity = mRule.getActivity();
FragmentManager fragmentManager = activity.getFragmentManager();
Fragment f = fragmentManager.findFragmentById(R.id.current_order_fragment);
View v = f.getView();
Button b = (Button) v.findViewById(R.id.orderOpenRegister);
return b.getVisibility() == View.VISIBLE;
}
private void openRegister() {
onView(withId(R.id.orderOpenRegister)).perform(click());
}
上线
查看 v = f.getView(); //在方法isRegisterClosed()
我得到 NullPointerException。看起来片段没有加载。但我不知道为什么。但是当我尝试单击该片段中的按钮时,它可以工作:
onView(withId(R.id.orderOpenRegister)).perform(click());
我想做这样的事情:
if (buttonIsVisible) {
do smth;
}
else {
do smth else;
}
此按钮位于 current_order_fragment 中,其 ID 为 orderOpenRegister。
编辑
我发现,我应该添加以下行:
fragmentManager.executePendingTransactions();
所以我的方法看起来像:
private boolean isRegisterClosed() {
FragmentManager fragmentManager = activity.getFragmentManager();
fragmentManager.executePendingTransactions();
Fragment f = fragmentManager
.findFragmentById(R.id.current_order_fragment);
View v = f.getView();
Button b = (Button) v.findViewById(R.id.orderOpenRegister);
return b.getVisibility() == View.VISIBLE;
}
但如果我这样做,我需要在 UI 线程中运行此测试。有谁知道如何在 UI 线程上运行测试?
【问题讨论】:
标签: android-fragments android-testing android-espresso