gpt4 book ai didi

jquery - capybara-webkit 无法模拟点击(非链接/按钮)元素

转载 作者:行者123 更新时间:2023-12-03 22:49:41 25 4
gpt4 key购买 nike

在 rspec 功能场景中,我有:

scenario 'shows things', js: true do

page.find('#my_div').trigger(:click)

这似乎不会触发该元素的单击事件上的 jQuery 处理程序。在调试器中,此调用返回一个空字符串“”。

capybara-webkit 是否应该能够使用 jQuery 处理程序模拟鼠标事件,触发更新 dom 的 ajax 请求?如果是这样,对此案有什么建议吗?我从 selenium-webdriver 切换过来,因为不支持 capybara #trigger 方法。

并且尝试直接触发 jQuery 事件会引发错误:

page.execute_script "$('#masthead .fclass').trigger('click')"

给出

Capybara::Webkit::InvalidResponseError:
Javascript failed to execute

我的 gemfile 有

group :test do
gem 'capybara'
gem "database_cleaner", "~> 0.9.1"
gem 'capybara-webkit', git: 'git://github.com/thoughtbot/capybara-webkit.git'
gem 'launchy'
end

我正在使用“edge”capybara-webkit,因为我遇到了 xpath 错误的错误(v2.04?)。

尽管我尝试在 spec/spec_helper.rb 中添加机架异常,但我无法获取 javascript 错误的日志:

ENV["RAILS_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
require 'rspec/autorun'
require 'capybara/rspec'
require 'rack/utils'
Capybara.app = Rack::ShowExceptions.new(MyApp::Application)

# Requires supporting ruby files with custom matchers and macros, etc,
# in spec/support/ and its subdirectories.
Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}

RSpec.configure do |config|
#...

Capybara.javascript_driver = :webkit

config.before (scope = :suite) do
%x[bundle exec rake assets:precompile]
end

config.use_transactional_fixtures = false

config.before(:suite) do
DatabaseCleaner.strategy = :truncation
end

config.before(:each) do
DatabaseCleaner.start
end

config.before(:each) do
DatabaseCleaner.clean
end

config.infer_base_class_for_anonymous_controllers = false
end

更新:我用

替换了 capybara-webkit
gem 'poltergeist' 

在spec/spec_helper.rb中:

    require 'capybara/poltergeist'
...
Capybara.register_driver :poltergeist do |app|
Capybara::Poltergeist::Driver.new(app, { debug: true })
end
Capybara.javascript_driver = :poltergeist
Capybara.current_driver = :poltergeist

我从 page("#my_id").trigger('click') 在控制台中收到这些错误消息:

...
{"name"=>"click", "args"=>[3, 2]}
poltergeist [1366370900594] state default -> mouse_event
poltergeist [1366370900596] state mouse_event -> loading
Not allowed to load local resource: file:///home/me/rails/my_app/public/assets_test/application.css
...
Not allowed to load local resource: file:///home/me/rails/my_app/public/assets_test/application.js

我尝试 chmod the poltergeist gem 权限,但结果相同。

并尝试运行 page.execute_script(%Q($("my_id").trigger('click')))给出 jQuery 未定义类型错误:

 ReferenceError: Can't find variable: $
at phantomjs://webpage.evaluate():1
at phantomjs://webpage.evaluate():1
at phantomjs://webpage.evaluate():1
at phantomjs://webpage.evaluate():1

最佳答案

我遇到的问题和解决方案:

1) selenium-webdriver 或 capybara-webkit 不支持 Capybara trigger() 方法。

  • 解决方案:直接从javascript触发jquery事件:page.execute_script(%Q($("#...尽管这没有那么有用,因为它可以在用户不可见的元素上触发事件。

2) save_and_open_page不使用资源管道,因此如果您隐藏了可点击元素,则相当无用。 poltergeist 驱动程序有 save_screenshot,它可以工作,但它不如拥有加载了资源的真实浏览器页面有用

  • 解决方案:在测试中预编译 Assets ,尽管我无法让 jQuery 加载任何驱动程序($ 未定义)并且 poltergies/phantomjs 不允许访问本地编译文件(将命令行选项传递给驱动程序没有影响)

  • 更好的解决方案:使用未发布的 Capybara 2.1+ gem 'capybara', git: 'git://github.com/jnicklas/capybara.git' ,添加Capybara.asset_host = "http://localhost:3000"到spec_helper.rb并保持开发服务器运行

3) capybara -webkit Error undefined method find_xpath for #<Capybara::Webkit::Driver使用时Capybara.javascript_driver = :webkit

  • 解决方案:使用master分支 gem 'capybara-webkit', git: 'git://github.com/thoughtbot/capybara-webkit.git'

我最终的设置是 Poltergeist(支持触发方法)+ Capybara beta,其 Assets 由开发服务器提供(未预编译),因此 save_and_open_page 可以工作。

关于jquery - capybara-webkit 无法模拟点击(非链接/按钮)元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16096278/

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