如何通过 UI 测试执行“向左滑动”操作

Posted

技术标签:

【中文标题】如何通过 UI 测试执行“向左滑动”操作【英文标题】:How can I perform a "swipe left" action via UI tests 【发布时间】:2016-02-27 18:20:21 【问题描述】:

如何通过 Xcode 中的 UI 测试执行“向左滑动”操作来触发 segue 和更改视图控制器?

记录的代码是

[[[[[[[XCUIApplication alloc] init].otherElements containingType:XCUIElementTypeNavigationBar identifier:@"UIView"] childrenMatchingType:XCUIElementTypeOther].element childrenMatchingType:XCUIElementTypeOther].element childrenMatchingType:XCUIElementTypeOther].element tap];

但它似乎不起作用——据我所知,视图控制器没有更改为新的。

【问题讨论】:

【参考方案1】:

很难准确判断您要滑动哪个视图。以下代码将在标题为“Swipe Me”的标签上执行“向左滑动”手势。定位视图后,应该很容易遵循相同的技术。

XCUIApplication *app = [XCUIApplication alloc] init];
[app.labels[@"Swipe Me"] swipeLeft];

Read more about swipeLeft 以及您可以对元素执行的伴随手势。如果您正在寻找更通用的“备忘单”,我也有got you covered。

【讨论】:

是的,它有效,非常感谢。为什么我的测试会多次运行应用程序?我只有存根方法 setUptearDownone 使用以下代码进行 UI 测试 -- XCUIApplication *app = [[XCUIApplication alloc] init]; [app.images[@"swipeleft"] swipeLeft]; XCUIElement *element = app.buttons[@"icon share"]; [self waitForElementToAppear:element withTimeout:5]; @Joe Masilotti 我可以更准确地处理向左滑动手势吗?例如向左滑动距离? @RyanChou 您可以下拉到XCUICoordinate API 并从一个元素拖动到另一个元素。见this example on pull-to-refresh。 @JoeMasilotti 哦,太棒了。非常感谢。我会仔细阅读这个例子。它可以满足我的要求。【参考方案2】:

如果你不能在appswipeLeft

app.swipeLeft()

尝试在scrollView 上调用它,比如

app.scrollViews.element(boundBy: 0).swipeLeft()

【讨论】:

【参考方案3】:

无需知道 UI 堆栈上当前有哪些 UI 元素可用,这对我有用: app.windows.element(boundBy:0).swipeLeft()

【讨论】:

以上是关于如何通过 UI 测试执行“向左滑动”操作的主要内容,如果未能解决你的问题,请参考以下文章

通过向左滑动选择 CollectionView 单元格(Swift 5)

XCode 7 UI 测试 - 可用的操作

UI测试滑动删除表格视图单元格

如何在两个 UIViewcontroller 之间跳转

iOS 7 在右侧添加了滑动以将视图控制器从堆栈中弹出。是不是可以通过向左滑动将其添加回来?

在pycharm编辑器中向左滑动选中的代码