Невозможно щелкнуть кнопки модального диалога начальной загрузки с помощью Poltergeist

Когда я нажимаю кнопку, отображается модальное всплывающее окно начальной загрузки. Я попытался нажать кнопку «ОК» или «Отменить», используя функции полтергейста, как показано ниже, но ни одна из них не сработала. Либо функции не работают, либо щелкает снаружи.

<div class="modal-footer">
<a class="btn cancel" data-dismiss="modal" href="#">Cancel</a>
<a class="btn proceed btn-primary" href="#">OK</a>
</div>

click_link "Release"
page.driver.render('ReleaseOKCANCEL.jpg', :full =>true)

При нажатии кнопки «Выпуск» появится модальное окно начальной загрузки с кнопками «ОК» и «Отмена», что можно проверить с помощью снимков экрана. Попытка нажать кнопку ОК с помощью следующих команд.

  1. page.find ('. btn.proceed.btn-primary'). trigger ('щелкнуть')
  2. click_link ('ОК')
  3. page.execute_script ('$ (". btn.proceed.btn-primary"). trigger ("щелкнуть")')
  4. page.execute_script ('$ (". btn.proceed.btn-primary"). trigger ("hover"). trigger ("cli‌ ck")')
  5. page.all (".//*[@ id = 'confirm_dialog'] / div [3] / a [2]"). first.click
  6. click_button "ОК"
  7. click_on "ОК"
  8. page.dismiss_confirm do page.find ('. btn.proceed.btn-primary'). нажмите конец
  9. page.find ('. modal'). find ('. modal-footer'). find ('. btn.proceed.btn-primary'). trigg‌er ('click')

Но ничего не работает. После нажатия кнопки ОК в приложении произойдет изменение статуса. Но этого не происходит.


person anitha    schedule 08.12.2014    source источник
comment
1) page.find ('. Modal'). Find ('. Modal-footer'). Find ('. Btn.proceed.btn-primary'). Trigger ('click') 2) page.find ('. btn.proceed.btn-primary '). trigger (' click ') 3) click_link (' OK ') 4) page.execute_script (' $ (. btn.proceed.btn-primary) .trigger (click) ') 5 ) page.execute_script ('$ (. btn.proceed.btn-primary) .trigger (hover) .trigger (click)') 6) page.all (.//*[@ id = 'confirm_dialog'] / div [ 3] / a [2]). First.click 7) click_button OK 8) click_on OK 9) page.dismiss_confirm do page.find ('. Btn.proceed.btn-primary'). Click end   -  person anitha    schedule 08.12.2014
comment
Версии - Полтергейст - 1.5.1 Capybara- 2.4.4 Ruby - 1.9.3 Я запускаю через rspec Имя файла с путем   -  person anitha    schedule 08.12.2014
comment
и вы уверены, что действительно сможете найти эти элементы? У меня была аналогичная проблема, и оказалось, что в глубине стека div модальный был в iframe, который является другим контекстом DOM (чтобы выразить это таким образом)   -  person 4rlekin    schedule 08.12.2014
comment
Я вижу, я смог просмотреть его через page.driver.render (@screenshotLoc + 'page.jpg',: full = ›true)   -  person anitha    schedule 08.12.2014
comment
Я спросил не об этом, можете ли вы добраться до него с помощью селекторов jquery?   -  person 4rlekin    schedule 08.12.2014
comment
нет, вот в чем проблема. Я не могу выполнять какие-либо действия в модальном окне никакими средствами   -  person anitha    schedule 08.12.2014
comment
можешь тогда опубликовать html? предпочтительно через pastebin или что-то еще, если его большой   -  person 4rlekin    schedule 08.12.2014
comment
Даже если я использую JQuery или что-то еще, это проходит. Либо тест не проходит, либо всплывающее окно закрывается   -  person anitha    schedule 08.12.2014
comment
‹Div class = modal-footer› ‹a class=btn отменить data-dismiss=modal href=#› Отменить ‹/a› ‹a class=btn продолжить btn-primary href=#› OK ‹/a› ‹/div›   -  person anitha    schedule 08.12.2014
comment
и какой именно результат вы ожидаете? я имею в виду, откуда вы знаете, что эта функция не работает? кстати, не публикуйте html в комментариях - лучше поместите его в свой пост в блоке кода и в отформатированной форме   -  person 4rlekin    schedule 08.12.2014
comment
После нажатия кнопки ОК статус на главной странице будет изменен. Но проблема в том, что статус не меняется, так как событие щелчка не произошло.   -  person anitha    schedule 08.12.2014
comment
а как именно статус меняется? есть что-то, что подслушивает события? потому что в этом html, который вы разместили, нет ничего значительного в атрибуте href ... также было бы очень полезно, если бы вы разместили больше html, чтобы я действительно мог попробовать его самостоятельно   -  person 4rlekin    schedule 08.12.2014
comment
Действия триггера события происходят в базе данных, к которой у меня нет доступа. Также мне нужно, чтобы эта кнопка ОК была нажата во всплывающем окне Modal.   -  person anitha    schedule 08.12.2014
comment
Извините, но я на самом деле ничего пока не знаю, у меня есть какой-то общий html и еще немного ... Не могли бы вы предоставить дополнительную информацию?   -  person 4rlekin    schedule 08.12.2014
comment
Учитывая приведенный выше фрагмент и проблему, с которой я столкнулся   -  person anitha    schedule 08.12.2014


Ответы (2)


Я писал кучу спецификаций функций / интеграции за последние несколько недель - и нацелился на множество полей и кнопок в модальных окнах начальной загрузки (хотя имена классов были изменены по сравнению со значениями по умолчанию для начальной загрузки).

Вот тест, который отлично работает для меня с ванильным модальным загрузочным файлом:

 it "displays edit profile page pre-filled for editing after successful form submission" do
    click_link "List a Property"

    within("form#new_user") do
      fill_in "user[login]", with: user.username
      fill_in "user[password]", with: user.password
      fill_in "user[email]", with: user.email
      fill_in "user[first_name]", with: user.first_name
      fill_in "user[last_name]", with: user.last_name
      fill_in "user[phone_number]", with: user.phone_number
      click_button "List My Properties"
    end

    expect(current_path).to eq account_path(:profile)
    within(".profile-name") { expect(page).to have_content user.username }
    find_field("user[first_name]").value.should eq user.first_name
  end

Использование метода inside () в Capybara обычно избавляет от множества проблем с таргетингом, с которыми я мог бы столкнуться в противном случае.

Я также должен отметить, что все тесты js включены следующей строкой:

describe "User", js: :true do
person Ben Hawker    schedule 12.11.2015

Единственный способ щелкнуть элемент в модальном окне Bootstrap - это

execute_script("document.querySelector('.multiselect__tags').click()")

где элемент выбирается querySelector

person LE-HU    schedule 26.02.2021