class GoogleHangout::Runner

Public Instance Methods

open(hangout_url, email, password) click to toggle source
# File lib/google_hangout/runner.rb, line 5
def open(hangout_url, email, password)
  Capybara.default_driver = :selenium
  Capybara.app_host = hangout_url

  # Go there
  visit '/'

  # Log in if not already logged in
  begin
    find_field('Email')
    if email.nil? || email.empty? || password.nil? || password.empty?
      puts "ERROR: You aren't logged in to Google, but you did not supply login credentials."
      return
    end
    fill_in 'Email', with: email
    fill_in 'Password', with: password
    click_button 'Sign in'
  rescue Capybara::ElementNotFound
    # User is already logged in
  end

  find('div[role="button"]', :text => 'Join').click

  # Make it full screen
  `osascript -e 'tell application "System Events" to keystroke "f" using {command down, control down}'`

  # Check for various error conditions and get back into the chat if necessary
  thread = Thread.new(page) do |main_page|
    while true do
      if main_page.body.match /Are you still there?/
        main_page.find('div[role="button"]', :text => 'Yes').click
      end

      if main_page.body.match /The video call ended because of an error/
        main_page.find('div[role="button"]', :text => 'Try Again').click
        main_page.find('div[role="button"]', :text => 'Join').click
      end

      if main_page.body.match /You left the video call/
        main_page.visit hangout_url
        main_page.find('div[role="button"]', :text => 'Join').click
      end

      sleep 5
    end
  end

  # Wait for some input so script doesn't exit
  puts "Press Return to quit"
  STDIN.gets

  # Clean up
  thread.kill
end