使用UI测试测试操作扩展

Jos*_*ffy 6 ios xcode-ui-testing

是否可以对Action Extension目标执行UI测试?我无法使用Action Extension作为"要测试的目标"来创建UI测试目标.我试图从Safari(或照片中)加载动作扩展,尽管Safari /两者都是首选

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

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

然后我可以手动添加:

XCUIDevice.sharedDevice().pressButton(.Home)

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

我也尝试过:

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

但那也没有打开Safari.

我甚至不确定如果它能够启动,我是否能够与Action Extension自动交互,但希望它是可能的.

Cha*_*and 4

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

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

[safari launch];
Run Code Online (Sandbox Code Playgroud)

然后与 Safari 进行交互,就像您与应用程序进行交互一样。但是,我遇到了类似的问题,XCUITest 实际上不会启动扩展本身。打开后(即在测试运行时物理点击扩展按钮),测试运行程序将完美运行,并且您可以在与应用程序相同的上下文中与扩展程序进行交互。然而,让测试运行者点击来启动扩展没有任何作用。我还有一个有关此主题的Apple 开发论坛问题。

更新

事实证明,如果您使用该应用程序在按钮位置按下屏幕,扩展程序就会加载,您就可以与其交互!请注意,用于点击坐标的 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];
Run Code Online (Sandbox Code Playgroud)

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

[app.sheets.staticTexts[@"MyApp"] tap];
Run Code Online (Sandbox Code Playgroud)