如何在 Swift 中 UITest 更改 UIButton 的图像?

Posted

技术标签:

【中文标题】如何在 Swift 中 UITest 更改 UIButton 的图像?【英文标题】:How can I UITest the change of the image of a UIButton in Swift? 【发布时间】:2018-07-28 19:47:06 【问题描述】:

当我点击UIButton 时,图像应该会改变以反映其新状态(例如记录 -> 暂停等)。

在我的 XCode UITest 函数中,如何在点击后询问按钮当前图像以断言其图像已正确更改为正确图像的 .png 文件?

【问题讨论】:

相关——似乎不能直接:***.com/a/31251379/3151675 这在 XCTest UI 测试中是不可能的。您需要对分配的图像进行单元测试,因为 UI 测试是功能性的,而不是视觉的。 【参考方案1】:

我是这样做的

// Find the button by the image name
// In this example the image's names are "record_image" and "pause_image"
// "_" are replaced by " " in the image name when searching
let recordButton = XCUIApplication().buttons["record image"]
recordButton.tap()
XCTAssertFalse(recordButton.exists) // Record button won't exist anymore since the image has changed
let pauseButton = XCUIApplication().buttons["pause image"]
XCTAssertTrue(pauseButton.exists)
pauseButton.tap()
XCTAssertFalse(pauseButton.exists)
XCTAssertTrue(recordButton.exists)

【讨论】:

【参考方案2】:

我确实喜欢这样,不是最好的方法,但对我来说很有效,

每次图像更改我都会更改可访问性标识符,然后检查 access.ids

public func setFollowed(_ isFollowed: Bool) 
    if isFollowed 
        followButton.setImage(UIImage(named: "followed-green-icon"), for: .normal)
        followButton.accessibilityIdentifier = "ProfileInfoView_followButton_followed"
    
    else 
        followButton.setImage(UIImage(named: "follow-blue-icon"), for: .normal)
        followButton.accessibilityIdentifier = "ProfileInfoView_followButton_follow"
    

示例 UI 测试部分:

func getFollowButton(isFollowed: Bool) -> XCUIElement 
    if isFollowed == true 
        return app.descendants(matching: .button)["ProfileInfoView_followButton_followed"]
     else 
        return app.descendants(matching: .button)["ProfileInfoView_followButton_follow"]
    

然后测试返回的元素,状态改变等。

【讨论】:

以上是关于如何在 Swift 中 UITest 更改 UIButton 的图像?的主要内容,如果未能解决你的问题,请参考以下文章

编码的 ui-如何更新 UImap.uitest 文件中在应用程序中更改的对象的属性?

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

Uitest 刷新控制 swift

Swift UITest - 将使用两者之一。哪个是未定义的

月份更改时的 uib-datepicker 警报

用于分离 UITest 代码的 Swift 条件语句