Огурец: найти ввод с текстом метки X? - PullRequest
5 голосов
/ 11 ноября 2010

В Cucumber я пытаюсь создать такой шаг:

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

Я бы хотел, чтобы вход "Business name" был определен как "вход, чья метка имеет текст" Business name. "

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

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

В jQuery я бы искал метку с этим текстом, посмотрел на ее атрибут "for" и нашел вход с этим идентификатором. Но единственные селекторы, которые я видел до сих пор в Cucumber, это:

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

и

page.should have_content('foo')

Кто-нибудь может предложить решение с использованием синтаксиса селектора Webrat / Capybara?

Ответы [ 2 ]

11 голосов
/ 11 ноября 2010

разобрался

Вы можете найти ввод по тексту метки, используя 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
0 голосов
/ 23 декабря 2010

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

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, cucumber, и я действительно никогда не использую ruby, поэтому простите код «меньше чем rubyish / rspec» но это похоже на работу.

Обновление

Далее будет найдено поле на основе частичной метки с помощью совпадения CASE INSENSITIVE. Это работает как брелок для моих нужд.

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
...