为什么在针对select-one调用to_sym时抛出ruby错误?

时间:2015-08-10 15:27:33

标签: ruby capybara

当我针对“select-one”类型的元素调用to_sym时,我正在遇到错误。

  begin
    ["//select", "//input"].each do |t|
      puts 'finding input for : ' + t
      elements = all(:xpath, t)
      elements.each do |e|
        puts "found element #{e[:id]} of type #{e[:type]}" if @debug
        puts "to symbol result: " + e[:id].to_sym  #This line explodes
        #...
  rescue
    puts "failed to enter fields on #{@name}"
    raise
  end

我收到错误“无法在pageName上输入字段”。当我在类型select-one的元素上调用to_sym时会发生此错误。如何确定此错误的原因并解决它?

更新

Per @axeltetzlaff我安装了Pry。我注意到值[salutation]返回nil,我希望下面给出一个值:

[1] pry(#<Step>)> values[e[:salutation]]
=> nil
[2] pry(#<Step>)> values
=> {:z=>"z",
 :a=>"a",
 :b=>"b",
 :c=>"c",
 :d=>"d",
 :e=>"e",
 :f=>"f",
 :g=>"",
 :h=>"",
 :salutation=>"Mr.",#See...I have a value

UPDATE2

我拿出了用于调试的puts,问题就消失了:

puts "to symbol result: " + e[:id].to_sym #This line explodes

代码不再在下一行中断。通过简单的推论,问题是我无法连接字符串和符号。我猜这里有一些红宝石规则,说我不能这样做,但我没有一个可用。

1 个答案:

答案 0 :(得分:0)

NetworkingRequestDidUpdatProgress:(float progress)将字符串转换为符号。例如,to_sym变为"a".to_sym

确保您的:a返回一个您正在调用e[:id]方法的字符串对象。尝试检查:

to_sym

更新

你不能在Ruby中连接字符串和符号。这会抛出puts e[:id].inspect puts e[:id].class 例外。

而不是:

no implicit conversion of Symbol into String (TypeError)

你可以使用字符串插值做同样的事情:

puts "to symbol result: " + e[:id].to_sym