Xcode UI Testing
の新しいXCTest Framework
をXcode 7 GM
とともに使用しています。シンプルなUIWebViewを備えたアプリ(ナビゲーションコントローラー+ Webビューとボタンを備えたビューコントローラー)があり、次のシナリオを確認したいと思います。
www.example.com
www.example2.com
ボタンを押した後、UIWebViewにロードされているページを確認したい。これは現在UIテストで可能ですか?
実際、私は次のようなWebビューを取得しています。
let app:XCUIApplication = XCUIApplication()
let webViewQury:XCUIElementQuery = app.descendantsMatchingType(.WebView)
let webView = webViewQury.elementAtIndex(0)
表示されている実際のURLのように、whichページがロードされていることを知ることはできません。ただし、アサートコンテンツが画面に表示されていることを確認できます。 UIテストでは、 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()
コードを掘り下げたい場合は、2つのリンクに沿った 作業テストホスト もあります。
ページのタイトルが異なる場合は、Webページのタイトルを確認できます。
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)