Детокс textInput не пишет текст - PullRequest
0 голосов
/ 26 февраля 2019

Я использую Detox в своем реактивном проекте и хочу ввести имя на экране входа в систему, но detox не распознает textInput.Это мой текстовый код

describe('SCA', () => {
  beforeEach(async () => {
    await device.reloadReactNative();
  });

  it('should have splash screen', async () => {
    await expect(element(by.id('splash'))).toBeVisible();
  });
  it('should show login screen', async () => {
    await waitFor(element(by.id('login'))).toBeVisible();
  });
  it('test login screen name input', async () => {
    await element(by.id('name')).typeText('Liam')
  });
});

Код ввода текста:

<TextInput
        testID="name"
        style={styles.input}
        onChangeText={value => this.setState({ name: value }) }
        placeholder={'Name ... '}
        placeholderTextColor='white'
        value={name} />

И вот эта ошибка, которую я получаю:

 ● SCA › test login screen name input

    Failed: [Error: Error: Cannot find UI element.
    Exception with Action: {
      "Action Name":  "Type 'Liam'",
      "Element Matcher":  "((!(kindOfClass('RCTScrollView')) && (respondsToSelector(accessibilityIdentifier) && accessibilityID('name'))) || (((kindOfClass('UIView') || respondsToSelector(accessibilityContainer)) && parentThatMatches(kindOfClass('RCTScrollView'))) && ((kindOfClass('UIView') || respondsToSelector(accessibilityContainer)) && parentThatMatches((respondsToSelector(accessibilityIdentifier) && accessibilityID('name'))))))",
      "Recovery Suggestion":  "Check if the element exists in the UI hierarchy printed below. If it exists, adjust the matcher so that it accurately matches element."
    }


    Error Trace: [
      {
        "Description":  "Interaction cannot continue because the desired element was not found.",
        "Error Domain":  "com.google.earlgrey.ElementInteractionErrorDomain",
        "Error Code":  "0",
        "File Name":  "GREYElementInteraction.m",
        "Function Name":  "-[GREYElementInteraction matchedElementsWithTimeout:error:]",
        "Line":  "124"
      }
    ]

1 Ответ

0 голосов
/ 26 февраля 2019

В настоящее время вы перезагружаете устройство между каждым тестом.

beforeEach(async () => {
  await device.reloadReactNative();
});

Я не думаю, что это то, что вы хотите сделать, поскольку оно сбрасывает все, что означает, что вам нужно ждать, пока все перезагрузится и переместитсячерез ваши экраны, и вы столкнетесь с той же проблемой, что и в предыдущей публикации (Обратите внимание, что вы используете waitFor неправильно, посмотрите мой ответ на предыдущую запись или перечитайте документацию )

Подробнее о .typeText можно прочитать в документации .

Распространенной ошибкой при использовании .typeText не является отключение аппаратной клавиатуры

Примечание. Убедитесь, что аппаратная клавиатура отключена.В противном случае Detox может потерпеть неудачу при попытке ввода текста.

Чтобы убедиться, что аппаратная клавиатура отключена, откройте симулятор из XCode и убедитесь, что Оборудование -> Клавиатура -> Подключить аппаратную клавиатуру не выбрано (или нажмите ⇧⌘K).

Одна вещь, которую я всегда делаю при использовании .typeText, это убедиться, что элемент существует

Поэтому я бы добавил следующее, прежде чем использовать .typeText, чтобы убедиться, чтоэто видно.

await expect(element(by.id('name'))).toBeVisible();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...