Я пытаюсь протестировать часть своего приложения Rails 5.1, в котором используется Vue.js. Проблема, с которой я сталкиваюсь, заключается в том, что, например, при создании списка код Vue выглядит так:
<div v-for="(amenity, idx) in amenities">
<div class="custom-control custom-checkbox">
<input type="checkbox" class="custom-control-input" v-bind:id="amenity.text" v-model="checkedAmenities[idx]" :value="amenity.id">
<label class="custom-control-label" v-bind="{ 'for': amenity.text }" >{{ amenity.text }}</label>
</div>
</div>
и фактический HTML, который это создает после оценки, выглядит следующим образом:
<div>
<div class="custom-control custom-checkbox">
<input id="Air conditioning" class="custom-control-input" value="0" type="checkbox"> <label for="Air conditioning" class="custom-control-label">Air conditioning</label>
</div>
</div>
В итоге я получаю эту ошибку в своих спецификациях:
Capybara::ElementNotFound:
Unable to find visible checkbox "Some amenity" that is not disabled
Это связано с тем, что удобства определены в компоненте Vue, но не выводятся в HTML, пока они не будут проанализированы интерпретатором JS, как мне кажется.
Я пытаюсь протестировать Chrome Headless. Я создал следующий файл chrome_driver.rb:
Capybara.register_driver(:headless_chrome) do |app|
capabilities = Selenium::WebDriver::Remote::Capabilities.chrome(
chromeOptions: { args: %w[headless disable-gpu] }
)
Capybara::Selenium::Driver.new(
app,
browser: :chrome,
desired_capabilities: capabilities
)
end
и в моем rails_helper.rb:
require 'selenium/webdriver'
RSpec.configure do |config|
# ...
Capybara.javascript_driver = :headless_chrome
end
мой тест RSpec выглядит примерно так:
scenario 'successfully', js: true do
# do some things here..
check('Some amenity')
click_button 'Next'
click_link 'Create Listing'
expect(page).to have_content 'Listing was created successfully!'
end
но, как уже упоминалось, ошибка, которую я получаю:
Capybara::ElementNotFound:
Unable to find visible checkbox "Some amenity" that is not disabled
Любая идея, как я могу заставить Chrome безголовый анализировать код Vue.js, чтобы удобства заполнялись во внешнем интерфейсе?
Заранее спасибо!!