使用 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 测试测试操作扩展的主要内容,如果未能解决你的问题,请参考以下文章