Здравствуйте, я новичок в тестировании Android. Я пытался проверить, видна ли кнопка в моем приложении во время теста пользовательского интерфейса. Я пишу что-то:
@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)). Выполнить (щелчок());
Я хочу сделать что-то вроде:
if (buttonIsVisible) {
do smth;
}
else {
do smth else;
}
Эта кнопка находится в current_order_fragment, и ее идентификатор — 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;
}
но если я это сделаю, мне нужно запустить этот тест в потоке пользовательского интерфейса. Кто-нибудь знает, как запустить тест в потоке пользовательского интерфейса?