我正在尝试使用Xcode 7 beta 2中提供的新UI测试来编写测试用例.该应用程序有一个登录屏幕,它可以调用服务器进行登录.由于它是异步操作,因此存在与此相关的延迟.
在继续进一步的步骤之前,有没有办法在XCTestCase中引起延迟或等待机制?
没有适当的文档可用,我浏览了类的Header文件.无法找到与此相关的任何内容.
有什么想法/建议吗?
这是我的情况:
let passwordSecureTextField = app.secureTextFields["password"]
passwordSecureTextField.tap()
passwordSecureTextField.typeText("wrong_password") //here is an error
Run Code Online (Sandbox Code Playgroud)
UI测试失败 - 元素和任何后代都没有键盘焦点.元件:
怎么了?这对正常工作很好textFields,但只会出现问题secureTextFields.任何解决方法?
我正在尝试在Xcode中生成UItest.当我尝试刷UIview时出现错误:
Timestamped Event Matching Error: Failed to find matching element
Run Code Online (Sandbox Code Playgroud)
如果我尝试点击UIView,也会发生这种情况.
我试图通过点击搜索栏中的"取消"按钮来关闭搜索字段.
测试用例未能找到取消按钮.它在Xcode 7.0.1中运行良好
我添加了谓词等待按钮出现.当我们点击"取消"按钮时,测试用例失败
let button = app.buttons[“Cancel”]
let existsPredicate = NSPredicate(format: "exists == 1")
expectationForPredicate(existsPredicate, evaluatedWithObject: button, handler: nil)
waitForExpectationsWithTimeout(5, handler: nil)
button.tap() // Failing here
Run Code Online (Sandbox Code Playgroud)
日志:
t = 7.21s Tap SearchField
t = 7.21s Wait for app to idle
t = 7.29s Find the SearchField
t = 7.29s Snapshot accessibility hierarchy for com.test.mail
t = 7.49s Find: Descendants matching type SearchField
t = 7.49s Find: Element at index 0
t = 7.49s Wait for app to idle …Run Code Online (Sandbox Code Playgroud) 我是否可以在XCTest中调用API调用setUP()或tearDown()以在测试之间重置应用程序?我查看了XCUIApplication的点语法,我看到的只是.launch()
或者有没有办法在Swift中调用shell脚本?然后我可以调用xcrun中间的测试方法来重置模拟器.
在我的测试中,我有一个带有预先存在的文本的文本字段.我想删除内容并键入新字符串.
let textField = app.textFields
textField.tap()
// delete "Old value"
textField.typeText("New value")
Run Code Online (Sandbox Code Playgroud)
用硬件键盘删除字符串时没有为我生成记录.用软件键盘做同样的事后我得到了:
let key = app.keys["Usu?"] // Polish name for the key
key.tap()
key.tap()
... // x times
Run Code Online (Sandbox Code Playgroud)
要么
app.keys["Usu?"].pressForDuration(1.5)
Run Code Online (Sandbox Code Playgroud)
我担心我的测试是依赖于语言的,所以我为我支持的语言创建了类似的东西:
extension XCUIElementQuery {
var deleteKey: XCUIElement {
get {
// Polish name for the key
if self["Usu?"].exists {
return self["Usu?"]
} else {
return self["Delete"]
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
它在代码中看起来更好:
app.keys.deleteKey.pressForDuration(1.5)
Run Code Online (Sandbox Code Playgroud)
但它非常脆弱.从模拟器退出后Toggle software keyboard重置,我有一个失败的测试.我的解决方案不适用于CI测试.如何解决这个问题更加普遍?
我正在使用新的Xcode 7 UI测试功能编写UI测试用例.在我的应用程序的某些时刻,我要求用户允许相机访问和推送通知.因此会出现两个iOS弹出窗口:"MyApp Would Like to Access the Camera"弹出窗口和"MyApp Would Like to Send You Notifications"弹出窗口.我希望我的测试可以解雇两个弹出窗口.
UI录制为我生成了以下代码:
[app.alerts[@"cameraAccessTitle"].collectionViews.buttons[@"OK"] tap];
Run Code Online (Sandbox Code Playgroud)
但是,[app.alerts[@"cameraAccessTitle"] exists]解析为false,上面的代码生成错误:Assertion Failure: UI Testing Failure - Failure getting refresh snapshot Error Domain=XCTestManagerErrorDomain Code=13 "Error copying attributes -25202".
那么在测试中解除一堆系统警报的最佳方法是什么?系统弹出窗口会中断我的应用程序流并立即使我的正常UI测试用例失败.事实上,任何有关如何绕过系统警报以便我可以恢复测试通常流程的建议都表示赞赏.
这个问题可能与这个SO帖子有关,也没有答案:Xcode7 | Xcode UI测试| 如何处理位置服务警报?
提前致谢.
我正在尝试录制一些XCUITesting函数.我收到这个错误.
Timestamped Event Matching Error: Failed to find matching element
Run Code Online (Sandbox Code Playgroud)
这是一个Xcode错误和/或我的UI的复杂性问题?
我目前在运行iOS测试时遇到此问题
Assertion Failure: UI Testing Failure - Failure getting snapshot Error Domain=XCTestManagerErrorDomain Code=9 "Error -25201 getting snapshot for element <AXUIElement 0x7faf7b4173f0> {pid=84523}" UserInfo={NSLocalizedDescription=Error -25201 getting snapshot for element <AXUIElement 0x7faf7b4173f0> {pid=84523}}
Run Code Online (Sandbox Code Playgroud)
目前使用Xcode v7.3.1,Cocoapods v1.0.1
我尝试删除DerivedData,Pods /,Podfile.lock和*.xcworkspace并随后运行pod install.没运气.仍然遇到错误.最初在Xcode 7.3中经历过.升级后,问题仍然存在.
任何经历过同样事情并解决问题的人?请分享您的解决方案.谢谢.
我有一个选择器视图,几个项目:"红色","绿色","黄色","黑色".在我的UI测试中,我需要从中选择一个特定的项目"绿色".我正在使用Xcode 7引入的XCTest UI测试API.

到目前为止我设法做的是在单元测试中刷整整个选择器视图.它并不理想,因为它总是将拾取器视图更改为底部项目(向上滑动时).
let app = XCUIApplication()
app.launch()
app.pickers.elementAtIndex(0).swipeUp()
XCTAssert(app.staticTexts["Selected: Black"].exists)
Run Code Online (Sandbox Code Playgroud)
改变选择器视图的另一种但非常相似的方法是调用pressForDuration ... thenDragToElement,这不是我想要的.
app.pickers.elementAtIndex(0).pressForDuration(0.1, thenDragToElement: someElement)
Run Code Online (Sandbox Code Playgroud)
当我使用UI测试记录功能时,它不会记录选择器视图滚动事件.当我点击选择器视图项时它会记录:
app.pickerWheels["Green"].tap()
Run Code Online (Sandbox Code Playgroud)
但是在运行测试时这实际上并不起作用(可能是因为它需要在点击之前首先滚动选择器视图).
这是带有测试的演示应用程序.
https://github.com/exchangegroup/PickerViewTestDemo
现在可以从Xcode 7.0 beta 6中选择一个选择器视图.
app.pickerWheels["Green"].adjustToPickerWheelValue("Yellow")
Run Code Online (Sandbox Code Playgroud) xcode-ui-testing ×10
xcode ×6
xcode7 ×6
ios ×5
swift ×5
xctest ×3
ios9 ×2
objective-c ×1
uikeyboard ×1
uitextfield ×1
xcode7-beta2 ×1
xcode7.3 ×1
xctwaiter ×1