gpt4 book ai didi

ruby-on-rails - 为什么我不能让 Selenium 与 capybara 一起发挥作用

转载 作者:行者123 更新时间:2023-12-03 03:09:47 24 4
gpt4 key购买 nike

我正在尝试测试用户单击一个进行 ajax 调用的按钮。当我在浏览器中手动单击它时,它的行为符合预期,即按钮的默认行为被忽略,而是通过 ajax 获取结果,然后将结果添加到页面中。

但是当我使用 capybara 运行测试时,单击按钮后它会重定向到按钮操作。 Selenium 似乎没有发挥作用。我不明白为什么。

是我的配置吗?因为它在开发模式下工作,我假设这不是由于我的 jquery 代码,所以为了简洁起见,不显示它。

gem 文件

source 'http://rubygems.org'

gem 'rails', '3.1.0.rc4'

# Bundle edge Rails instead:
# gem 'rails', :git => 'git://github.com/rails/rails.git'

gem 'sqlite3'
gem 'omniauth', '~>0.2.0'
gem 'pusher'
gem 'youtube_it'
gem 'simple_form'

# Asset template engines
gem 'sass-rails', "~> 3.1.0.rc"
gem 'coffee-script'
gem 'uglifier'


gem 'jquery-rails'

# Use unicorn as the web server
# gem 'unicorn'

# Deploy with Capistrano
# gem 'capistrano'

# To use debugger
# gem 'ruby-debug19', :require => 'ruby-debug'

group :test do

gem "shoulda"
gem "factory_girl_rails"
# Pretty printed test output
gem 'turn', :require => false
gem 'mocha'
end

group :development do
gem 'rails3-generators'
gem "autotest"
end

group :development, :test do
gem "capybara", :git => 'git://github.com/jnicklas/capybara.git'
gem "launchy"
gem "haml-rails"
gem "database_cleaner"
end

或者我的 test_helper

ENV["RAILS_ENV"] = "test"
require File.expand_path('../../config/environment', __FILE__)
require 'rails/test_help'
require 'shoulda/rails'
require "capybara/rails"


class ActiveSupport::TestCase
# Setup all fixtures in test/fixtures/*.(yml|csv) for all tests in alphabetical order.
#
# Note: You'll currently still have to declare fixtures explicitly in integration tests
# -- they do not yet inherit this setting
fixtures :all

OmniAuth.config.test_mode = true

# Add more helper methods to be used by all tests here...
def login_in(user)
@request.session[:user_id] = user.id
end


def should_redirect_unauthorized
assert_redirected_to root_path
assert_match /you need to login/i, flash[:alert]
end
end


module ActionController
class IntegrationTest
include Capybara::DSL

self.use_transactional_fixtures = false

setup do
DatabaseCleaner.strategy = :truncation
DatabaseCleaner.start #workaround for capybara / selenium. See capybara docs
end


teardown do
DatabaseCleaner.clean #workaround for capybara / selenium. See capybara docs
end

#signup using twitter, facebook for authentication
def signup_using(provider)
OmniAuth.config.add_mock(provider.to_sym, {'uid' => "123456"})

visit '/'
page.click_link("#{provider}_auth")

assert_match /\/users\/\d+\/edit/, current_path
assert page.find("#flash").has_content?("Welcome to")
end

#login into existing account using twitter, facebook
def login_using(service)
OmniAuth.config.add_mock(service.provider.to_sym, {'uid' => service.uid})
visit '/'
page.click_link("#{service.provider}_auth")
assert page.find("#flash").has_content?("Welcome back")
assert_equal rooms_path, current_path
end

def login_and_visit_room(service, room)
login_using(service)
visit_room(room)
end

def visit_room(room)
visit room_path(room)
assert_equal room_path(@room.id), current_path
end
end
end

或我的集成测试中的设置 block

require 'test_helper'


class PlaylistStoriesTestTest < ActionDispatch::IntegrationTest
fixtures :all

setup do
Capybara.current_driver = :selenium
@user = Factory(:user)
@service = @user.services.create(:provider => "twitter", :uid => "123456")
@room = Factory(:room)
end

....

teardown do
Capybara.use_default_driver
DatabaseCleaner.clean #workaround for capybara / selenium. See capybara docs
end
end

最佳答案

使用 Capybara,您不应该对链接(即使它看起来像按钮)和按钮(例如“提交”)之间的区别感到困惑。您没有提供查看文件内容,但我猜您使用的是按钮,而不是链接。

对于 capybara ,你必须与众不同

visit '/'
click_button 'Login'

visit '/'
click_link 'Home'

另请参阅Capybara-Documentation在 GitHub 上

关于ruby-on-rails - 为什么我不能让 Selenium 与 capybara 一起发挥作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6747312/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com