#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.