如何在 Xcode 中编写涵盖 Facebook 登录的 UI 测试?

2023-12-20

我想在 Xcode 中编写一个 UI 测试,涵盖登录FBDSKLoginKit https://cocoapods.org/pods/FBSDKLoginKit.

然而,Facebook iOS SDK 使用SFSafariViewController https://developers.facebook.com/blog/post/2015/10/29/Facebook-Login-iOS9/呈现给用户以验证她的身份,不幸的是,没有办法与之互动SFSafariViewController在 Xcode 7 的 UI 测试中 https://stackoverflow.com/questions/32763010/any-way-to-automate-sfsafariviewcontroller-in-ui-tests.

任何想法如何测试 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)        
}

扩大:

extension XCUIElement {
    func forceTap() {
        if self.isHittable {
            self.tap()
        } else {
            let coordinate: XCUICoordinate = self.coordinate(withNormalizedOffset: .zero)
            coordinate.tap()
        }
    }
}

经过测试和验证,效果很好!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Xcode 中编写涵盖 Facebook 登录的 UI 测试? 的相关文章

随机推荐

  • 为什么 eclipse 会创建 .settings 目录?

    我注意到 eclipse 最近创建了一个 settings 目录 里面有 1 个文件 我想知道是否应该将其添加到版本控制中 SVN 另外 这是新的吗 我已经使用eclipse很长一段时间了 但从未注意到它 目录中文件的内容是这样的 Sun
  • 如何在 JavaScript 中向 MVC 模型添加项目?

    我想使用 java 脚本动态地将项目添加到模型中的列表中 如何使 MVC 将新项目绑定到模型 我的模型 public class Garage public string Name get set public string Locatio
  • VBA 变量何时实例化

    我很犹豫要不要问 但我找不到任何文档for VBA 相关 但我不认为是骗人的 C 全局变量什么时候创建 https stackoverflow com questions 19618801 when are global variables
  • 如何忽略 PostgreSQL 窗口函数中的空值?或返回列中的下一个非空值

    假设我有下表 User id COL1 COL2 1 1 1 2 1 2421 1 1 1 3542 2 1 我需要另一列指示每行的下一个非空 COL1 值 因此结果如下所示 User id COL1 COL2 COL3
  • 发生未处理的异常:项目目标不存在

    我写的时候遇到一个问题 ionic cordova prepare android 知道我创建的每个新项目都会发生这种情况 请帮忙 该问题是由缺少所需的构建器引起的angular json文件 要安装这些构建器 请运行 ng add ion
  • Django Tastypie:“通过”关系实现多对多

    我已经对这个问题进行了很多搜索 并在 Stack Overflow 上浏览了一堆相关问题 但似乎没有关于如何 通过 中间模型 或者可能是 实现多对多关系的明确答案我错过了它 我有一个名为 Sample 的模型 它与 Region 具有多对多
  • 如何将 cex 中的点大小转换为绘图单位?

    我试图计算出图中 x 和 y 方向上的点的半径有多大 它们的大小由cex 我想创建一个需要这些信息的绘图函数 在我看来好像cex这将是一个神奇的参数 但没有人真正知道它到底会做什么 我正在创建一个情节png功能 我设置了图表的宽度和高度 我
  • 在cygwin中运行并编译java代码

    我刚刚安装cygwin我想知道如何编译和运行我的java代码cygwin 我的 java 代码在我的桌面上保存在名为 Java 的文件中 假设您安装了适用于 Windows 的 Java SDK 在最简单的情况下 确保 将 java 添加到
  • Flutter:关于数据更改的 Firebase 推送通知

    收到评论后 我已将以下代码部署到我的 firebase 项目中 并且已成功部署 但没有向我发送任何通知 请在此处查看我的 Firebase 实时数据库屏幕截图 以便更好地理解 现已解决 它将仅向一个 ID 即我的管理设备 发送通知 工作代码
  • 将弱学习器组合成强分类器

    如何将少数弱学习器组合成一个强分类器 我知道公式 但问题是 在我读过的每一篇关于 AdaBoost 的论文中 只有公式 没有任何示例 我的意思是 我的学习器和权重都很弱 所以我可以按照公式告诉我的去做 将学习器乘以它的权重 然后加上另一个乘
  • 具有命令绑定的多个参数

    我有一个带有命令绑定并使用 Prism 库的文本块 这是 XAML 部分
  • 关于C# Expression.MakeBinary(),如何使用

    About Expression MakeBinary BinaryExpression MakeBinary ExpressionType binaryType Expression left Expression right bool
  • 如何在SQL SERVER中使用sqb文件恢复数据库

    我有一个带有 sqb 扩展名的文件 例如 clark sqb 我应该如何使用 sqb 文件恢复数据库 谢谢 SQB 文件是使用 RedGate 的 SQL 备份工具创建的 他们提供了一个名为的命令行工具sqb2mtf可用于转换为本机 SQL
  • Java 8 接口中静态方法的用途是什么?

    为什么 Java 8 支持静态方法 下面代码中 main 方法中的两行有什么区别 package sample public class A public static void doSomething System out println
  • 无法加载文件或程序集“Microsoft.Practices.Unity”

    我正在尝试升级Unity版本 2 1 505 2 但是当我运行该应用程序时 我得到以下信息FileLoadException 无法加载文件或程序集 Microsoft Practices Unity 版本 2 0 414 0 文化 中性 P
  • 如何批量限制事件?

    如何批量限制事件 比方说 我想在用户输入时触发文件保存 但执行文件系统访问的频率不超过每 100 毫秒一次 块事件处理程序示例 on
  • 通过使用 mmap() 在进程之间共享内存

    我使用的是Linux 2 6 我有一个环境 其中两个进程通过消息传递模式的简单实现来模拟 使用共享内存 数据交换 我有一个客户端进程 从父进程 即服务器 分叉 它将结构 消息 写入创建的内存映射区域 在分叉之后 message m mmap
  • 枚举的扩展方法,而不是枚举的实例

    我对我的事物有一个枚举 如下所示 public enum Things OneThing AnotherThing 我想为这个枚举编写一个扩展方法 类似于普莱斯的回答在这里 https stackoverflow com questions
  • 使用 liquibase 更新表中的一行

    我希望有人可以验证这是否是正确的语法以及使用 liquibase 填充数据库的正确方法 我想要的只是更改表中一行的值 我这样做是这样的
  • 如何在 Xcode 中编写涵盖 Facebook 登录的 UI 测试?

    我想在 Xcode 中编写一个 UI 测试 涵盖登录FBDSKLoginKit https cocoapods org pods FBSDKLoginKit 然而 Facebook iOS SDK 使用SFSafariViewControl