标签: xcode-ui-testing

在Xcode 7中进行UI测试时,应用程序资源不可用

我正在尝试通过快照当前屏幕元素(标签,图像,按钮)并将其可访问性信息保存到json文件来扩展Xcode 7中的新UI测试功能.

我们的想法是,在以后运行UI测试时,可以获取当前屏幕快照并与现有屏幕快照进行比较,如果找到其他元素或缺少元素,测试将失败.

遗憾的是,即使使用正确的目标,UI测试期间似乎也无法使用应用程序资源,因此无法加载json文件进行比较.以下标准代码无法加载资源:

guard let resourcePath = NSBundle.mainBundle ().pathForResource ("StartScreenShapshot", ofType:"json") else {
        XCTFail ("can't load resource StartScreenShapshot")
        return
    }
Run Code Online (Sandbox Code Playgroud)

我可以理解为什么Apple采用这种沙盒方法,因为UI测试应该基于屏幕上发生的事情,并且不需要访问应用程序的工作,但是不能访问资源包是一件痛苦的事.

那么有没有办法在Xcode 7 UI测试期间从应用程序或本地其他方式加载本地资源?

在本地(自动)保存文件也是一个巨大的优势,可以节省手动创建它们.

testing xcode ios xcode7 xcode-ui-testing

5
推荐指数
1
解决办法
1175
查看次数

你可以并行运行Xcuitests吗?

想知道是否有人找到了并行运行Xcuitests的方法.非常确定此功能不是内置的,但如果您可以从命令行运行特定的Xcuitest,则可以编写可以将其分布在多台计算机上的脚本.

那么子问题,你如何从命令行运行特定的Xcuitest?

我很感激,如果有人玩这个并且可以分享他们所学到的东西,或者他们有什么资源可以指出我.谢谢!

testing xcode ios ios7 xcode-ui-testing

5
推荐指数
1
解决办法
1007
查看次数

Swift UI测试 - 用户通知系统警报

我正试图通过跟随帖子中提供的流程来通过用户通知系统警报,这是在UI测试备忘单和SO上的一些其他帖子中提到的相同流程.

Xcode7 | Xcode UI测试| 如何处理位置服务警报?

我有一个奇怪的问题,我无法按下确定按钮.这是我的代码

    addUIInterruptionMonitorWithDescription("User Notifications") { (alert) -> Bool in
        let okButton = alert.buttons["OK"]
        let dontAllowButton = alert.buttons["Don\u{2019}t Allow"]

        print(okButton.frame)
        print(dontAllowButton.frame)

        okButton.tap() // Taps the dontAllowButton ??

        return true
    }

    launchFinished() // wait for app to load and notification to show
    app.tap()
Run Code Online (Sandbox Code Playgroud)

我使用后,测试成功进入处理程序,app.tap()并且找到并存在按钮,但实际上似乎无法点击确定按钮!当我尝试点击"确定"按钮时,它会点击"不允许"按钮,当我尝试点击"不允许"按钮时,它不会点击任何内容.

按钮的框架也与屏幕上的内容不匹配.

用户通知警报按钮

当我调试并查看它们的帧时:

okButton =(431.5,377.0,44.0,135.0)

dontAllowBtn =(431.5,512.0,44.0,135.0)

这似乎表明它们具有相同的X值,并且一个在另一个之上,这实际上没有任何意义.

此外,我已经尝试使用XCUICoordinate在按钮附近创建一些坐标并点击坐标而不是按钮,这对我在应用程序的其他位置工作正常,但似乎没有坐标点击注册.

我如何通过此警报?

编辑

我在使用Xcode 7.1.1,并且位置服务也出现了同样的问题.它似乎与横向模式有关,这使得它无法正常工作.当我创建一个新的测试应用程序并运行上面的代码时,它在纵向模式下工作正常.当我将其切换到横向模式时,它具有上述行为并且不起作用.

编辑2

我向Apple提交了一份错误报告.

swift xcode-ui-testing

5
推荐指数
0
解决办法
1047
查看次数

如何使用 XCTest 对基于文档的应用程序进行 UI 测试?

鉴于以下设置:

  • 用 Swift 编写的基于文档的 OS X 应用程序
  • OS X El Capitan 开发机
  • Xcode 7.x
  • 新/升级的 XCTest 框架

如何使用 XCTest 框架对应用程序的基于文档的部分进行 UI 测试?


与基于文档的功能无关的常规单元或 UI 测试很容易,但我看不到如何在基于文档的位上进行 UI 测试,因为在 UI 测试中,我们被禁止进入应用程序,例如,嘲笑 NSDocument 类。

我听到的一个建议是在测试资源文件夹中创建夹具文件/文件夹(取决于您的基于文档的应用程序需要什么),并以某种方式让测试打开它。但是有没有更好的解决方案?

macos cocoa xctest xcode-ui-testing

5
推荐指数
1
解决办法
626
查看次数

UITest:检查是否存在带前缀的文本

在进行UI测试时,我可以测试文本是否存在,如下所示:

XCTAssertTrue(tablesQuery.staticTexts["Born: May 7, 1944"].exists)
Run Code Online (Sandbox Code Playgroud)

但是,如果我只知道前缀,我如何测试文本是否存在?

我想做的事情如下:

XCTAssertTrue(tablesQuery.staticTextWithPrefix["Born: "].exists)
Run Code Online (Sandbox Code Playgroud)

甚至更好:

XCTAssertTrue(tablesQuery.staticTextWithRegex["Born: .+"].exists)
Run Code Online (Sandbox Code Playgroud)

xcode ios swift xcode-ui-testing

5
推荐指数
1
解决办法
1854
查看次数

XCUITest - 元素和后代都没有键盘焦点

我正在测试向我的应用程序添加评论,在我的其他 UI 测试中,我使用了该typeText功能并且一切正常。我还单击了“连接硬件键盘”关闭。应用程序终止测试并显示错误 UI 测试失败 - 在 addComment 方法期间,元素和任何后代都没有键盘焦点。有任何想法吗?

  func testAddComment() {
    let featuredPage = self.app.tabBars["Featured"]
    if featuredPage.exists {
        featuredPage.tap()
    }
    sleep(2)
    let featuredOffer = self.app.tables.cells.elementBoundByIndex(1)
    if featuredOffer.exists {
        featuredOffer.tap()
    }
    sleep(2)
    let addComment = self.app.staticTexts["Add a comment"]
    if addComment.exists {
        addComment.tap()
        addComment.typeText("Test comment")
    }
    sleep(2)
    let postComment = self.app.buttons["Send"]
    if postComment.exists {
        postComment.tap()
    }
    sleep(2)
}
Run Code Online (Sandbox Code Playgroud)

xcode swift xcode-ui-testing

5
推荐指数
3
解决办法
6277
查看次数

UI测试标签栏控制器

我已经构建了一个带有3个选项卡的简单标签栏.

在此输入图像描述

我想运行UI测试以确保如果用户单击选项卡栏项,则显示正确的视图控制器.我该怎么做呢?下面是我要开始的代码,只是不知道如何编写我的断言.

func testTabBarMyProfileButton() {
    let tabBarsQuery = XCUIApplication().tabBars
    tabBarsQuery.buttons["My Profile"].tap()
}

func testTabBarGraphsButton() {
    let tabBarsQuery = XCUIApplication().tabBars
    tabBarsQuery.buttons["Graphs"].tap()
}

func testTabBarAboutButton() {
    let tabBarsQuery = XCUIApplication().tabBars
    tabBarsQuery.buttons["About"].tap()
}
Run Code Online (Sandbox Code Playgroud)

xcode ios swift xcode-ui-testing

5
推荐指数
2
解决办法
4196
查看次数

入口点 (_main) 未定义。对于架构 x86_64 - 仅适用于 XCode UITesting

我只有在尝试运行 UITests 时才会收到此错误。我没有使用故事板,构建应用程序运行良好,单元测试也运行良好。

  • 在我的 AppDelegate 我有 @UIApplicationMain
  • 我的 info.plist 中没有故事板文件或对故事板文件的引用。
  • 尝试清理/重建,重新启动 xcode

即使记录 UITests 也能正常工作并且能够打开应用程序。只是当我尝试运行实际测试时,我才收到错误。

也许我在某处缺少目标或需要向 XCUIApplication 启动参数添加一些内容?有任何想法吗?

xcode ios swift xcode-ui-testing

5
推荐指数
1
解决办法
4232
查看次数

XCUITest 应用程序快捷方式

有没有办法在 XCUITests 中测试 UIApplication 快捷方式?

我知道为了在模拟器中测试 3d 快捷方式,您需要一个带有强制触摸功能的触控板,但我想知道是否可以编写测试我的快捷方式的测试。

xctest swift xcode-ui-testing 3dtouch

5
推荐指数
1
解决办法
737
查看次数

在 UI 测试中将模拟数据插入核心数据

我的应用程序目前使用 Core Data 作为持久性,我想用一些模拟数据做一些 UI 测试。目前,我正在使用之前在开发时存储的数据运行 UI 测试。理想情况下,我想在 MOC 中插入一些模拟数据,以便我编写更多的 UI 测试。对于我的单元测试,我将 JSON 文件中的数据插入到 setup 函数中的托管对象上下文中。我想知道这是否可以用于 UI 测试?

我试过在网上查找这个,但我从人们那里读到了很多不同的答案,我现在很困惑。如果这是不可能的,有人可以推荐使用核心数据进行 UI 测试的最佳实践吗?

core-data swift xcode-ui-testing

5
推荐指数
1
解决办法
1447
查看次数

标签 统计

xcode-ui-testing ×10

swift ×7

xcode ×6

ios ×5

testing ×2

xctest ×2

3dtouch ×1

cocoa ×1

core-data ×1

ios7 ×1

macos ×1

xcode7 ×1