Не удалось найти элемент с помощью огурца step_definition, но удалось найти его с помощью автономной капибары

Я тестирую веб-сайт, который имеет как вертикальную форму входа справа, так и горизонтальную форму внизу. Оба имеют одинаково названные поля «электронная почта» и «пароль». Итак, я использую within капибары для охвата интересующих меня полей. Интересные части веб-формы выглядят так:

введите здесь описание изображения

У меня есть два отдельных проекта, в которых я экспериментирую с лабораториями соусов для автоматизации. Первый проект — это пример только для водосвинки, модифицированный для тестирования страницы, показанной выше. Второй проект — это огуречная реализация точно таких же тестов. Это очень простые одноразовые жестко закодированные тесты, просто чтобы получить подтверждение концепции двух методов.

Вот интересный пример только для водосвинки:

within(:css, ".right-container.login-form") do
    fill_in 'email', :with => "greg.gauthier+#{generate_email_suffix}@website.com"
    fill_in 'password', :with => 'l33tP@$$w0rd'
    click_button 'Submit'
end

Вот интересная часть огурца step_definition:

When(/^The user enters his information$/) do
    within(:css, ".right-container.login-form") do #the page has duplicate forms
        fill_in 'email', :with => "greg.gauthier+#{generate_email_suffix}@website.com"
        fill_in 'password', :with => 'l33tP@$$w0rd'
        click_button 'Submit'
    end
end

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

Однако, когда я запускаю версию для огурцов, я получаю эту ошибку:

Unable to find css ".right-container.login-form" (Capybara::ElementNotFound)

Как это может быть? Это точно такая же страница, точно такой же метод водосвинки (within, с использованием селектора :css) и точно такой же тестовый код. Чего я не получаю (помимо того факта, что я наверное неправильно готовит)?

О, вот как выглядит список требований в соусе_помощника:

Версия только для капибары:

require "sauce"
require "sauce/capybara"
require 'capybara/rails'
require 'capybara/rspec'

Огуречный вариант:

require "sauce"
require "sauce/capybara"
require "sauce/cucumber"

Возможно, мне нужно включить дополнительные драгоценные камни водосвинки в версию с огурцом?


person Greg Gauthier    schedule 07.04.2014    source источник


Ответы (2)


Хорошо, мне стыдно это признавать, но причиной этого вопроса было незнание поведения веб-драйвера, по крайней мере, в том, как он работает с Capybara/Cucumber.

Рассматриваемый тест является вторым сценарием в наборе сценариев. Судя по всему, селен сбрасывает браузер до нуля между каждым сценарием. Итак, первый тест работает отлично, но второй, третий и т. д. тесты ElementNotFound завершаются ошибкой, потому что, конечно... рассматриваемая страница даже не была загружена.

Я добавил хук Before в файл hooks.rb в моем пути поддержки, и теперь он работает.

Извиняюсь за загромождение потока вопросов...

person Greg Gauthier    schedule 16.04.2014

Попробуйте добавить require 'capybara' перед require 'sauce' в «Версию огурца».

Из соуса GitHub

## In your test or spec helper
require "capybara"
require "sauce/capybara"

Рассуждение within вызывает find. Соус проверяет, определен ли метод поиска, и если да, то он создает свой собственный псевдоним с именем base_find, если нет, он использует свой собственный метод find, который не совпадает с методом капибары. Я думаю, что они могут иметь какое-то отношение к вашей проблеме, поскольку она использует метод find sauce.

Не уверен, что это ответ, но вы всегда можете попробовать.

person engineersmnky    schedule 07.04.2014
comment
Я почти уверен, что это как-то связано с библиотеками и порядком их загрузки. Я вынул внутреннюю часть. Кажется, капибара не может найти НИ ОДНОГО элемента в любом месте страницы, в моем примере с огурцом. - person Greg Gauthier; 08.04.2014
comment
Я немного возился со списком требований как в соусе_хелпера, так и в env, но, похоже, ничего не помогает. Возможно, мне следует просто придерживаться своей интуиции и отказаться от лишней сложности. - person Greg Gauthier; 08.04.2014
comment
@GregGauthier, вы пытались использовать только find('.right-container.login-form') или, возможно, within без указанного селектора, такого как within('.right-container.login-form') - person engineersmnky; 08.04.2014
comment
Я пробовал последнее, но саму находку не пробовал. Я попробую. - person Greg Gauthier; 08.04.2014
comment
Это не сработало. Как ни странно, предыдущий тест в виде ряда запросов has_content работает нормально. - person Greg Gauthier; 08.04.2014
comment
Очень странно, у меня закончились предложения, извините, я не мог больше помочь. Удачи - person engineersmnky; 08.04.2014