我有一个UI测试,涉及解雇系统生成UIAlertController.此警报要求用户访问设备日历的权限.测试的目标是点击OK按钮后的行为:
1 let app = XCUIApplication()
...
// this code was basically generated by the recording feature of XCode 7
2 app.alerts.elementBoundByIndex(0).collectionViews.buttons["OK"].tap()
Run Code Online (Sandbox Code Playgroud)
现在,OK第2行不是点击按钮,而是让模拟器点击第一个按钮,该Cancel按钮恰好是按钮......
此外,我发现测试框架无法准确识别出现的警报.因此,如果我检查当前的警报计数,我总是得到0:
// ...tap...
let count = app.alerts.count // == 0
Run Code Online (Sandbox Code Playgroud)
如果我使用NSPredicate条件并等待几秒钟,也会发生这种情况.
UI测试是否可能无法与系统生成的警报一起可靠地工作?我正在使用XCode 7.0.1.
我的应用程序中有以下手势识别器.我查看了xCode7用户界面并看到它向上/向下/向左/向右滑动,但没有平移或边缘平移手势.
如何测试或启动屏幕边缘平移手势以用于UITesting目的?
UIScreenEdgePanGestureRecognizer *leftEdgeGesture = [[UIScreenEdgePanGestureRecognizer alloc] initWithTarget:self action:@selector(show)];
leftEdgeGesture.edges = UIRectEdgeLeft;
leftEdgeGesture.delegate = self;
[self.view addGestureRecognizer:leftEdgeGesture];
Run Code Online (Sandbox Code Playgroud) 如何在我的一个集合视图中测试无限滚动?我尝试模拟滚动,就像在"拉动刷新"示例中解释的那样,但它没有奏效.
let app = XCUIApplication()
let start = app.coordinateWithNormalizedOffset(CGVectorMake(1, 6))
let finish = app.coordinateWithNormalizedOffset(CGVectorMake(1, 0))
var x = 0
while(x < 20){
x++
start.pressForDuration(0, thenDragToCoordinate: finish)
}
Run Code Online (Sandbox Code Playgroud)
(while条件仅用于测试,我将更改它以询问当滚动工作时是否存在特定元素)
我的iOS应用程序目前有一个iOS 7的部署目标(虽然我的方案运行iOS 9.2模拟器),以及与AddressBook,AddressBookUI和CoreLocation框架的链接.我在Xcode 7中有一套Swift UI测试(不在Instruments中).当用户首次使用我的应用时,系统会要求他们在应用运行时访问其联系人及其位置.由于这涉及需要完美执行的大量代码,因此我希望自动化所有可能的结果并确保UI处于所需状态.
我可以使用Xcode UI测试重置模拟器的设置以访问联系人和位置吗?例如,我可以setUp()在我的测试用例类中的函数中实现它.我找到了一些关于如何响应对话框的教程,但在我到达那一点之前,我需要模拟请求权限的条件.这是一个解释如何响应此类警报的问题.
对于UI测试,我想执行一个swipeRight-gesture来进一步访问按钮.我想要滑动的元素位于屏幕的底部.我访问它:
element.staticTexts["TEST TEXT"].swipeRight()
Run Code Online (Sandbox Code Playgroud)
在执行测试时,滑动不够远.它不会触发元素完全向右滑动并显示我想要点击的其他按钮.
我感觉swipeRight()抓住静态文本的中间并执行手势.
是否有可能将元素更多地向左移动,使其向右滑动更多?
谢谢你的任何建议!
检查按钮是否启用后,如何点击它?
我在这里找到了此示例,但不适用于我的情况。
这是一部分代码:
let app = XCUIApplication()
let button = app.buttons["Tap me"]
let exists = NSPredicate(format: "exists == 1")
expectationForPredicate(exists, evaluatedWithObject: button){
button.tap()
return true
}
waitForExpectationsWithTimeout(5, handler: nil)
Run Code Online (Sandbox Code Playgroud)
但通过点击按钮,我的测试失败。谢谢
我已经进行了一些过去一年的UI测试,他们每晚都会运行,我们设置了一台显示器,这样我们就可以看到它们何时出现故障,而且几个月和几个月都没问题.
今天早上我们将机器更新为Xcode 8.3.2,将构建服务器从8.2更新到8.3.2,现在UI测试不再通过.
我有一个包含12个单元格的tableView,前6个是可见的,但我想按最后一个单元格,所以我调用swipeUp()来滚动tableView.通常,tableView将滚动一两秒,我想要的单元格变得可见,我可以断言它存在并在其上调用tap().
然而,现在,当观看UI测试运行时,当调用swipeUp()方法时,它不再滚动很长时间.它似乎只滚动几毫米然后停止,这意味着断言失败,我们无法点击单元格,因此我们所有的UI测试都失败了.
我在网上搜索过这个,除了这个似乎有同样问题的小片段之外,找不到太多信息.
我试图按照建议删除swipeUp()调用,但这似乎没有解决问题,我们已经测试了几个Xcode安装和笔记本电脑以达到同样的效果.
只是寻找一些建议,我想知道是否有其他人看过这个问题?
我是任何类型的iOS编程的新手.我正在尝试为我的一个场景编写UI测试用例.
以下是我使用recode方法并点击自定义组件时得到的代码.
let button = XCUIApplication().children(matching: .window).element(boundBy: 0).children(matching: .other).element.children(matching: .button).element
Run Code Online (Sandbox Code Playgroud)
在此自定义组件中有两个按钮.我想知道选择了哪个按钮.为此我需要识别按钮.但是我得到了相同的代码,我点击自定义视图.
如何访问自定义视图中的每个组件.任何帮助都会很棒.
在我的单元测试中,有一个页面询问许可证使用库。运行我的单元测试时,即使我的所有单元测试都已完成,此权限对话框也会出现在屏幕上,并且不会消失。当UI测试尝试运行时,它们不会导致此对话框。有什么方法可以在单元测试之前运行UI测试?
Apple重新设计了显示的共享表,该共享表现在破坏了我的UI测试。
我试图通过Xcode记录新的UI测试,但是一旦我点击了dismiss按钮,该测试就会终止,因此我无法捕获该事件。
最终,我只想知道如何访问下面箭头所示的灰色“ X”:
xcode-ui-testing ×10
ios ×7
xcode7 ×4
ui-testing ×3
xcode ×3
iphone ×2
swift ×2
ios13 ×1
ios9 ×1
objective-c ×1
swift3 ×1
unit-testing ×1
xctest ×1