Tom*_*ina 5 xcode facebook ios xctest xcode-ui-testing
我想在Xcode中编写一个用于登录的UI测试FBDSKLoginKit.
然而,Facebook iOS SDK使用SFSafariViewController呈现给用户以便对她进行身份验证,遗憾的是,在Xcode 7中无法与SFSafariViewControllerUI测试进行交互.
任何想法如何测试Facebook登录而不与之交互SFSafariViewController?
Swift 3 Xcode 8 更新
func testFacebookLogin() {
let app = XCUIApplication()
// set up an expectation predicate to test whether elements exist
let exists = NSPredicate(format: "exists == true")
// as soon as your sign in button shows up, press it
let facebookSignInButton = app.buttons["Login With Facebook"]
expectation(for: exists, evaluatedWith: facebookSignInButton, handler: nil)
facebookSignInButton.tap()
// wait for the "Confirm" title at the top of facebook's sign in screen
let confirmTitle = app.staticTexts["Confirm"]
expectation(for: exists, evaluatedWith: confirmTitle, handler: nil)
// create a reference to the button through the webView and press it
let webView = app.descendants(matching: .webView)
webView.buttons["OK"].tap()
// wait for your app to return and test for expected behavior here
self.waitForExpectations(timeout: 10, handler: nil)
}
Run Code Online (Sandbox Code Playgroud)
扩大:
extension XCUIElement {
func forceTap() {
if self.isHittable {
self.tap()
} else {
let coordinate: XCUICoordinate = self.coordinate(withNormalizedOffset: .zero)
coordinate.tap()
}
}
Run Code Online (Sandbox Code Playgroud)
雨燕2
func testFacebookLogin()
{
let app = XCUIApplication()
// set up an expectation predicate to test whether elements exist
let exists = NSPredicate(format: "exists == true")
// as soon as your sign in button shows up, press it
let facebookSignInButton = app.buttons["Sign in with Facebook"]
expectationForPredicate(exists, evaluatedWithObject: facebookSignInButton, handler: nil)
facebookSignInButton.tap()
// wait for the "Confirm" title at the top of facebook's sign in screen
let confirmTitle = app.staticTexts["Confirm"]
expectationForPredicate(exists, evaluatedWithObject: confirmTitle, handler: nil)
// create a reference to the button through the webView and press it
var webView = app.descendantsMatchingType(.WebView)
webView.buttons["OK"].tap()
// wait for your app to return and test for expected behavior here
}
Run Code Online (Sandbox Code Playgroud)
就我而言,我还必须处理断言失败:UI 测试失败 - 无法通过 forceTap() 扩展找到按钮错误的命中点:
extension XCUIElement {
func forceTap() {
if self.hittable {
self.tap()
} else {
let coordinate: XCUICoordinate = self.coordinateWithNormalizedOffset(CGVectorMake(0.0, 0.0))
coordinate.tap()
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2363 次 |
| 最近记录: |