如何从Ruby页面对象文本中逃脱双引号

时间:2017-06-07 14:49:23

标签: ruby text escaping double-quotes page-object-gem

在使用Page Object 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)

我不太确定如何逃避这些 - 我不确定在哪里可以使用正则表达式并且能够逃脱这些奇怪的角色。

2 个答案:

答案 0 :(得分:1)

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

我建议简化你想要做的事情,先问问自己:引号中的部分是否是你验证的关键部分?

如果是,请通过执行String.contains(" EMS")来隔离它。

如果不是,那么你可能做了太多工作,只检查验证中你需要的东西:

String.beginsWith("请选择默认&#34以外的类别;)

关于您遇到的实际问题,从技术层面来看,您遇到了编码问题。

,在将结果字符串传递给验证之前,使用utf-8对结果字符串进行编码 祝你好运

答案 1 :(得分:0)

很可能沿线的某个地方不正确地编码了字符串。 (tipoff是带有加号的字符,后跟val userFriends=userJson.select($"friends",$"user_id") val result_df = userFriends.select($"friends",$"user_id") .rdd .map(x => (x.getList(0).toArray.map(_.toString).count(z=>true)),x.getInt(1))) .toDF("friendsCount","user_id") 。)似乎很可能引号被转换为"智能引号"某处。 This table将Window-1252与UTF-8进行比较:

?

您要做的是检查代码中的各个位置,以找到字符串编码的第一个位置,而不是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

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

一旦找到未编码UTF-8的字符串,就可以将其转换为:

puts

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

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