Проблемы с синхронизацией EarlGrey всегда истекают

У меня проблемы с функцией синхронизации EarlGrey. Я пытаюсь создать простой тестовый пример для моего приложения, который в основном проверяет, появляется ли кнопка входа в систему.

func testExample() {
    let success = GREYCondition(name: "Wait for action view controller", block: { () -> Bool in
        if let rootVC = UIApplication.shared.keyWindow?.rootViewController, rootVC is ValuePropsViewController {
            return true
        }
        else {
            return false
        }
    }).wait(withTimeout: 10)
    GREYAssertTrue(success, reason: "Action view controller should appear within 5 seconds")
    EarlGrey.select(elementWithMatcher: grey_accessibilityID("loginButton")).assert(grey_sufficientlyVisible())
}

Тем не менее, он всегда истекает, и я получаю следующее сообщение об ошибке. Я проверяю скриншоты, и при сбое отображается правильный экран.

Exception Name: AssertionFailedException
Exception Reason: Timed out while waiting to perform assertion.
Exception with Assertion: {
  "Assertion Criteria" : "assertWithMatcher: matcherForSufficientlyVisible(>=0.750000)",
  "Element Matcher" : "(respondsToSelector(accessibilityIdentifier) && accessibilityID('loginButton'))"
}

Exception Details: Error Trace: [
  {
    "Description" : "Failed to execute block because idling resources below are busy.",
    "Description Glossary" :     {
      "animateWithDuration:delay:options:animations:completion:" : "<NSObject: 0x610000203a30> caused the App to be in busy state for 6.8 seconds.",
      "performSelector @selector(tick) on VAAppDelegate" : "Delayed performSelector caused the App to be in busy state for 2 seconds."
    },
    "Domain" : "com.google.earlgrey.GREYUIThreadExecutorErrorDomain",
    "Code" : "0",
    "File Name" : "GREYUIThreadExecutor.m",
    "Function Name" : "-[GREYUIThreadExecutor executeSyncWithTimeout:block:error:]",
    "Line" : "235",
    "TestCase Class" : "EarlGreyVidaTests.MyFirstEarlGreyTest",
    "TestCase Method" : "testExample"
  },
  {
    "Description" : "Failed to execute assertion within 30 seconds.",
    "Domain" : "com.google.earlgrey.ElementInteractionErrorDomain",
    "Code" : "4",
    "File Name" : "GREYElementInteraction.m",
    "Function Name" : "-[GREYElementInteraction assert:error:]",
    "Line" : "418",
    "TestCase Class" : "EarlGreyVidaTests.MyFirstEarlGreyTest",
    "TestCase Method" : "testExample"
  }
]

Это работает, если я отключаю синхронизацию:

GREYConfiguration.sharedInstance().setValue(false, forConfigKey: kGREYConfigKeySynchronizationEnabled)

Я что-то не так делаю? Все мои тесты, кажется, хорошо работают с отключенной синхронизацией. Должен ли я оставить это?

1 ответ

Решение

Вы не должны отключать синхронизацию - это то, что делает EarlGrey EarlGrey и делает ваши тесты стабильными и полезными.

Тем не менее, похоже, что у вас есть анимация или задержанный executeSelector, который отслеживает EarlGrey, чтобы заставить его всегда думать, что ваше приложение занято. Одна вещь, которую вы можете настроить: если вы посмотрите на заголовок GREYConfiguration.h, вы можете найти различные переменные конфигурации, которые вы можете изменить в зависимости от поведения вашего приложения.

Отказ от ответственности: я являюсь частью команды EarlGrey.

Другие вопросы по тегам