Как идентифицировать кнопку вкладки навигации из RNN в детоксикационном тесте

#react-native #automated-tests #splash-screen #react-native-navigation #detox

#react-native #автоматизированные тесты #заставка #react-native-навигация #детоксикация

Вопрос:

Я пытаюсь реализовать некоторые тесты детоксикации в своем проекте, и у меня возникают некоторые проблемы при переходе с одного экрана на другой. В принципе, я попытался создать скрипт для закрытия заставки, подобной приведенной выше, но я не знаю, как определить кнопку «закрыть» на панели вкладок.

 //test.e2e.js
describe('Login', () => {
  it('Should open a splash screen', async () => {
    await device.reloadReactNative();

    await expect(element(by.text('THIS IS A SPLASH SCREEN'))).toBeVisible();
  });

  it('Should close splash screen', async () => {
    await expect(element(by.id('close'))).toBeVisible();
    await element(by.id('close')).tap();

    await expect(element(by.text('Login'))).toBeVisible();
  });
})
  

В реквизитах навигации я уже разместил реквизит testID: 'close' следующим образом:

 static async showModal({ options }) {
  await ReactNativeNavigation.showModal({
  stack: {
      children: [
        {
          component: {
            name: 'Splash Screen',
            },
            options: {
              topBar: {
                leftButtons: [
                  {
                    id: 'close',
                    testID: 'close',
                    icon: dismissIcon, // Its a 'X' image
                    color: 'white',
                  },
                ],
                backButton: { visible: false },
              },
              ...options,
            },
          },
        },
      ],
    },
  });
}
  

Но когда я пытаюсь запустить тест, он показывает следующую ошибку:

 Test Failed: 'at least 75 percent of the view's area is displayed to the user.' doesn't 
match the selected view.
Expected: at least 75 percent of the view's area is displayed to the user.
     Got: null

   8 | 
   9 |   it('Should close splash screen', async () => {
> 10 |     await expect(element(by.id('close'))).toBeVisible();
     |                                           ^
  11 |     await element(by.id('close')).tap();
  12 | 
  13 |     await expect(element(by.text('Login'))).toBeVisible();

  at _callee2$ (login.test.e2e.js:10:43)
  at tryCatch (../node_modules/regenerator-runtime/runtime.js:63:40)
  at Generator.invoke [as _invoke] (../node_modules/regenerator-runtime/runtime.js:293:22)
  at Generator.next (../node_modules/regenerator-runtime/runtime.js:118:21)
  at tryCatch (../node_modules/regenerator-runtime/runtime.js:63:40)
  at invoke (../node_modules/regenerator-runtime/runtime.js:154:20)
  at ../node_modules/regenerator-runtime/runtime.js:189:11
  at callInvokeWithMethodAndArg (../node_modules/regenerator-runtime/runtime.js:188:16)
  at AsyncIterator.enqueue (../node_modules/regenerator-runtime/runtime.js:211:13)
  at AsyncIterator.next (../node_modules/regenerator-runtime/runtime.js:118:21)
  

это моя заставка и журнал

Ответ №1:

Я решил эту проблему с помощью detox recorder. https://github.com/wix/DetoxRecorder .

Используя recorder, я взял поток сценариев и тот же сценарий, который использовался в тестовом примере. Он начал работать нормально.

Комментарии:

1. У меня похожая проблема, и регистратор распознает элемент, но я все равно получаю ту же проблему при запуске теста.

2. у меня не работает рекордер: (возврат к симулятору getcrash 0.70.6

3. Да, для меня тоже. Пожалуйста, опубликуйте ошибку на их странице github.