使用XCTesting来点击tableview单元格

时间:2016-05-04 10:59:14

标签: ios swift xcode7 xcode-ui-testing ui-testing

我刚刚开始使用Xcode 7中引入的新Xcode UI测试框架。 我做了第一次非常简单的测试时遇到了一些问题,并且想知道我是否做错了。

我有一个结构简单的应用程序:

  • 第一个场景是一个静态表视图,带有静态单元格。完全配置 在故事板中。此表视图中的唯一单元格具有标签 '启动UI测试'
  • 选择此链接到动态表格视图,然后在 导航栏是一个系统'播放'按钮(开始 下载内容)。

我的第一个测试就是当您选择“开始UI测试”时。单元格,您将移动到导航栏中具有播放按钮的视图。 我的问题是,如果我添加一个sleep(2)调用,或添加一个断点并停止执行之前按下表视图单元格上的tap()调用,一切都按预期工作,应用程序移动到在下一个视图中,测试成功,播放按钮被检测为存在。但是,如果此时我没有添加睡眠呼叫(2),则tap()似乎什么都不做,应用程序不会导航到下一个视图,因此测试失败,因为它无法找到该游戏按钮(应用程序仍在视图1上)。

  • 是否有必要在每次细胞敲击动作之前调用sleep(2)?
  • 这是一个错误吗?
  • 有没有更好的解决方案?

以下代码:

func testExample() {

        let app = XCUIApplication()
        let tablesQuery = app.tables
        let firstCell = tablesQuery.element.cells.staticTexts["Start UI Tests"]

        sleep(2) //Only by adding in a call to sleep() before does the tap() call do anything
        firstCell.tap()

        let exists = NSPredicate(format: "exists == true")
        let playButton = app.navigationBars["Live_App_Demo.UITestsTableView"].buttons["Play"]

        expectationForPredicate(exists, evaluatedWithObject: playButton, handler: nil)
        waitForExpectationsWithTimeout(5, handler: nil)

        XCTAssert(playButton.exists)
    }

0 个答案:

没有答案