2013-11-27 1 views
5

"슬라이드"(페이지) 사이에 3 초 간격으로 슬라이드 쇼의 종류 인 Ruby에서 WebDriver로 URL 집합을 엽니 다. 그 일을보고있는 사람은 스페이스를 클릭 할 수 있으며 다른 파일에 저장된 페이지 URL이 필요합니다. 어떻게하면 그 중단을 처리 할 수 ​​있을까요?ruby ​​webdriver : 스크립트가 실행되는 동안 눌려진 키를 잡는 방법?

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 
+0

어디에서 공백을 누르겠습니까? 브라우저에서 또는 스크립트를 실행하는 명령 프롬프트를 의미합니까? –

+0

@ justin-ko : 나를 위해 잘 작동합니다. 나는 해결책을 여기에서 제안했다. http://stackoverflow.com/questions/946738/detect-key-press-non-blocking-wo-getc-gets-in-ruby 그러나 브라우저에서 눌러 진 어떤 키도 잡을 수 없었다. 아무 일도 일어나지 않습니다.) 또는 명령 줄 (눌려진 키를 표시하지만 실행중인 스크립트에는 영향을 미치지 않습니다). – earlyadopter

답변

3

문제는 STDIN.getch에서 해결할 수있는 것처럼 보입니다. 당신이 (예 : "루비 script.rb")을 다음 스크립트 파일을 만든 다음 명령 프롬프트에서 실행하는 경우

, 스크립트 것 : URL에

  1. 이동합니다.
  2. URL을 캡처해야하는지 묻습니다.
  3. 사용자가 10 초 내에 아무 것도 입력하지 않으면 다음 URL로 넘어갑니다. 너무 빠르기 때문에 3에서 변경했습니다. 줄을 Timeout::timeout(10)에서 3 초로 변경할 수 있습니다.
  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 

노트의 몇 : 입력 명령 프롬프트가 아닌 브라우저로 할 필요가

  • 참고.
  • 사용자가 할당 된 시간 초과 전에 키를 누르면 스크립트가 바로 다음 url로 진행합니다.
+0

저스틴, 다음 URL로 이동하려면 Enter 대신 아래쪽 화살표를 사용하는 방법을 생각해 볼 수 있습니까? 그리고 - 예, s-Enter 대신에 하나의 키 (예 : "s"는 "save"의 지름길)가 훨씬 좋을 수 있습니다. 아마도 $ stdin이 하나의 키만 기대하고 (some_entry) + Enter를 기대할 수있는 방법을 찾아야 할 것입니다. – earlyadopter

+0

좋아, 좀 더 파고 들자 마자, 나는 우리가 필요로하는 것을하기 위해 결합 될 수있는 핵심 라이브러리를 발견했다. (즉, 더 이상 키를 입력 할 필요가 없다.) 이 업데이트 된 답변을 사용해보십시오. –

관련 문제