Проблема с xcode-ui-testing в XCode 9

UI Test для ios-приложения, разработанного на XCode 8 и Swift 3.2.

Возникла проблема, связанная с ScrollViews, collectionViews после обновления XCode до 9

Я могу нажать и получить доступ к элементам Buttons, StaticTexts, TextFields. Но я не могу нажать или получить доступ к элементам collectionviews, scrollviews, tableviews в XCode9 и Swift 3.2.

Предположим, что в предыдущей версии XCode (например, XCode 8.3) я использовал код app.collectionViews.collectionViews.cells.images.element(boundBy: 0).tap()
для нажатия на Домашнюю страницу (collectionViews). Но этот код не работает в XCode 9.

Я попытался получить точный элемент, используя функцию записи uitest. Используя запись, я получил код -

app.collectionViews.otherElements.containing(.textField, identifier:"StoryboardTitleTextField").children(matching: .collectionView).element.tap().

Но этот код тоже не работает. Итак, как я могу решить эту проблему?

Спасибо


person Ali Azam    schedule 13.11.2017    source источник


Ответы (1)


Недавно я также столкнулся с подобной проблемой после обновления моего проекта (Swift 3.2) до XCode 9.

Проблема в том

 app.collectionViews.collectionViews.cells.images.element(boundBy: 0).isHittable is returning false. 

Вот почему метод по умолчанию tap () не работает для иерархических элементов.

Я просто выполнил описанную ниже процедуру, и все сработало.

Шаг 1. Создайте расширение, как показано ниже.

extension XCUIElement {
func tryClick() {
    if self.isHittable {
        self.tap()
    }
    else {
        let coordinate: XCUICoordinate = self.coordinate(withNormalizedOffset: CGVector(dx:0.5, dy:0.5))
        coordinate.doubleTap()
        //coordinate.press(forDuration: 0.5)
    }
  }
}

Шаг 2: щелкните элемент, используя метод экземпляра, созданный выше, вместо использования метода прямого касания ().

app.collectionViews.collectionViews.cells.images.element(boundBy: 0).tryClick()

Примечание. Попробуйте использовать

CGVector(dx:0.5, dy:0.5) or CGVector(dx:0.0, dy:0.0)

Надеюсь, это решит вашу проблему. Для меня это сработало как обаяние.

person Mahmud Riad    schedule 27.11.2017
comment
Спасибо, махмуд. Отличная работа, которую вы проделали. Это тоже работает для меня. Можете ли вы сказать мне, что делает CGVector(dx:0.5, dy:0.5) здесь, в методе расширения. - person Ali Azam; 27.11.2017
comment
@AliAzam Это координаты x, y, которые вы хотите нажать на этот элемент. Пожалуйста, дайте мне знать, решило ли это вашу проблему или нет. - person Mahmud Riad; 28.11.2017