如何创建一个在 XCTest 中定义按钮或文本字段的 swift 文件?

Posted

技术标签:

【中文标题】如何创建一个在 XCTest 中定义按钮或文本字段的 swift 文件?【英文标题】:How to create a swift file that define buttons or textFields in XCTest? 【发布时间】:2016-10-20 04:47:24 【问题描述】:

如何在 XCTest 中创建一个定义按钮或文本字段的 swift 文件?我有一个文件 UITest.我想在其他 swift 文件中定义 UITest 中的元素,但这是错误的。这就是我要找的:

import Foundation

class HomeVC

    let app = XCUIApplication()
    let tabBarsQuery = app.tabBars
    let tablesQuery = app.tables

    let btn = app.buttons["a"]
    let btn2 = app.buttons.element(boundBy: 0)
    let txt = app.tables.staticTexts["a"]


我想在我的 UI 测试中使用这些元素:

import XCTest

class UITests: XCTestCase 

    let config = TestConfig()
    let log = Log()

    override func setUp() 
        super.setUp()

        // Put setup code here. This method is called before the invocation of each test method in the class.

        // In UI tests it is usually best to stop immediately when a failure occurs.
        continueAfterFailure = false
        // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method.
        XCUIApplication().launch()

        // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this.
    

    override func tearDown() 
        // Put teardown code here. This method is called after the invocation of each test method in the class.
        super.tearDown()

    
    func testExample() 

    //Call HomeVC
    let homeVC = HomeVC()
    homeVC.btn.tap()
    homeVC.btn2.tap()
    homeVC.txt.tap()

有没有可用的解决方案?请指导我通过适当的解决方案。 谢谢大家!

【问题讨论】:

【参考方案1】:

在您当前的代码中,那些为XCUIElements 而不是XCUIElementQuerys 的常量会在HomeVC 类的初始化时立即解析。如果在初始化 HomeVC 时按钮不存在,则这些属性将无法使用。

可以使属性变得惰性,这意味着它们将在首次使用时解决,而不是在对象初始化时解决,但这不是可扩展模型。

应该使用页面对象模型,您可以在其中为每个离散页面创建一个类。该类可以封装不同元素的所有路径和标识符,并将元素公开为计算属性。这意味着每次访问元素查询时都会使用当时最新的视图层次结构来解析元素查询。

我的博客上有更多关于在 Swift 中使用 XCTest 实现页面对象模型的信息:http://qualitytesting.tumblr.com/post/144462182209/xctest-and-the-page-object-model

【讨论】:

以上是关于如何创建一个在 XCTest 中定义按钮或文本字段的 swift 文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有静态文本的情况下在 XCTest 中快速测试 Webview 是不是加载

文本字段内切换按钮的 IOS UI 测试用例

如何在自定义元素或按钮小部件上触发事件?

如何使用文本字段 UITableView 从自定义单元格中获取值?

XCTest 找不到文本字段

如何通过按钮自动创建标签?