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

Ruby Waitir Gem, getting unexpected results

2 周前,我提出 post 关于我的 watir 脚本超时的问题,我能够找到解决方案,但我很晚才意识到我得到的结果与帮助我的人不同出去。这里是原文post:

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 我都试过了。

首先,我把.fire_event :click改成了.click

然后出现错误。

Please enter a valid airport code or city.

其次,我试过这个:

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。

首先,您的点击实际上打开了另外两个 window 并且您点击它的时间并没有完全收到点击,请使用此代码,它会为您工作,您将留下您的预计 window

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