web-dev-qa-db-ja.com

XcodeUIテストを使用したUIWebViewのテスト

Xcode UI Testingの新しいXCTest FrameworkXcode 7 GMとともに使用しています。シンプルなUIWebViewを備えたアプリ(ナビゲーションコントローラー+ Webビューとボタンを備えたビューコントローラー)があり、次のシナリオを確認したいと思います。

  1. Webビューがページをロードしますwww.example.com
  2. ユーザーがボタンをタップする
  3. Webビューは次のURLでページをロードします:www.example2.com

ボタンを押した後、UIWebViewにロードされているページを確認したい。これは現在UIテストで可能ですか?

実際、私は次のようなWebビューを取得しています。

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

表示されている実際のURLのように、whichページがロードされていることを知ることはできません。ただし、アサートコンテンツが画面に表示されていることを確認できます。 UIテストでは、 XCUIElementQueryUIWebViewの両方でうまく機能するリンク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つのリンクに沿った 作業テストホスト もあります。

11
Joe Masilotti

ページのタイトルが異なる場合は、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)
3
Sandy