Ruby Waitir Gem,获得意想不到的结果

时间:2017-03-29 10:54:08

标签: ruby-on-rails ruby web-crawler watir watir-webdriver

2个星期前,我发布了关于我的watir脚本时间的帖子,我能够得到一个解决方案,但我意识到我得到的结果与帮助我的人不同。以下是原帖:Ruby Watir Gem, Timing Out on Form Input

require 'watir'

browser = Watir::Browser.new

browser.goto('https://tripadvisor.com/CheapFlightsHome')
browser.text_field(name: 'orig').set('Boston, MA - Logan International Airport (BOS)')
browser.text_field(name: 'dest').set('Milan, Italy - All Airports (MIL)')
browser.execute_script('document.querySelector(".in_date").click()')
browser.execute_script('document.querySelector(".day_28").click()')
browser.execute_script('document.querySelector(".out_date").click()')
browser.execute_script('document.querySelector(".day_2").click()')
browser.span(id: "CHECK_FARES_BUTTON").fire_event :click
puts browser.url
browser.quit

编写该代码的人得到了这样的结果: https://www.tripadvisor.com/CheapFlightsSearchResults-g187849-a_airport0.BOS-a_airport1.MIL-a_cos.0-a_date0.20170328-a_date1.20170402-a_nearby0.no-a_nearby1.no-a_nonstop.no-a_pax0.a-a_travelers.1-Milan_Lombardy.html

我的脚本中有相同的代码,出于某种原因,我只得到: https://www.tripadvisor.com/CheapFlightsHome

似乎按钮点击不是为我而发生的,不确定。我试过chrome和firefox。

2 个答案:

答案 0 :(得分:0)

首先,我将.fire_event :click更改为.click

然后出现了错误。

  

请输入有效的机场代码或城市。

其次,我试过这个:

browser.span(id: "CHECK_FARES_BUTTON").click
browser.span(id: "CHECK_FARES_BUTTON").click
puts browser.url

它将我重定向到: https://www.tripadvisor.com/CheapFlightsSearchResults-g187849-a_airport0.BOS-a_airport1.MIL-a_cos.0-a_date0.20170401-a_date1.20170402-a_nearby0.no-a_nearby1.no-a_nonstop.no-a_pax0.a-a_travelers.1-Milan_Lombardy.html

说实话,我不知道为什么它在第一次点击时没有注册输入...

我正在使用chrome。

答案 1 :(得分:0)

首先,您的点击实际上会打开另外两个窗口,而且您点击它的时间并不完全接收到点击,请使用此代码,它将适用于您,您将留下预期的窗口

require 'watir'
caps = Selenium::WebDriver::Remote::Capabilities.firefox(marionette: false)

driver=Selenium::WebDriver.for :firefox, desired_capabilities: caps, profile: "default"

b=Watir::Browser.new driver


b.goto('https://tripadvisor.com/CheapFlightsHome')
b.text_field(name: 'orig').set('Boston, MA - Logan International Airport (BOS)')
b.text_field(name: 'dest').set('Milan, Italy - All Airports (MIL)')
b.execute_script('document.querySelector(".in_date").click()')
b.execute_script('document.querySelector(".day_28").click()')
b.execute_script('document.querySelector(".out_date").click()')
b.execute_script('document.querySelector(".day_2").click()')
begin
b.element(xpath: ".//*[@id='CHECK_FARES_BUTTON']").click
end until b.windows.count>1

b.windows[0].close
b.windows[1].close

puts b.url
b.quit