Как перетащить элемент для тестирования xcode-ui в Xcode 9

Тест пользовательского интерфейса для ios-приложения, разработанного в Xcode 8 и swift 3.2.

Я столкнулся с проблемой перетаскивания после обновления Xcode версии 8 до 9.

Я хотел бы перетащить элемент [i.e. button] на другой элемент [i.e. on homepage].

Для Xcode 8 я реализовал его, используя метод ниже:

let sourceElement = app.buttons["Video_Button"]

let destElement = app.scrollViews.scrollViews.images.element(boundBy: 0)

sourceElement.press(forDuration: 0.5, thenDragTo: destElement)

Но приведенный выше код не работает в Xcode 9 и Swift 3.2.


person Ali Azam    schedule 14.12.2017    source источник
comment
Можете ли вы объяснить немного больше, как это не работает? Что происходит, когда вы запускаете тест?   -  person lagoman    schedule 15.12.2017
comment
При выполнении строки sourceElement.press(forDuration: 0.5, thenDragTo: destElement) возвращается ошибка и выход из системы.   -  person Ali Azam    schedule 15.12.2017
comment
Это происходит только в Xcode 9   -  person Ali Azam    schedule 15.12.2017
comment
Какой провал? Пожалуйста, выкладывайте логи сюда.   -  person lagoman    schedule 15.12.2017
comment
Лог немного длинный. Пожалуйста, заходите в чат или пришлите мне свой адрес электронной почты.   -  person Ali Azam    schedule 15.12.2017
comment
Вы всегда можете отредактировать свой вопрос и опубликовать журнал здесь.   -  person lagoman    schedule 15.12.2017
comment
Давайте продолжим обсуждение в чате.   -  person Ali Azam    schedule 15.12.2017


Ответы (1)


На самом деле проблема в iOS 11.0.

В iOS 11.0 некоторые иерархические элементы не могли быть нажаты или нажаты или долго нажаты.

Вы должны работать с центральной точкой элемента, чтобы выполнить нажатие или нажатие или долгое нажатие.

** Фрагмент кода для решения проблемы вставлен ниже.

Сначала создайте метод расширения для нажатия на центр элемента и перетащите этот элемент в центр целевого элемента.

Способ расширения указан ниже

extension XCUIElement {

func dragAndDropUsingCenterPos(forDuration duration: TimeInterval,
                               thenDragTo destElement: XCUIElement) {

    let sourceCoordinate: XCUICoordinate = self.coordinate(withNormalizedOffset: CGVector(dx:0.5, dy:0.5))

    let destCorodinate: XCUICoordinate = destElement.coordinate(withNormalizedOffset: CGVector(dx:0.5, dy:0.5))

    sourceCoordinate.press(forDuration: duration, thenDragTo: destCorodinate)
  }

}

Затем вызовите метод расширения, как показано ниже

 sourceElement.dragAndDropUsingCenterPos(forDuration: 0.5, thenDragTo: destElement)

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

person Mahmud Riad    schedule 15.12.2017
comment
Спасибо, Махмуд, и оценил, это работает как шарм. - person Ali Azam; 15.12.2017