我刚开始在XCode 7中进行UI测试并遇到了这个问题:
我需要在文本字段中输入文本然后单击按钮.不幸的是,这个按钮隐藏在键盘后面,在将文本输入文本字段时出现.XCode正在尝试滚动以使其可见但我的视图不可滚动因此失败.
我目前的解决方案是:
let textField = app.textFields["placeholder"]
textField.tap()
textField.typeText("my text")
app.childrenMatchingType(.Window).elementBoundByIndex(0).tap() // hide keyboard
app.buttons["hidden button"].tap()
Run Code Online (Sandbox Code Playgroud)
我可以这样做,因为我的ViewController正在拦截触摸:
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
view.endEditing(false)
super.touchesBegan(touches, withEvent: event)
}
Run Code Online (Sandbox Code Playgroud)
我对我的解决方案并不满意,在UI测试期间有没有其他方法可以隐藏键盘?
在运行Xcode UI测试时,我想知道正在使用哪个设备/环境(例如iPad Air 2,iOS 9.0,Simulator).
我怎样才能获得这些信息?
我正在使用Xcode7来编写UITest,问题是我需要在验证实际结果之前等待所有步骤发生.这需要花费大量时间与视图控制器推/呈现/消除.
有没有办法在编写测试时禁用动画?
我正在尝试访问子视图中的元素,我发现无法这样做.
层次结构是:
查看控制器:
我想访问zipCodeEntered文本字段.我有一个名为"zipCodeEntered"的辅助功能标签.
当我尝试记录自动化时,它只注册superview"userEnterView"而不是我可以访问的实际文本字段.
我打印"app.otherElements [SUPER_VIEW_NAME] .debugDescription"以查看该层次结构中的元素,并且它不打印任何元素.
我正在使用Xcode 7 XCTest中引入的UI测试API.在我的屏幕上,我有一个从网络加载的文本.
如果我只是用exists属性检查它,测试就会失败.
XCTAssert(app.staticTexts["Text from the network"].exists) // fails
Run Code Online (Sandbox Code Playgroud)
如果我首先将tap或任何其他事件发送到文本,它确实有效:
app.staticTexts["Text from the network"].tap()
XCTAssert(app.staticTexts["Text from the network"].exists) // works
Run Code Online (Sandbox Code Playgroud)
看起来如果我只是调用exists它立即评估它并失败,因为尚未从网络下载文本.但我认为当我调用该tap()方法时,它会等待文本出现.
有没有更好的方法来检查是否存在从网络传送的文本?
像(这段代码不起作用):
XCTAssert(app.staticTexts["Text from the network"].eventuallyExists)
Run Code Online (Sandbox Code Playgroud) 我刚刚学习了Xcode中的单元测试.现在我正在尝试Xcode 7,当我创建一个新项目时,我看到有一个新的UI测试组.
我观看了WWDC 2015视频并且它非常好,但你有一个超级简单的例子,我可以自己完成吗?视频示例对我来说有点过于复杂.
笔记
问题其实很简单:
有没有办法在此对象上使用可访问性标签时断言特定标签(例如UILabel)的显示值?
据我所知,在示例中做出的所有断言(例如XCTAssertEquals),无论是来自WWDC Talk还是Blogposts,都只检查是否存在查询的元素,XCTAssertEquals(app.staticTexts["myValue"].exists, true)或者表中单元格的数量是否正确XCTAssertEquals(app.tables.cells.count, 5).因此,当避免使用可访问性标签时,可以检查对象是否显示某个值,而不是哪个对象/元素.当使用可访问性标签时,它会让我有机会查询显示的值,因为app.staticTexts["myValue"]现在无法提供结果但app.staticTexts["myAccessibilityLabel"]会命中.
假设我想测试我的"将新单元格添加到表格"功能,我可以测试列表中是否添加了新单元格,但我不知道新单元格是添加到列表的顶部还是底部或介于两者之间.
对我来说,检查特定元素是否具有特定值的简单方法应该是UI测试的明智之举.
由于缺少文档,我可能会忽略显而易见的事实.如果是这样,请告诉我.
我有一个类型.Image和类的变量XCUIElement.像这样的东西:
var image = app.descendantsMatchingType(.Image).elementAtIndex(0)
有没有办法可以提取实际图像,以便将其与其他图像进行比较?
我试过caling value方法,但它返回一个字符串.将它投射到UIImage总是失败.
我正面临一个问题,使用UITestingApple在2015年WWDC上引入的xCode框架.我有一个UITableView,这个表包含很多单元格.我还有一个带有单元格标题的NSArray - 如果NSArray中包含单元格标题,则应该点击该单元格.我的问题是我无法滚动特定单元格的表格视图,因为框架不包含处理表格视图的方法,只有滑动手势(向下,向上).
也许有人知道如何在表视图中点击特定的单元格?或者我如何滚动特定单元格的表视图?因为当我调用tap()在屏幕上看不到的单元格的方法时 - 没有任何反应.
提前致谢!
我有以下XCTest UI测试,它将文本键入文本视图.
let textView = app.textViews.elementBoundByIndex(0)
textView.tap()
textView.typeText("Hello world")
Run Code Online (Sandbox Code Playgroud)
当作为Xcode bot运行时,它会显示以下typeText呼叫错误.
断言:UI测试失败 - 失败:等待键事件完成超时
有趣的是,当我从同一台计算机上的Xcode手动运行时,测试通过了.在升级到Xcode 7.1/iOS 9.1之前,此测试也通过了Xcode bot.可能是问题的根源是什么?
这是一个带有UI测试的独立演示:https: //github.com/exchangegroup/UITestTextViewDemo
iOS 9.1模拟器,OS X 10.11.1(15B42),Xcode 7.1(7B91b),OS X Server 5.0.15(15S4033)
向Apple报道.
ios ×10
xcode-ui-testing ×10
xcode7 ×5
swift ×4
testing ×3
ui-testing ×2
xcode ×2
xctest ×2
swift2 ×1
uitextview ×1
xcode7-beta6 ×1