如何从 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。
在使用页面对象 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。