-2

2 つのハッシュの値を比較する際に問題が発生し、「文字列を整数に変換できません」というエラーが表示されます。最初のハッシュにはメソッド「capture_page_data(browser)」を使用して Web ページからキャプチャされた値が含まれ、2 番目のハッシュにはレポートから解析されたデータが含まれます。

コードは次のようになります。

# Open the web application 
# Navigate to a specific page and capture page data

loan_data = Hash.new

loan_data = capture_page_data(browser)

2 番目のハッシュには、Web アプリケーションから生成されたレポートからキャプチャされた値が含まれます。
コードは次のようになります。

@report_data[page] = Hash.new
# we have written some logic to parse the data from the report into hash variable

今、これらの 2 つのハッシュの値を比較して、以下のコードを使用してレポートのデータがアプリケーションのデータと一致していることを確認しようとしていますが、「文字列を整数に変換できません」というエラーが表示されます。

loan_data.map{|ld| ld['MainContent_cphContent_LoanOverViewGeneralInfoCtrl_lblRelName']} &
      @report_data.map{|rd| rd['Relationship']}

この問題を解決するために私を助けてください。

よろしく、

ヴィーラ。

4

4 に答える 4

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_lblR‌​elName'] == @report_data[1]['Relationship']
  log_message("pass")
else
  log_message("fail")
end 

あなたがやろうとしていることかもしれません..しかし、私は推測しているだけです。

それはすべて、データの形状に依存します。

于 2013-07-24T07:07:49.270 に答える
0

ご提案いただきありがとうございます..しかし、以下のコードを使用して、2 つのハッシュ/配列から 1 つのキーを比較する別の解決策を見つけました。

string_equals?(loan_data[:id][:span]['MainContent_cphContent_LoanOverViewGeneralInfoCtrl_lblRelName'], @report_data[1]['Relationship'] )

ありがとう、

ヴィーラ。

于 2013-07-25T04:38:09.530 に答える
-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]}
于 2013-07-24T07:09:25.383 に答える