В форме у нас есть следующее поле выбора:
<select class="hundred js-select2 js-country-check select2-hidden-accessible" name="pledge[pledgor_home_country]" id="pledge_pledgor_home_country" tabindex="-1" aria-hidden="true">
<option value="GB">United Kingdom</option>
<option value="US">United States</option>
<option value="DE">Germany</option>
<option value="AU">Australia</option>
<option value="BR">Brazil</option>
<option value="BG">Bulgaria</option>
<option value="CA">Canada</option>
<option value="CN">China</option>
<option value="DK">Denmark</option>
<option value="EE">Estonia</option>
<option value="FI">Finland</option>
<option value="FR">France</option>
<option value="HK">Hong Kong</option>
<option value="IS">Iceland</option>
<option value="IN">India</option>
<option value="IE">Ireland</option>
<option value="IL">Israel</option>
<option value="KE">Kenya</option>
<option value="LB">Lebanon</option>
<option value="LU">Luxembourg</option>
<option value="NL">Netherlands</option>
<option value="NO">Norway</option>
<option value="PL">Poland</option>
<option value="PT">Portugal</option>
<option value="SG">Singapore</option>
<option value="ES">Spain</option>
<option value="SE">Sweden</option>
<option value="CH">Switzerland</option>
<option value="TR">Turkey</option>
</select>
И с ним связана функция JQuery:
$('#pledge_pledgor_home_country').change(function() { //change stuff on the page})
Я хочу провести какую-то проверкуэто в наших функциональных тестах, поэтому я попробовал варианты этого:
When("I select a non-EU country such as Switzerland") do
find('#pledge_pledgor_home_country').find('option[value="CH"]').select_option
script = "$('#pledge_pledgor_home_country').change();"
page.execute_script(script)
end
Но я не могу заставить его работать - метод Capybara # execute_script всегда возвращает nil
, поэтому я неполучить любую обратную связь, и содержимое страницы не меняется, как ожидалось.Если я save_and_open_page
и просто запускаю строку $('#pledge_pledgor_home_country')
из консоли, он возвращает элемент html <select>
, а не объект JQuery, который я получаю при запуске того же сценария на той же странице в Chrome.Но я не уверен, связано ли это с проблемой теста или проблемой с запуском скриптов в браузере без монитора.
Я также попытался использовать этот скрипт в этом тесте на Capybara: script = "$('#pledge_pledgor_home_country').trigger('change');"
.Это также не сработало.
В Gemfile у нас есть это:
group :development, :test do
gem "poltergeist", "~> 1.18.1"
gem "phantomjs", "~> 2.1.1.0", require: 'phantomjs/poltergeist'
end
В папке features / support проекта Rails я настроил драйвер JS таким образом:
Capybara.javascript_driver = :poltergeist
Capybara.register_driver :poltergeist do |app|
Capybara::Poltergeist::Driver.new(app, timeout: 1.day, js_errors: false)
end
И файл функций Cucumber выглядит следующим образом:
@javascript
@vcr
Scenario: Updating GDPR display by country
Given I am on the new pledge page # (just loads the page) in question
When I select a non-EU country such as Switzerland
...
Я не уверен, что еще можно попробовать на этом этапе.Есть ли (хороший) способ сделать это?