ruby webdriver:如何在脚本运行时捕获按键?

ear*_*ter 5 ruby watir-webdriver

我正在使用ruby中的WebDriver打开一组URL - 一种幻灯片,在"幻灯片"(页面)之间间隔3秒.查看发生这种情况的人可能会单击Space,我需要将该页面URL保存到另一个文件中.我怎么能处理这些中断 - 抓住Space的事件?

require "watir-webdriver"

urls = [...list of URLs here...]
saved = []

b = Watir::Browser.new

urls.each do |url|
  b.goto url
  sleep(3)

  # ...what should I put here to handle Space pressed?

  if space_pressed
    saved << b.url
  end
end
Run Code Online (Sandbox Code Playgroud)

Jus*_* Ko 3

看来您的问题可以通过 STDIN.getch 解决。

如果您使用以下脚本创建一个文件,然后在命令提示符下运行它(例如“ruby script.rb”),该脚本将:

  1. 导航至该网址。
  2. 询问是否应该捕获 url。
  3. 如果用户在 10 秒内没有输入任何内容,则会继续执行下一个 url。我把它从 3 改了,因为它太快了。您可以将行中的时间改回 3 秒Timeout::timeout(10)
  4. 如果用户确实输入了一些内容,如果输入的是空格,它将保存 url。否则它会忽略它并继续前进。

脚本:

require "watir-webdriver"
require 'io/console'
require 'timeout'

urls = ['www.google.ca', 'www.yahoo.ca', 'www.gmail.com']
saved = []

b = Watir::Browser.new

urls.each do |url|
  b.goto url

  # Give user 10 seconds to provide input
  puts "Capture url '#{url}'?"
  $stdout.flush
  input = Timeout::timeout(10) {
    input = STDIN.getch
  } rescue ''

  # If the user's input is a space, save the url
  if input == ' ' 
    saved << b.url
  end
end

p saved
Run Code Online (Sandbox Code Playgroud)

一些注意事项:

  • 请注意,输入必须是命令提示符而不是浏览器。
  • 如果用户在指定的超时之前按下某个键,脚本将立即前进到下一个 URL。