2013-07-29 3 views
2

написал определение шага, которое проверяет элементы CSS с использованием rspec в коллекции. Если одно ожидание терпит неудачу во всех сценариях, и я даже не получаю уникальную обратную связь о том, существует ли каждый элемент CSS или нет (это все или ничего, к сожалению, я этого не хочу)Изменение определения шага огурца, чтобы дать более полезный результат

У меня есть следующий код:

Then(/^I should see the following css selectors:$/) do |table| 
    css_selectors = table.raw 
    css_selectors.each do |selector| 
    browser.element(:css=>selector.to_s).exists?.should be_true 
    end 
end 

Если я испытываю большой список элементов, а именно:

Then I should see the following css selectors: 
    |input#foo| 
    |.bar  | 
    |h#baz | 
    |span.batz| 

Я есть проблемы, если какой-либо элемент не существует. Помогите!

ответ

1

Вы можете добавить специальное сообщение к провалу, который включает в себя селектор, который не удалось. Это делается путем передачи второго аргумента should метода:

Then(/^I should see the following css selectors:$/) do |table| 
    css_selectors = table.raw 
    css_selectors.each do |selector| 
    css_selector = selector[0].to_s 
    browser.element(:css=>css_selector).exists?.should be_true, "Element not found: #{css_selector}" 
    end 
end 

Это дало бы сообщение об ошибке, как:

Element not found: input#foo (RSpec::Expectations::ExpectationNotMetError) 

Если вы хотите, чтобы убедиться, что все селекторы выполняются, вы будете иметь для запуска каждого из них, сбора результатов и выполнения утверждения по группе результатов.

Then(/^I should see the following css selectors:$/) do |table| 
    css_selectors = table.raw 

    # Collect any failed selectors 
    failed_selectors = [] 
    css_selectors.each do |selector| 
    css_selector = selector[0].to_s 
    failed_selectors << css_selector unless browser.element(:css=>css_selector).exists? 
    end 

    # Check that none of the selectors failed 
    failed_selectors.should be_empty, "The following elements were not found #{failed_selectors.join(', ')}" 
end 
+0

hmm. попробовал. не совсем работает. глядя на него еще немного. это похоже на отличное решение, и я помню, узнав об этом, когда я читал rspec –

+0

да. это не сработало. Я использую rspec 2.14. пытаясь исправить это ... –

+1

Попробуйте обновленный ответ. Я думаю, проблема заключается в том, что 'selector.to_s' возвращает' [input # foo] ', что испортит ваш селектор. Вам нужно сделать дополнительный '[0]', чтобы получить первый элемент строки таблицы. Если это не так, не могли бы вы рассказать о «не работает». –

Смежные вопросы