javascript — клик по событию с использованием Capybara / Poltergeist

Я пытаюсь запустить событие клика, используя Капибару и Полтергейста.

Мой объект:

<div id="sticker-reserva">
<button type="button" id="reservebtn" onclick="makeReservation()" class="btn btn-primary-outline btn-block m-b-2 disabled">Reservar</a>
</div>

Мои реализованные шаги:

When(/^user makes a reservation (.*)-(.*)$/) do |block,room|
visit $baseUrl+'/calendar/day/02/01/2016'
find(:xpath,'//div[@data="'+block+'/'+room+'"]').click

expect(page).to have_xpath("//div[@data='"+block+"/"+room+"' and @class='col-xs-2 calendario-diario-celda  press']")
page.execute_script("$('#reservebtn').click()")
step "I fill the form data"page.execute_script('$("#saveReservation").click()')
expect(page).to have_xpath("//div[contains(@class,'modal-body')]/p[2]", :text=>'Se ha guardado correctamente la reservación.')
find(:xpath,"//div[contains(@class,'modal-footer')]/button[@class='btn btn-border btn-default']").click
end

Когда я тестировал использование Selenium вместо Poltergeist, все работало без проблем.

Ошибка генерируется с: page.execute_script("$('#reservebtn').click()")

Я использовал утверждения page.expect, чтобы убедиться, что кнопка не была нажата.

Я попытался изменить строку, упомянутую с этими параметрами:

find(:xpath,'//button[@id="reservebtn"]').click
click_button 'reservebtn'
find(:xpath,'//div[@id="sticker-reserva"]').click
page.execute_script('makeReservation()');
page.execute_script("$('#reservebtn').click()")

ОБНОВИТЬ

1) Выполнение сценария создает следующие выходные данные:

Scenario: Reservation                       # features/reservation.feature:13
Given I am logged in as <USER_ROLE_SALES> # features/step_definitions/login_steps.rb:39
When user makes a reservation 1-C         # features/step_definitions/reservation_steps.rb:33
expected to find xpath "//div[@id=\"central-zone\"]/h1[@class=\"page-header\"]" with text "Nueva Reserva" but there were no matches. Also found "Calendario Diario Descargar Reporte", which matched the selector but not all filters. (RSpec::Expectations::ExpectationNotMetError)
./features/step_definitions/reservation_steps.rb:46:in `block (2 levels) in <top (required)>'
./features/step_definitions/reservation_steps.rb:45:in `/^user makes a reservation (.*)-(.*)$/'
features/reservation.feature:15:in `When user makes a reservation 1-C'
Then the reservation in 1-C is logged     # features/step_definitions/reservation_steps.rb:66

«Calendario Diario Descargar Reporte» — это название исходной страницы, где находится кнопка бронирования.

2) При нажатии на «Reservebtn» следует изменить страницу и показать форму бронирования, название страницы «Nueva Reserva». Но сейчас происходит то, что система остается в виде, в котором есть кнопка.

3) makeReservation () получает информацию из текущего представления и вызывает в php метод, который отображает форму бронирования и заполняет некоторые данные, такие как выбранная дата и комната, выбранная для события.

makeReservation(){
if(!$(this).hasClass('disabled')) {
$('#reservebtn').prop('disabled',true);
var reservationInfo = [];
$(".press").each(function (index) {
reservationInfo.push($(this).attr("data"));
console.log(index + ": " + $(this).attr("data"));
});

console.log(reservationInfo);

$.ajax({
url: '{{ url('reservation') }}',
data: {reservationInfo: reservationInfo, date: $('#dateNow').val()},
type: "POST",
beforeSend: function () {
$('#modalLoading').modal('show');
}
}).done(function (a) {
removeModal();
$('.main').html(a);
}).error(function (a) {
removeModal();
modalDefault('', 'Ha ocurrido un error. Vuelva a intentarlo', '', '', [0, 0, 1],[0], 'Entendido', 'error.svg');
});
}
}

4) Я использую следующие версии: PhantomJs 2.1.1.0 и Poltergeist 1.10.0
5) Это файл конфигурации для моих тестов:

require 'rspec/expectations'
require 'capybara'
require 'capybara/mechanize'
require 'capybara/poltergeist'
require 'capybara/cucumber'
require 'capybara/rspec'
require 'test/unit/assertions'
require 'mechanize'
require_relative 'browser_config'

World(Test::Unit::Assertions)

Capybara.default_driver = :poltergeist
Capybara.javascript_driver = :poltergeist
Capybara.register_driver :poltergeist do |app|
options = {
:js_errors => false,
:inspector => true,
:debug => false
}
Capybara::Poltergeist::Driver.new(app, options)
end
Capybara.ignore_hidden_elements = false

Capybara.app_host = "http://localhost"Capybara.run_server = false
Capybara.app = "make sure this isn't nil"Capybara.default_max_wait_time = 5

World(Capybara)

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]