问题其实很简单:
在此对象上使用可访问性标签时,是否有方法从特定标签(例如UILabel)中断言显示的值?
据我所见,示例中的所有断言(例如XCTAssertEquals),无论是来自WWDC谈话还是博客,都只检查一个元素是否存在于像XCTAssertEquals(app.staticTexts["myValue"].exists, true)这样的查询中,或者表中的单元格数是否正确XCTAssertEquals(app.tables.cells.count, 5)。因此,在避免可访问性标签时,可以检查一个对象是否显示了某个值,而不是哪个对象/元素。当使用可访问性标签时,它剥夺了我对显示的值进行查询的机会,因为app.staticTexts["myValue"]现在将无法交付结果,但app.staticTexts["myAccessibilityLabel"]会命中。
假设我想测试我的“向表添加新的单元格”功能,我可以测试列表中确实添加了一个新的单元格,但是我不知道新的单元格是添加在列表的顶部、底部还是中间。
对我来说,当涉及到UI测试时,一种检查特定元素是否具有特定值的简单方法应该是一种无需考虑的方法。
可能,由于缺少文档,我可能忽略了显而易见的事实。如果是的话,就告诉我。
发布于 2016-07-23 09:28:23
当您设置UILabel的.text值时,一定要设置它的.text属性。然后在UITest中,您可以像下面这样测试可访问性值:
let labelElement = app.staticTexts["myLabel"]
...
XCTAssertEqual(labelElement.value as! String, "the expected text")发布于 2015-09-01 13:39:02
我想你问了几个不同的问题,所以我会试着逐一回答每个问题。
总之,没有。UI测试的工作方式是连接到可访问性API,因此您只能在此基础上查询对象。但是,您可以检查某些元素(例如控件)的-value属性。这是用来测试开关是开的还是关的。请注意,使用可访问性API,这些方法也是向下压缩的,只是一个不同的方法(-accessibilityValue over -accessibilityIdentifier和-accessibilityLabel)。
要查询XCUIElement的帧,可以使用新的XCUIElementAttributes协议公开-frame。例如:
let app = XCUIApplication()
app.launch()
app.buttons["Add New Cell to Table"].tap()
let lastCell = app.cells["Last Cell"]
let newCell = app.cells["New Cell"]
XCTAssert(newCell.exists)
XCTAssert(newCell.frame.minY > lastCell.frame.maxY)如果您从可访问性的角度来考虑所有问题,这将成为一个不存在的问题。UI测试只能通过可访问性API与元素交互,因此必须实现它们。在启用这些设置的情况下,您还可以获得使您的应用程序更容易被用户访问的额外好处。
尝试将单元格的-accessibilityLabel或-accessibilityIdentifier设置为显示的文本。UI测试可以是挑剔的,它使用哪一个。
XCTest和UI测试没有任何正式文档。因此,我已经从框架中公开的头文件中提取了自己的文件。请注意,即使他们是从来源,他们是非官方的。
XCTest / UI测试文档
发布于 2016-07-28 21:50:29
我要做的是将UILabel的可访问性标识符设置为MyLabel。
func myLabelText() -> String {
let myLabelUIElement: XCUIElement = self.application.staticTexts["MyLabel"]
return myLabelUIElement.label
}用Xcode 8和iOS 10测试
https://stackoverflow.com/questions/32314744
复制相似问题