Как нажать на определенную точку с помощью Xcode UITests
Я хочу использовать тесты Xcode UI с Fastline Снимок чтобы сделать скриншоты приложения Cordova. В принципе, поскольку все мое приложение-это просто веб-представление, все вспомогательные методы Xcode UI test становятся неактуальными, и я просто хочу нажать на определенные точки, например tap(x: 10, y: 10)
должен произвести кран в точке {10px; 10px}
.
это, вероятно, очень просто, но я не могу понять, как это сделать.
спасибо.
3 ответов
вы можете нажать определенную точку с помощью XCUICoordinate
API. К сожалению, вы не можете просто сказать "нажмите 10,10", ссылаясь на координату пикселя. Вам нужно будет создать координату с относительным смещением к фактическому виду.
мы можем использовать упомянутое веб-представление для взаимодействия с относительной координатой.
let app = XCUIApplication()
let webView = app.webViews.element
let coordinate = webView.coordinateWithNormalizedOffset(CGVector(dx: 10, dy: 10))
coordinate.tap()
Примечание, но вы пробовали взаимодействовать с веб-видом напрямую? У меня был большой успех, используя app.links["Link title"].tap()
или app.staticTexts["A different link title"].tap()
. вот демонстрационное приложение, которое я собрал, демонстрируя взаимодействие с веб-представлением.
обновление: как отметил Михал В. В комментариях, теперь вы можете нажать координату напрямую, не беспокоясь о нормализации смещение.
let normalized = webView.coordinateWithNormalizedOffset(CGVector(dx: 0, dy: 0))
let coordinate = normalized.coordinateWithOffset(CGVector(dx: 10, dy: 10))
coordinate.tap()
обратите внимание, что я передаю 0,0 нормализованному вектору, а затем фактическую точку, 10,10, второму вызову.
@joe чтобы пойти немного дальше от подхода Джо Масилотти, я положил свой в extension
и дал предложных фраз глобальные и локальные параметры.
func tapCoordinate(at x xCoordinate: Double, and y yCoordinate: Double) {
let normalized = app.coordinate(withNormalizedOffset: CGVector(dx: 0, dy: 0))
let coordinate = normalized.withOffset(CGVector(dx: xCoordinate, dy: yCoordinate))
coordinate.tap()
}
давая глобальное идентифицируемое имя, я могу легко понять экземпляр, например:
tapCoordinate(at x: 100, and y: 200)
<something>.coordinate(withNormalizedOffset: CGVector.zero).withOffset(CGVector(dx:10,dy:60)).tap()
перейти (0,0) К нормализованному вектору, а затем к фактической точке (10,10)