我正在测试Xcode 7的新UI测试功能(在2015年Xcode中的UI测试视频中引入)。
在启动时,我的应用程序通过更新其垂直布局约束的值,将一个“登录面板”动画化:面板从主视图下方(离屏幕)滑入视图。
该面板包含两个文本字段,用于用户名和密码。
当您点击键盘上用户名文本字段(标记为"Next")的返回键时,密码textfield将成为第一个响应者。当您点击密码文本字段(标记为"Go")的retrun键时,面板将被“拒绝”(即,动画退出屏幕),活动指示器开始旋转,身份验证开始。
我记录了一个执行上述操作的测试,但是当我试图“复制”它时,它似乎失败了,因为文本字段无法立即输入:
测试套件‘选择测试’启动于2015年-08-14 13:14:19.454测试套件'MyAppUITests‘从2015年开始-1413:14:19.454测试用例’-MyAppUITests.MyAppUITes testExample‘启动。 T= 0.00s起动试验 T= 0.00s设置 T= 0.00s启动com.myCompany.MyApp 2015-08-14 13:14:19.953 XCTRunner4667:451922继续使用任务ID 1在后台运行测试 T= 2.64s等待可访问性加载 T=6.20等待app空闲 T= 6.49s Tap“用户ID”TextField T= 6.49s等待app空闲 T=6.57找到“用户ID”TextField T= 6.57s com.myCompany.MyApp快照可访问性层次结构 T=6.60查找:后代匹配类型TextField T=6.60查找:匹配标识符中谓词‘“用户ID’的元素 T=6.60等待app空闲 T= 6.67s综合事件 T= 6.74s涡旋元素变为可见 T= 6.78s断言失败: UI测试失败-未能滚动到可见(通过AX操作) TextField 0x7fc90251a130:特征: 146029150208,{107.0,807.0},{200.0,30.0},placeholderValue:‘用户ID',值: fffffaaaa,错误:错误-25204执行AXAction 2003 :0:错误:-MyAppUITests.MyAppUITests testExample:UI测试失败-未能滚动到可见(由AX操作) TextField 0x7fc90251a130:特征: 146029150208,{{107.0,807.0},{200.0,30.0},placeholderValue:‘用户ID',值: fffffaaaa,错误: Error -25204执行AXAction 2003 T= 6.78s撕毁测试用例‘-MyAppUITests.MyAppUITest.MyAppUITes testExample’failed (6.783秒)。 测试套件“MyAppUITests”在2015-08-14 13:14:26.238失败。 在6.783 (6.784)秒内执行1次测试,1次失败(0次意外)
(强调我的。项目名称和包id更改为假值)
我如何处理这样的UI?(也就是说,测试代码必须等待某个动画完成,然后目标控件才可操作)
我不记得那个视频提到了这样的“时机”问题。
发布于 2015-09-09 13:40:51
我建议使用来反对运行循环中的,而使用内置的XCTest异步API。例如:
let app = XCUIApplication()
app.launch()
let textField = app.textField["user name"]
let existsPredicate = NSPredicate(format: "exists == 1")
expectationForPredicate(existsPredicate, evaluatedWithObject: textField, handler: nil)
waitForExpectationsWithTimeout(5, handler: nil)
textField.tap()
textField.type("joemasilotti")这将等到屏幕上实际存在带有可访问性标签/标识符"username“的文本字段。然后它将点击文本字段,使其活动,并键入我的用户名。如果在此之前通过了5秒,那么测试就会失败。
我还在我的博客上写了一篇关于如何使用UI测试的文章,并为这样的场景组合了一个UI测试备忘单。
https://stackoverflow.com/questions/32002330
复制相似问题