我在比较两个哈希中的值时遇到问题,得到错误“无法将字符串转换为整数”。 第一个散列具有使用方法“capture_page_data(browser)”从网页捕获的值,第二个散列具有从报告解析的数据。
代码如下所示:
# Open the web application
# Navigate to a specific page and capture page data
loan_data = Hash.new
loan_data = capture_page_data(browser)
第二个哈希具有从Web应用程序生成的报告中捕获的值 代码如下所示:
@report_data[page] = Hash.new
# we have written some logic to parse the data from the report into hash variable
现在我正在尝试比较这两个哈希中的值,以确保报告中的数据与应用程序中的数据匹配,使用下面的代码,这给出了错误“无法将字符串转换为整数”。
loan_data.map{|ld| ld['MainContent_cphContent_LoanOverViewGeneralInfoCtrl_lblRelName']} &
@report_data.map{|rd| rd['Relationship']}
请帮我解决这个问题。
此致
威拉。
答案 0 :(得分:1)
Hash#map
遍历哈希,就像它是键/值对的数组一样。
{a:1,b:2}.map{|x| puts x.inspect }
# prints
# [:a,1]
# [:b,2]
{a:1,b:2}.map{|k,v| puts "#{k} => #{v}" }
# prints
# a => 1
# b => 2
它将您提供的块应用于每对,将结果收集到一个新数组中。
result = {a:1,b:2}.map{|k,v| "#{k} => #{v}" }
puts result.inspect
# prints
# [ "a => 1", "b => 2" ]
我猜你要做的是比较每个数组中的一个键......在这种情况下......
if loan_data[:id][:span]['MainContent_cphContent_LoanOverViewGeneralInfoCtrl_lblRelName'] == @report_data[1]['Relationship']
log_message("pass")
else
log_message("fail")
end
可能就是你想要做的......但我只是在猜测。
这一切都取决于数据的形状。
答案 1 :(得分:0)
如果检查块内的ld
变量,您会发现它是一个数组。您可以使用ld[0]
或ld[1]
获取其中的元素,但ld[string]
没有意义并导致您看到的异常。 ld
数组实际上是一个包含两个元素的数组:key和value。
答案 2 :(得分:0)
感谢您的建议..但我找到了一个不同的解决方案来比较两个哈希/数组中的单个密钥,使用下面的代码工作正常。
string_equals?(loan_data [:id] [:span] ['MainContent_cphContent_LoanOverViewGeneralInfoCtrl_lblRelName'],@ report_data [1] ['Relationship'])
谢谢,
威拉。
答案 3 :(得分:-1)
最好直接调试loan_data和@report_data的内容,但你可以尝试.to_sym将密钥转换为符号。
loan_data.map{|ld| ld['MainContent_cphContent_LoanOverViewGeneralInfoCtrl_lblRelName'.to_sym]} &
@report_data.map{|rd| rd['Relationship'.to_sym]}