为什么ruby在对select对象调用_sym时抛出错误?

为什么ruby在对select对象调用_sym时抛出错误?,ruby,capybara,Ruby,Capybara,当我针对“select one”类型的元素调用_sym时,遇到了一个错误 我收到错误“无法在pageName上输入字段”。当我对select one类型的元素调用以_sym时,会发生此错误。我如何才能查明此错误的原因并解决它 更新 根据@axeltetzlaff,我安装了Pry。我注意到[Sallation]的值返回nil,我希望得到下面给出的值: [1] pry(#<Step>)> values[e[:salutation]] => nil [2] pry(#<S

当我针对“select one”类型的元素调用_sym时,遇到了一个错误

我收到错误“无法在pageName上输入字段”。当我对select one类型的元素调用
以_sym
时,会发生此错误。我如何才能查明此错误的原因并解决它

更新

根据@axeltetzlaff,我安装了Pry。我注意到[Sallation]的值返回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
[1]撬(#)>值[e[:称呼]]
=>零
[2] 撬(#)>值
=>{:z=>“z”,
:a=>“a”,
:b=>“b”,
:c=>“c”,
:d=>“d”,
:e=>“e”,
:f=>“f”,
:g=>“”,
:h=>“”,
:敬礼=>“先生”,看……我有一个价值观
更新2

我取出了调试时使用的
put
,问题消失了:

put”到符号结果:“+e[:id]。到_-sym”#此行分解


代码不再在下一行中断。通过简单的推断,问题是我无法将字符串和符号连接起来。我猜在某个地方有一些ruby规则说我不能这样做,但我没有可用的规则。

to_sym
将字符串转换为符号。例如,
“a”。to_sym
变为
:a

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

puts e[:id].inspect
puts e[:id].class
更新: 您不能在Ruby中包含字符串和符号。这将导致
无法将符号隐式转换为字符串(TypeError)
异常

而不是做:

puts "to symbol result: " + e[:id].to_sym
您可以使用如下字符串插值执行相同的操作:

puts "to symbol result: #{e[:id].to_sym}"

to_sym
将字符串转换为符号。例如,
“a”。to_sym
变成
:a

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

puts e[:id].inspect
puts e[:id].class
更新: 您不能在Ruby中包含字符串和符号。这将导致
无法将符号隐式转换为字符串(TypeError)
异常

而不是做:

puts "to symbol result: " + e[:id].to_sym
您可以使用如下字符串插值执行相同的操作:

puts "to symbol result: #{e[:id].to_sym}"


在该行之前放置一个调试器,并调查交互式调试器中
e
的类型和内容。大约6个月前,我尝试安装交互式调试器,但没有成功。我将再次尝试该过程。是的,我知道,这可能是一个主要的pita-但一旦它起作用,你将永远不想放弃它;-)如果你愿意,请查看byebug我们使用的是一个最新的ruby版本,我让pry开始使用它。修补它,看看我是如何探索总目录列表的。我从中得到了一些结果,我在下面添加了K M的答案。@P.Brian.Mackey你必须做:
values[:sallation]
NOT
values[e[:sallation]]
在该行之前放置一个调试器,并调查交互式调试器中的
e
的类型和内容。大约6个月前,我尝试安装一个交互式调试器,但没有成功。我将再次尝试该过程。是的,我知道,这可能是一个主要的pita-但一旦它起作用,你将永远不想放弃它;-)请查看eBug如果您使用的是最新的ruby版本,我会继续使用pry。对它进行修补,看看我是如何探索总目录列表的。我从中得到了一些结果,并在下面添加了K M的答案。@P.Brian.Mackey您必须执行:
值[:称呼]
值[e[:称呼]]
e[:id]。class=>String
e[:id].inspect=>“\”saltation\”
这一个没有问题。当您在元素中循环时。可能是,元素的一个id没有返回字符串。如果您发布完整的代码,我可以在本地尝试,看看发生了什么。这不是一个不同的元素,因为我打印了循环中的每个元素。此元素失败(代码在上面)。在这些调试结果(标记为“this line explodes”)之后,代码永远不会通过下一次调用。与其使用
put
,不如使用
p
或出于调试目的。@p.Brian.Mackey最好使用byebug或任何类型的调试器来检查代码的好坏。顺便问一句,你的Ruby版本是什么?
e[:id]。class=>String
e[:id]。inspect=>“\”问候\”“
这一个没问题。当您在元素中循环时。可能是,元素的一个id没有返回字符串。如果您发布完整的代码,我可以在本地尝试看看发生了什么。这不是一个不同的元素,因为我打印了循环中的每个元素。此元素失败(代码在上面)。在这些调试结果(标记为“此行爆炸”)之后,代码永远不会通过下一次调用。与其使用
put
,不如使用
p
或出于调试目的。@p.Brian.Mackey最好使用byebug或任何类型的调试器来处理好代码和坏代码,并检查发生了什么。顺便问一下,您的Ruby版本是什么?