Детокс только тестирование Splash Screen - PullRequest
0 голосов
/ 26 февраля 2019

Я использую детокс в своем проекте React-Native и могу только тестировать заставку.Заставка переходит к экрану входа в систему, но детокс-код не позволяет мне проверить этот элемент.

Тестовый код:

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

  it('should have splash screen', async () => {
    await expect(element(by.id('splash'))).toBeVisible();
    await expect(element(by.id('login'))).toBeVisible();
  });
});

Ошибка дана:

● Splash › should have splash screen

    Failed: [Error: Error: Cannot find UI Element.
    Exception with Assertion: {
      "Assertion Criteria":  "assertWithMatcher:matcherForSufficientlyVisible(>=0.750000)",
      "Element Matcher":  "((!(kindOfClass('RCTScrollView')) && (respondsToSelector(accessibilityIdentifier) && accessibilityID('login'))) || (((kindOfClass('UIView') || respondsToSelector(accessibilityContainer)) && parentThatMatches(kindOfClass('RCTScrollView'))) && ((kindOfClass('UIView') || respondsToSelector(accessibilityContainer)) && parentThatMatches((respondsToSelector(accessibilityIdentifier) && accessibilityID('login'))))))",
      "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

Для отображения элементов на экране требуется время.Вы можете использовать свойство waitFor, которое предоставляет detox.

В большинстве случаев тесты должны автоматически синхронизироваться с приложением.Когда синхронизация не работает, у вас есть отказоустойчивость с помощью waitFor.

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

ПРИМЕЧАНИЕ. Для каждого вызова waitFor необходимо установить время ожидания с помощью withTimeout ().Вызов waitFor без установки тайм-аута ничего не сделает.

ПРИМЕЧАНИЕ: waitFor не сработает при достижении тайм-аута, вместо этого он просто перейдет к следующей строке.Чтобы убедиться, что ваши тесты работают так, как вы ожидаете, они добавят в следующую строку функцию Expect ().

Поэтому, основываясь на примере в документации, вы должны обновить свой тест до

it('should show login screen', async () => {
  await expect(element(by.id('splash'))).toBeVisible()
  await waitFor(element(by.id('login'))).toBeVisible().withTimeout(2000);
  await expect(element(by.id('login'))).toBeVisible()
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...