Тестирование UIWebView с помощью Xcode UI Testing

Я использую новый Xcode UI Testing от XCTest Framework с Xcode 7 GM. У меня есть приложение с простым UIWebView (это просто контроллер навигации + контроллер представления с веб-представлением и кнопкой), и я хочу проверить следующий сценарий:

  1. Веб-просмотр загружает страницу www.example.com
  2. Пользователь нажимает кнопку
  3. Web View загружает страницу с URL: www.example2.com

Я хочу проверить, какая страница загружается в UIWebView после нажатия кнопки. Возможно ли это прямо сейчас с помощью тестирования пользовательского интерфейса?

На самом деле я получаю такое веб-представление:

let app:XCUIApplication = XCUIApplication()
let webViewQury:XCUIElementQuery = app.descendantsMatchingType(.WebView)
let webView = webViewQury.elementAtIndex(0)

person Apan    schedule 17.09.2015    source источник


Ответы (2)


Вы не сможете определить, какая страница загружена, как в фактическом отображаемом URL-адресе. Однако вы можете проверить, что на экране отображается содержимое assert. Тестирование пользовательского интерфейса предоставляет XCUIElementQuery для ссылки, которые отлично работают как с UIWebView, так и с WKWebView.

Имейте в виду, что страница загружается не синхронно, поэтому вам придется дождаться появления фактических элементов.

let app = XCUIApplication()
app.launch()

app.buttons["Go to Google.com"].tap()

let about = self.app.staticTexts["About"]
let exists = NSPredicate(format: "exists == 1")
expectationForPredicate(exists, evaluatedWithObject: about, handler: nil)

waitForExpectationsWithTimeout(5, handler: nil)
XCTAssert(about.exists)

XCTAssert(app.staticTexts["Google Search"].exists)
app.links["I'm Feeling Lukcy"].tap()

Также существует рабочий тестовый хост, который идет вместе с двумя ссылками, если вы хотите копаться в коде.

person Joe Masilotti    schedule 17.09.2015

Если заголовки страниц отличаются, вы можете проверить заголовок веб-страницы.

let app = XCUIApplication()
app.launch()
//Load www.example.com

//Tap on some button    
app.links["Your button"].tap()

//Wait for www.example2.com to load
let webPageTitle = app.otherElements["Example2"]
let exists = NSPredicate(format: "exists == 1")
expectationForPredicate(exists, evaluatedWithObject: webPageTitle, handler: nil)
waitForExpectationsWithTimeout(5, handler: nil)
person Sandy    schedule 25.09.2015
comment
это отличная идея, к сожалению, у меня есть одно название. Но может у кого-то будет другая ситуация. Спасибо! - person Apan; 25.09.2015