无法在watir中发送键盘命令的组合

时间:2014-04-01 20:02:29

标签: cucumber watir

我有一个步骤定义:

Then (/^I send '(.?*)' keys$/) do |key|
  $browser.send_keys key
end

我在我的功能文件中传递了:shift,:tab。这对我不起作用。

但是当我有一个步骤定义时

Then (/^I send keys$/) do
  key =:shift,:tab
  $browser.send_keys key
end

并硬编码该值,它工作正常。可能是什么问题?

1 个答案:

答案 0 :(得分:1)

<强>问题

问题在于,当Cucumber为您提供key(在第一步定义中)时,它是一个值为':shift,:tab'的字符串。 Watir只是将其视为文本,因此键入每个字符(而不是解释特殊键)。

相反,第二步定义key是一个包含2个符号的数组。

您需要从Cucumber步骤中获取字符串并将其操作为符号。

<强>解决方案

根据您需要发送的不同密钥序列,以下步骤定义可能就足够了:

Then (/^I send '(.?*)' keys$/) do |key|
  key_sequence = key.split(',').map do |key|
    if key[0] == ':'
      key[1..-1].to_sym
    else
      key
    end
  end

  $browser.send_keys key_sequence 
end

这一步将:

  1. 取字符串':shift,:tab'(从步骤开始)
  2. 在逗号上拆分字符串,假定将字符分开
  3. 如果键以冒号开头,则假定它是一个特殊字符并将其转换为符号。
  4. 如果密钥不以冒号开头,则假定它是纯文本并保持原样。
  5. 将映射的密钥发送到send_keys方法。