使用PhantomJS / Poltergeist的Capybara:从下拉列表中选择值不会触发Ajax调用

时间:2013-07-01 09:57:40

标签: ruby phantomjs capybara html-select poltergeist

出于非商业目的,我正在尝试建立一个刮刀。我之前和PhantomJS合作过,它通常像魅力一样。但是,我偶然发现了以下问题:

我想做什么:

不幸的是,我可以选择我想要选择的选项,但事后没有任何反应。我创建了一个迷你脚本来演示这种行为:

require 'capybara/poltergeist'
require 'capybara/dsl'
include Capybara::DSL

Capybara.register_driver :poltergeist do |app|
  Capybara::Poltergeist::Driver.new(app, :js_errors => false)
end

Capybara.default_driver = :poltergeist
Capybara.javascript_driver = :poltergeist
Capybara.default_wait_time = 20
Capybara.ignore_hidden_elements = true
Capybara.current_session.driver.resize(1200, 1000)

visit('http://de.soccerway.com/national/germany/bundesliga/2010-2011/regular-season/r11840/')

# click on button 'per Spieltag'
find(:xpath, ".//a[text() = 'per Spieltag']").click

# drop down menu with matchdays
matchday_selector = find(:xpath, ".//select[@name='page']")

# save screenshot 'before'
save_screenshot('before.png', full: true)

# for demonstration purposes, select option with value '5'
matchday_selector.find(:xpath, ".//option[@value='5']").select_option

# wait some time for ajax call to be complete and save screenshot 'after'
sleep 5
save_screenshot('after.png', full: true)

如果比较屏幕截图之前和之后,您会看到下拉菜单的编号已更改,但表格的内容没有更改。此外,下拉菜单不会显示在正确的位置,而是显示在屏幕截图的左上角。

如果我使用Selenium作为我的默认驱动程序,那么它可以工作,但我宁愿使用PhantomJS,因为它的使用速度要快得多。

如何让PhantomJS触发Ajax调用?

我使用PhantomJS 1.9.1,Capybara 2.1.0和Poltergeist 1.3.0

0 个答案:

没有答案