【问题标题】:Ruby Waitir Gem, getting unexpected resultsRuby Waitir Gem,得到意想不到的结果
【发布时间】:2017-03-29 21:14:01
【问题描述】:

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。

【问题讨论】:

  • 您使用的是哪个版本的 Chrome、Chromedriver、Selenium-Webdriver 和 Watir?我想知道是否存在差异来解释为什么我们看到相同代码的不同结果。
  • Chrome:57.0.2987.98,Chromedriver:2.28.455506,Selenium-Webdriver:3.3.0

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


【解决方案1】:

首先,您的点击实际上会打开另外两个窗口,而且您点击它的时间并没有完全收到点击,请使用此代码,它将为您工作,您将获得预期的窗口

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

【讨论】:

  • 这可以让我到达我想去的地方,谢谢。但我对它的工作原理感到困惑,你想用大写字母和驱动程序解释前几行吗?还有区别 b.element(xpath: ".//*[@id='CHECK_FARES_BUTTON']").click 和 browser.span(id: "CHECK_FARES_BUTTON").fire_event :click
  • 我已经包括不调用 Geckodriver 而是使用旧版 firefox 驱动程序的上限,但这并不重要,您可以稍后探索。并且 element(xpath,'') 和 span(:id,'') 没有区别,它的工作方式相同,两者都工作,只需尝试使用 span,它就会工作。这里要注意的一点是,当你执行 click 语句时,你的按钮没有正确接收到点击,所以为了确保你的按钮正确接收到点击,我写了这个条件b.windows.count>1 然后我关闭了你没有的窗口'不希望 b 变量自动连接到您的窗口以打印 url。
【解决方案2】:

首先,我将.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。

【讨论】:

  • 刚刚尝试过,我仍然得到:tripadvisor.com/CheapFlightsHome 在 Ubuntu 16.04 上,如果这很重要,这很奇怪:/
  • 我也在使用 Ubuntu 16.04。你确定双击了吗?是否出现无效消息/是否有点击事件?
  • 是的,我尝试了双击,但没有收到错误消息。我认为我根本没有收到点击事件。填写日期后浏览器会自动关闭,即使删除 browser.quit 行也是如此。
  • 如果你使用browser.execute_script('document.getElementById("CHECK_FARES_BUTTON").click()')呢?
  • 错误:`assert_ok':未知错误:无法读取 null 的属性“点击”(Selenium::WebDriver::Error::UnknownError)
猜你喜欢
  • 1970-01-01
  • 2023-04-08
  • 2015-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多