带有 unicode 的字符串在新的 XCode UI 测试中不匹配并且测试失败

Posted

技术标签:

【中文标题】带有 unicode 的字符串在新的 XCode UI 测试中不匹配并且测试失败【英文标题】:String with unicode doesn't match on new XCode UI Test and the test fails 【发布时间】:2015-09-25 11:37:10 【问题描述】:

我正在使用新的 XCode 7 进行一些 UI 测试。我的应用程序如何使用通知,第一次使用 ios 时会自动询问“我的应用程序”希望向您发送通知。

当我记录测试时,XCode 在下面写下这些行:

- (void)testFirstUse 
    [XCUIDevice sharedDevice].orientation = UIDeviceOrientationPortrait;

    XCUIApplication *app = [[XCUIApplication alloc] init];
    [app.alerts[@"\U201cMyApp\U201d Would Like to Send You Notifications"].collectionViews.buttons[@"OK"] tap];
    [app.tables/*@START_MENU_TOKEN@*/.staticTexts[@"United States"]/*[[".cells.staticTexts[@\"United States\"]",".staticTexts[@\"United States\"]"],[[[-1,1],[-1,0]]],[0]]@END_MENU_TOKEN@*/ tap];
    [app.navigationBars[@"Select a Country"].buttons[@"Next"] tap];


请注意,XCode 将 unicode 而不是引号信号放在 MyApp 名称上。 当运行测试失败并出现错误“No matches found for alert”。

我尝试将 unicode 更改为引用信号,但它也不起作用。

清楚吗? 有人有同样的问题吗?

[更新] 我对这段代码有两个问题

1- XCode 生成的带有 unicode 的消息存在错误

2- 点击系统显示的警报后测试失败

【问题讨论】:

【参考方案1】:

我找到了一种解决方法,以避免在关闭系统警报后崩溃:

我改变了这一行

[app.alerts[@"\U201cMyApp\U201d Would Like to Send You Notifications"].collectionViews.buttons[@"OK"] tap];

XCUIElement *alert = app.alerts[@"\U0000201cMyApp\U0000201d Would Like to Send You Notifications"].collectionViews.buttons[@"OK"];    
if ([alert exists]) 
    [alert tap];

我做了两个改动

unicode 上的四个 0000 以避免构建失败 在点击警报之前进行验证以避免测试失败

【讨论】:

如果显示警报,我仍然会崩溃。【参考方案2】:

您可以通过直接访问alert.element 并通过集合视图点击“确定”按钮来确认警报。

let app = XCUIApplication()
app.launch()
// trigger location permission dialog

app.alerts.element.collectionViews.buttons["Allow"].tap()

但是,Xcode 7(和 Xcode 7.1 Beta)会在成功解除警报后崩溃。我已经打开了bug report with Apple 并鼓励所有遇到问题的人复制它。

【讨论】:

现在我遇到了@Joe Masilotti 的问题。但我注意到它只发生在 iOS 启动的警报中。 正确,@Salmo。您可以忽略自己的 UIAlertViews 和 UIAlertControllers 而不会出现问题。 我刚刚找到了一个解决方法。我把它贴在下面。但我也会像你一样在 Apple 上开一期。【参考方案3】:

xcode生成的unicode字符格式不对,是xcode的bug。作为临时解决方法,您可以替换

[app.alerts[@"\U201cMyApp\U201d Would Like to Send You Notifications"].collectionViews.buttons[@"OK"] tap];

[app.alerts[@"\u201cMyApp\u201d Would Like to Send You Notifications"].collectionViews.buttons[@"OK"] tap];

\u

上的所有 \U

【讨论】:

以上是关于带有 unicode 的字符串在新的 XCode UI 测试中不匹配并且测试失败的主要内容,如果未能解决你的问题,请参考以下文章

你如何在新的 XCode 中“升级 ipad 的目标”?

无法在新的自定义类 Xcode 11 中连接到 IBOutlet

无法在新的 Xcode 版本 13 上运行 React 本机 IOS 应用程序

Cocoapods 无法在新的 m1 mac Big Sur Xcode 上运行

如何在新的 iOS 7 和 Xcode 5 上使用旧 ios 版本构建我的应用程序

每当我尝试在新的 SceneKit 应用程序中替换库存文件时出现代码签名错误