私はそのドライバとしてSeleniumとcapybaraを使用しています。私は要素をクリックしようとしています。要素をクリックするとdivが表示されますが、クリックするとjavascriptが呼び出されることはありません。以下はSeleniumはjavascriptを実行しません
私が持っているコード
scenario 'currently used transport mode cannot be re-selected' do
expect(page).to have_css("h2.summary")
expect(find('h2.summary').text).to eq("Single event")
expect(page).to have_content("Change journey")
page.click_link("Change journey")
expect(find('#travel-times-preview').visible?).to be_truthy # FAILS here because of previous step not working
end
エラーメッセージ
カピバラ:: ElementNotFoundです:CSSを見つけることができません "#旅行-回-プレビュー"
HTML
<a class="change-journey gray-text" href="#">Change journey</a>
私は、リンクがクリックされて見ることができますが
JavaScriptコードが
$(".change-journey").on("click", function(e){
var target = $(this).data("preview-target");
$('[data-preview-toggle="'+ target +'"]').toggleClass("hidden");
if($(this).text().indexOf('Change journey') > -1){
$(this).text("Close Preview");
}else{
$(this).text("Change journey");
}
e.preventDefault();
});
データベースクリーナーセットアップ
config.before(:suite) do
if config.use_transactional_fixtures?
raise(<<-MSG)
Delete line `config.use_transactional_fixtures = true` from rails_helper.rb
(or set it to false) to prevent uncommitted transactions being used in
JavaScript-dependent specs.
During testing, the Ruby app server that the JavaScript browser driver
connects to uses a different database connection to the database connection
used by the spec.
This Ruby app server database connection would not be able to see data that
has been setup by the spec's database connection inside an uncommitted
transaction.
Disabling the use_transactional_fixtures setting helps avoid uncommitted
transactions in JavaScript-dependent specs, meaning that the Ruby app server
database connection can see any data set up by the specs.
MSG
end
end
config.before(:suite) do
DatabaseCleaner.clean_with(:truncation)
end
config.before(:each) do
DatabaseCleaner.strategy = :transaction
end
config.before(:each, type: :feature) do
# :rack_test driver's Rack app under test shares database connection
# with the specs, so we can use transaction strategy for speed.
driver_shares_db_connection_with_specs = Capybara.current_driver == :rack_test
if driver_shares_db_connection_with_specs
DatabaseCleaner.strategy = :transaction
else
# Non-:rack_test driver is probably a driver for a JavaScript browser
# with a Rack app under test that does *not* share a database
# connection with the specs, so we must use truncation strategy.
DatabaseCleaner.strategy = :truncation
end
end
config.before(:each) do
DatabaseCleaner.start
end
config.after(:each) do
DatabaseCleaner.clean
end
に実行するために、基礎となるjavascriptのは実行されません。
本当に適切な要素をクリックしますか?このコードは、HTMLのない私たちのために何も意味しません。 – Andersson
@Andersson私はhtmlリンクを追加しました。テスト環境を使用せずに手動でテストすることで動作することに注意してください。 e.preventDefault()がトリガーしないエラーであると思われます。そのリンクをクリックすると、代わりにページがリロードされます。 –
この質問には "capybara"とタグ付けする必要があります。なぜなら、これはあなたが使用しているもので、まっすぐなセレニウムではありません。 –