Вопрос

В огурце я пытаюсь создать так, как это так:

Then I should see "Example business name" in the "Business name" input

Я хотел бы, чтобы «название бизнеса» определяется как «вход, ярлык которого имеет текст« название бизнеса ».

Вот что я получил на шаге до сих пор:

Then /^I should see "([^"]*)" in the "([^"]*)" input$/ do |content, labeltext|
  # Not sure what to put here
end

В jQuery я бы искал этикетку с этим текстом, посмотрите на его «для» атрибута и найдите вход с этим идентификатором. Но единственные селекторы, которые я видел до сих пор в огурце, это:

within("input:nth-child(#{pos.to_i}")

а также

page.should have_content('foo')

Может кто-нибудь предложить решение, используя синтаксис селектора Webrat / Capybara?

Это было полезно?

Решение

Догадаться

Вы можете найти вход с помощью текста метки, используя find_field(labeltext).

# Example:
# 'I should see "Howdy" in the "Greeting" input' ("Greeting" is the label text)
Then /^I should see "([^"]*)" in the "([^"]*)" input$/ do |content, labeltext|
    find_field("#{labeltext}").value.should == content
end

Другие советы

Это тоже работает. Разница здесь заключается в том, что он находит поле на основе частичного совпадения текста метки. Наши поля имеют «:» в конце их, но он не всегда прав, поэтому я не хотел совпадать на всей ценности этикетки ...

When /^i enter "([^"]*)" in the "([^"]*)" field$/i do |value, fieldname|
  @thefield = all("label").detect { |l| l.has_content?(fieldname) }
  if @thefield.nil? then
    raise Exception.new("Couldn't find field #{fieldname}")
  end
  fill_in @thefield[:for], :with=>value
end

Я все еще хочу продлить это, чтобы быть нечувствительным к случаю, хотя. Это мой первый день с rspec, огурцом, и я действительно никогда не использую Ruby, поэтому простите код менее, чем RUBYISH / RSPEC '. Но это, кажется, работает.

Обновлять

Следующее найдет поле на основе частичной этикетки через нечувствительный к регистру. Это работает как очарование для моих нужд.

When= /^i enter "([^"]*)" in the "([^"]*)" field$/i do |value, fieldname|
  @thefield = all("label").detect { |l| (l.text =~ /#{fieldname}/i).nil? == false }
  if @thefield.nil? then
    raise Exception.new("Couldn't find field '#{fieldname}'")
  end
  fill_in @thefield[:for], :with=>value
end
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top