如何从 Ruby 页面对象文本中转义双引号

How to Escape Double Quotes from Ruby Page Object text

在使用页面对象 gem 时,我试图从页面中提取文本以验证错误消息。其中一条错误消息包含双引号,但是当页面对象从页面中提取文本时,它会提取一些其他字符。

expected ["Please select a category other than the Default â?oEMSâ?? before saving."] 
to include "Please select a category other than the Default \"EMS\" before saving." 
(RSpec::Expectations::ExpectationNotMetError)

我不太确定如何转义这些 - 我不确定在哪里可以使用正则表达式并能够转义这些奇怪的字符。

老实说,您的验证过于复杂了。

我会建议简化您正在尝试做的事情,首先问问自己:引号中的部分是您验证的关键部分吗?

如果是,请执行 String.contains("EMS")

隔离它

如果不是,那么您可能做的工作太多了,只检查您在验证中确切需要的内容:

String.beginsWith("Please select a category other than the Default")

关于您遇到的实际问题,在技术层面上您遇到了编码问题。在将结果字符串传递给验证之前用 utf-8 对其进行编码,这样就没问题了。

祝你好运

很有可能这条线的某个地方对字符串进行了不正确的编码。 (提示是重音字符后跟 ?。)引号似乎很可能在某处转换为 "smart quotes"。 This table 将 Window-1252 与 UTF-8 进行比较:

Code Point      Characters          UTF-8 Bytes
Unicode Windows
        1252    Expected    Actual
------  ----    -           ---     ----------- 
U+201C  0x93    “           “     %E2 %80 %9C
U+201D  0x94    ”           †     %E2 %80 %9D

您要做的是抽查代码中的各个位置,首先找到字符串以非 UTF-8 编码的位置:

puts error_str.encoding

(为清楚起见,error_str 是保存您正在测试的字符串的变量。我使用的是 puts,但您可能希望使用另一种方式来记录诊断消息。)

找到非 UTF-8 编码的字符串后,您可以将其转换:

error_str.encode('UTF-8')

或者,如果字符串在某处被硬编码,只需替换该字符串。

有关更多调试建议,请参阅:3 Steps to Fix Encoding Problems in Ruby and How to Get From They’re to They’re