如何通过Xcode中的UI测试执行"向左滑动"操作以触发segue并更改视图控制器?
录制的代码是
[[[[[[[XCUIApplication alloc] init].otherElements containingType:XCUIElementTypeNavigationBar identifier:@"UIView"] childrenMatchingType:XCUIElementTypeOther].element childrenMatchingType:XCUIElementTypeOther].element childrenMatchingType:XCUIElementTypeOther].element tap];
Run Code Online (Sandbox Code Playgroud)
但似乎它不起作用 - 据我所知,视图控制器不会更改为新的.
我去了一个非常简单的计算器,我试图测试一个标签是否在点击按钮时更新.
我的测试方法如下所示:
let app = XCUIApplication()
app.buttons["9"].tap()
Run Code Online (Sandbox Code Playgroud)
我可以直观地看到标签正在更新,但我不确定如何测试它.
我想我需要使用XCUIElementQueryAPI来查询标签,然后断言标签文本已经改变.我只是不确定该怎么做.
我不确定以下问题:
- 我是否需要知道标签能够查询的值是什么?
- 是否有一种方法可以在不知道应用程序启动时的值是什么时查询标签?
我正在经历一个相当乏味的过程,让一堆 UI 测试再次工作,但要运行每个测试,看起来 XCode 在模拟器中启动了两次应用程序。一次是一无所获,然后是另一次真正运行测试的地方。
我的配置是否有问题导致这种情况发生,或者这种行为是否符合预期?
我试图在测试目标中找到一个UIView带有navigationBar 的元素,accessibilityIdentifier以便检查isEnabled状态.
尝试了不同的解决方案,但找不到所需的解决方案.有没有办法实现想要的东西?
试过这个解决方案:application.groups.matching(identifier: "navigationBar")- 不起作用.
在 Xcode 9.3 中,当我尝试运行 UI 测试用例时,它开始给我以下异常,其中发现超过 128 个字符的冗长消息 -
由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无效查询 - 字符串标识符“超过 128 个字符的冗长消息......”超过了 128 个字符的最大长度。您可以通过使用自定义 NSPredicate 构建查询来解决此限制,该查询指定要匹配的属性(标签、标题、值、占位符值或标识符)。
给出的解决方法是使用自定义 NSPredicate 如下所示,
let predicate = NSPredicate(format: "label BEGINSWITH 'Empty '")
let label = app.staticTexts.element(matching: predicate)
XCTAssert(label.exists)
Run Code Online (Sandbox Code Playgroud)
但是如果我们像上面那样使用谓词,我们可能无法断言整个文本消息。还有其他可能的方法可以断言整个文本吗?请告诉我。
谢谢,干杯:)
我想点击我的应用程序中的最后一个[播放] 按钮,我正在寻找类似的东西
app.buttons["play"].lastMatch.tap()
Run Code Online (Sandbox Code Playgroud)
有什么办法吗?
我正在为我的 iOS Swift 应用程序编写 UITest 案例。在应用程序中,我以这种方式在导航栏上创建了一个自定义的右键项目按钮:
let barButtonItem = UIBarButtonItem(customView: customView)
navigationItem.rightBarButtonItem = barButtonItem
Run Code Online (Sandbox Code Playgroud)
现在我不知道如何在 XCUITest 中访问这个自定义的右键项目按钮,真的需要一些帮助。提前致谢。
我的应用程序使用WKWebView在代码中设置的(这是因为iOS 10 中的这个错误):
final class HelpViewController: UIViewController {
// …
var webView: WKWebView!
override func viewDidLoad() {
super.viewDidLoad()
let webConfiguration = WKWebViewConfiguration()
webView = WKWebView(frame: .zero, configuration: webConfiguration)
webView.translatesAutoresizingMaskIntoConstraints = false
self.view.addSubview(webView)
let margins = view.layoutMarginsGuide
webView.topAnchor.constraint(equalTo: self.back.bottomAnchor).isActive = true
webView.rightAnchor.constraint(equalTo: margins.rightAnchor).isActive = true
webView.leftAnchor.constraint(equalTo: margins.leftAnchor).isActive = true
webView.bottomAnchor.constraint(equalTo: margins.bottomAnchor).isActive = true
webView.navigationDelegate = self
//…
}
Run Code Online (Sandbox Code Playgroud)
我的 UI 测试如下所示:
func test_helpButtonShowsHelpText() {
//…
let webView = shopEasyApp.webViews.element
let webViewExists = webView.waitForExistence(timeout: kDefaultUITestTimeout)
XCTAssert(webViewExists, "Web view …Run Code Online (Sandbox Code Playgroud) 我一直在编写 UITests,在录制测试以打开模态视图并将模态向下滑动到屏幕底部以关闭它之后,我得到了一些这样的代码(因为那里有一个表视图):
var tablesQuery = app.tables.element(boundBy: 0)
tablesQuery.swipeDown()
Run Code Online (Sandbox Code Playgroud)
问题是,这并不总是有效。有时(尤其是在 iPad 上),在回放测试时,视图会向下移动一点并跳回原位(而不是关闭)。
Apple 一定有同样的问题,并提出了更好的解决方案来消除 iOS 13 XCUITests 上的模态视图 (.present)。
有没有办法可靠地消除核心测试框架支持的这些傻瓜,这样我就不必对手势或诸如此类的东西进行任何自定义摆弄?
谢谢你的帮助!
如果没有任何明显的解决方案,我想一个被黑的重型向下手势也可能回答这个问题......因为所有答案都是针对非常微小或轻微版本的滑动,而不是全屏关闭手势。但我想先了解您对受支持解决方案的上下文(例如,您是否知道不存在受支持的解决方案?)
谢谢你的帮助!- Apple 通过 XCTest 框架拒绝视图的方式支持/维护,或者有关此不存在的信息将回答此问题。
xcode-ui-testing ×10
ios ×7
xcode ×5
swift ×3
xcode7 ×2
xctest ×2
ios13 ×1
objective-c ×1
ui-testing ×1
xcode11 ×1
xcuitest ×1