首页 > 解决方案 > 从输入框中检索值并且该值是数字时,RSpec 期望的行为很奇怪

问题描述

我有一个辅助方法,可以在输入框中设置一个值,然后验证文本。但是,如果该值为数字,则此操作失败。它看起来像:

def fill_in_value(label, text_input)
  textarea = find(locator of the input box, using the label passed into this method)
  textarea.set(text_input)
  textarea.value.should == text_input
end

但是,如果text_input是一个数字,则 rspec 期望失败expected: 1 got: "1" (using ==)

我可以通过执行以下操作来解决此问题:

text_input = text_input.to_s if text_input.is_a? Numeric

但这似乎真的很笨拙。有没有办法让我正确评估插入输入框中的文本?

标签: selenium-webdriverrspeccapybara

解决方案


任何 HTML 字段的值都将是字符串(即使它是“数字”字段)。您不需要做一个条件 on text_input,只需始终这样做,text_input = text_input.to_s因为正如您的参数名称所暗示的那样 - 它应该是文本。此外,您永远不应该这样做textarea.value.should == ...是片状测试的主要方法。相反,您应该使用 Capybara 提供的匹配器

textarea.should match_selector(:field, with: text_input.to_s)

或者如果使用较新expect的 RSpec 语法

expect(textarea).to match_selector(:field, with: text_input.to_s)

推荐阅读