使用 UI 测试测试操作扩展

Posted

技术标签:

【中文标题】使用 UI 测试测试操作扩展【英文标题】:Testing Action Extension with UI Tests 【发布时间】:2015-12-21 12:46:11 【问题描述】:

是否可以对操作扩展目标执行 UI 测试?我无法创建将操作扩展作为“要测试的目标”的 UI 测试目标。我正在尝试从 Safari(或照片,尽管首选 Safari/两者)中加载操作扩展

如果我记录我的互动,我可以做到:

app.icons["Safari"].tap()

然后我可以手动添加:

XCUIDevice.sharedDevice().pressButton(.Home)

在生成代码之前,但它没有按预期工作(模拟器留在主屏幕上)。

我也试过了:

UIApplication.sharedApplication().openURL(NSURL(string: "https://google.com")!)

但这也不会打开 Safari。

我什至不确定如果动作扩展启动,我是否能够与它自动交互,但希望它是可能的。

【问题讨论】:

运气好了吗?我也在尝试 UI 测试一个动作扩展 【参考方案1】:

因此,可以使用 XCUITest 切换应用程序,但它没有记录。如果您查看Facebook's WebDriverAgent,他们会进行标头转储并为从跳板启动提供帮助。您可以致电:

XCUIApplication* safari = [[XCUIApplication alloc] initWithPrivatePath:nil bundleID:@"com.apple.safari"];

[safari launch];

然后像使用应用程序一样与 Safari 进行交互。但是,我遇到了一个类似的问题,即 XCUITest 实际上不会启动扩展本身。一旦打开(即您在测试运行时物理点击扩展按钮),测试运行器就可以完美运行,并且您可以在与您的应用相同的上下文中与您的扩展进行交互。但是,让测试运行程序点击以启动扩展程序没有任何作用。我也有一个 Apple Dev Forum question 讨论这个话题。

更新

事实证明,如果您使用应用程序在按钮位置按下屏幕,扩展程序将加载并且您可以与之交互!请注意,用于点击坐标的 API 非常不稳定。 x, y 是您从中创建坐标的事物的框架的乘数。相关示例代码:

// app is your XCUIApplication
// In this case we are tapping in the horizontal middle and at the y coordinate 603 (this is for a 6+ screen size)
XCUICoordinate* coordinateOfRowThatLaunchesYourExtension = [app coordinateWithNormalizedOffset:CGVectorMake(0.5, 603.0 / 736.0)];
[coordinateOfRowThatLaunchesYourExtension tap];

在调用 Apple 的扩展程序选择器后,这将在操作表中按下您的扩展程序的按钮。无论出于何种原因/XCUITest 中的错误,只需在操作表中按下您的应用程序不起作用:

[app.sheets.staticTexts[@"MyApp"] tap];

【讨论】:

以上是关于使用 UI 测试测试操作扩展的主要内容,如果未能解决你的问题,请参考以下文章

CarPlay 的 UI 测试

APP UI自动化测试是鸡肋吗?

在 UI 测试中执行完全向左滑动操作?

UI测试

使用Puppeteer检测并测试Chrome扩展程序

Linux / Mono上的VS编码UI测试