11

我正在使用new Xcode UI Testingfrom 。我有一个带有简单 UIWebView 的应用程序(它只是一个导航控制器 + 带有 Web 视图和按钮的视图控制器),我想检查以下场景:XCTest FrameworkXcode 7 GM

  1. Web 视图加载页面www.example.com
  2. 用户点击按钮
  3. Web 视图加载一些带有 URL 的页面:www.example2.com

按下按钮后,我想检查 UIWebView 中加载了哪个页面。现在可以通过 UI 测试实现吗?

实际上我得到这样的网络视图:

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

2 回答 2

13

您将无法判断加载了哪个页面,就像显示的实际 URL 一样。但是,您可以检查断言内容是否在屏幕上。UI 测试提供了一个XCUIElementQuery适用于和的链接UIWebViewWKWebView

请记住,页面不会同步加载,因此您必须等待实际元素出现

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()

如果您想深入研究代码,还有一个与两个链接一起工作的测试主机。

于 2015-09-17T10:15:27.947 回答
3

如果页面的标题不同,您可以检查网页的标题。

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)
于 2015-09-25T00:46:06.377 回答