Swift UITesting 错误:文字中的转义序列无效。 \U201c

Posted

技术标签:

【中文标题】Swift UITesting 错误:文字中的转义序列无效。 \\U201c【英文标题】:Swift UITesting error: Invalid escape sequence in literal. \U201cSwift UITesting 错误:文字中的转义序列无效。 \U201c 【发布时间】:2015-09-22 08:53:57 【问题描述】:

我正在使用 Xcode 7 和 swift 构建一个自动化套件。

我的应用加载了以下警报视图:

在您使用应用程序时允许“灯光警报”访问您的位置吗?

当我使用 UI 测试记录并单击此警报时,我得到以下代码: app.alerts["允许\U201cLight Alarm\U201c 在您使用应用程序时访问您的位置吗?"]

注意:引号已替换为 \U201c

但是,当我尝试编译时,出现以下错误: “文字中的无效转义序列”

有人知道如何解决这个问题吗?

【问题讨论】:

这似乎是在 UI 测试期间生成代码时的 Xcode 错误,比较 ***.com/questions/32432068/… 是否有类似问题。 注意:这里的问题是 not OP 不知道如何转义字符串中的 unicode 字符。这是在 UI 测试录制期间由 Xcode 创建的代码 没错。这是生成代码时的 Xcode 错误。根据问题,任何想法“应该”创建的代码是什么? 【参考方案1】:

这似乎是在 UI 录制期间生成代码时 Xcode 中的一个错误。 Swift 在字符串文字中使用\uNNNN 转义序列,所以

app.alerts["Allow \u201cLight Alarm\u201c ..."]

会是正确的,或者只是

app.alerts["Allow “Light Alarm“ ..."]

(其实应该是"Allow “Light Alarm” ..." 第二个引号是 U+201D = 右双引号 :)

在 Objective-C 中的 UI 记录代码中报告了类似问题 Incomplete universal character name in UI Testing.

我不知道解决方法,看来你唯一能做的 目前是在录制后修复代码(并发送错误报告 给苹果)。

【讨论】:

这很奇怪,因为您的报价与屏幕上的内容完全匹配,但即使显示 UIAlertView 我也得到了查询返回的错误布尔值:return app.alerts["Allow “Light Alarm”在您使用应用程序时访问您的位置?"].exists @CharlieSeligman:你必须使用app.alerts["Allow “Light Alarm“ ..."]。 – 我的评论“实际上应该是......”只是作为一个温和的提醒,有两个不同的(右和左)引号。您的代码仅使用左双引号。 这是否意味着在视图中添加标签或者是否足以转换 Swift 插入的 Unicode 值? 有人能解决这个问题吗?虽然当我查看 xcode 调试器控制台时,字符串按预期显示,但在我调用 .exists 方法时失败? @seleniumlover 在下面看到我的回答,尝试安装新版本的 Xcode【参考方案2】:

安装 Xcode 7.3 为我解决了这个问题

【讨论】:

以上是关于Swift UITesting 错误:文字中的转义序列无效。 \U201c的主要内容,如果未能解决你的问题,请参考以下文章

如何在 UITesting swift 4 iOS 中获取应用程序名称

如何解决转义闭包捕获 Swift 中的“inout”参数?

在 Swift 3.0 中的转义闭包中改变自我(结构/枚举)

Angular - JSX 和模板文字中的转义变量以将其用作参数

iOS UITesting 错误

swift中的异构集合文字