Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
tree: 4edb39bdef
Fetching contributors…

Cannot retrieve contributors at this time

205 lines (174 sloc) 6.16 kb
# -*- coding: utf-8 -*-
require File.expand_path('../watirspec_helper', __FILE__)
# keyboard input
# ---------------
describe 'Keys' do
after :each do
browser.keys.release
end
describe '#send' do
before :each do
browser.url = fixture('two_input_fields.html')
@one = window.find_by_name('one')
@two = window.find_by_name('two')
@one.click
end
it 'types a single character' do
browser.keys.send 'A'
@one.value.should == 'A'
end
it 'types a mixed-case string' do
browser.keys.send 'ABC abc'
@one.value.should == 'ABC abc'
end
it 'types a string containing multi-byte characters' do
browser.keys.send 'ルビー 水'
@one.value.should == 'ルビー 水'
end
it 'types many single characters in sequence' do
browser.keys.send 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I',
'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V',
'W', 'X', 'Y', 'Z'
@one.value.should == 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
end
it 'moves the caret using arrow keys' do
browser.keys.send 'AC', :left, 'B'
@one.value.should == 'ABC'
end
it 'switches to a different input element with tab' do
browser.keys.send 'AB', :tab, 'C'
@one.value.should == 'AB'
@two.value.should == 'C'
end
it 'uses modifier keys' do
browser.keys.send [:shift, 'a'], 'bc'
@one.value.should == 'Abc'
end
it 'uses multiple modifier keys to manipulate selection' do
browser.keys.send 'ABC 123'
# Selection using keys works differently on OS X
if Config::CONFIG['host_os'] =~ /darwin|mac os/
browser.keys.send [:shift, :alt, :left], :backspace
else
browser.keys.send [:shift, :control, :left], :backspace
end
@one.value.should == 'ABC '
end
it 'presses an invalid key' do
browser.keys.send(:hoobaflooba).should raise_error InvalidKeyException
end
end
describe '#down' do
it 'types a mixed-case string by holding shift' do
browser.url = fixture('two_input_fields.html')
window.find_by_name('one').click
browser.keys.send 'a'
browser.keys.down :shift
browser.keys.send 'b'
window.find_by_name('one').value.should == 'aB'
browser.keys.up :shift
end
it 'holds down a non-modifier key for one second' do
browser.url = fixture('two_input_fields.html')
window.find_by_name('one').click
browser.keys.down 'a'
sleep 1
browser.keys.up 'a'
window.find_by_name('one').value.should include 'aa' # Two or more characters are expected.
end
it 'triggers onkeydown' do
browser.url = fixture('keys.html')
browser.keys.down :shift
window.find_by_id('log').text.should include 'down, 16'
browser.keys.up :shift
end
it 'does not trigger onkeyup' do
browser.url = fixture('keys.html')
browser.keys.down :shift
window.find_by_id('log').text.should_not include 'up, 16'
browser.keys.up :shift
end
it 'presses two buttons at the same time' do
browser.url = fixture('keys.html')
browser.keys.down :shift, :control
window.find_by_id('log').text.should include 'down, 16'
window.find_by_id('log').text.should include 'down, 17'
browser.keys.up :shift
browser.keys.up :control
end
it 'presses an invalid key' do
browser.keys.down(:hoobaflooba).should raise_error InvalidKeyException
end
it 'passes an array instead of a string' do
browser.keys.down([:shift, :control]).should raise_error NativeException
end
end
describe '#up' do
it 'types a mixed-case string by holding shift' do
browser.url = fixture('two_input_fields.html')
window.find_by_name('one').click
browser.keys.down :shift
browser.keys.send 'a'
browser.keys.send 'b' # Testing that we do not release prematurely
browser.keys.up :shift
browser.keys.send 'c'
window.find_by_name('one').value.should == 'ABc'
end
it 'holds down a non-modifier key for one second (but no longer)' do
browser.url = fixture('two_input_fields.html')
window.find_by_name('one').click
browser.keys.down 'a'
sleep 1
browser.keys.up 'a'
result_string = window.find_by_name('one').value
sleep 1
window.find_by_name('one').value.should == result_string
result_string = nil
end
it 'triggers onkeyup' do
browser.url = fixture('keys.html')
browser.keys.down :shift
browser.keys.up :shift
window.find_by_id('log').text.should include 'up, 16'
end
it 'presses two buttons, but releases only one' do
browser.url = fixture('keys.html')
browser.keys.down :shift, :control
browser.keys.up :shift
window.find_by_id('log').text.should include 'up, 16'
window.find_by_id('log').text.should_not include 'up, 17'
browser.keys.up :control
end
it 'releases two buttons' do
browser.url = fixture('keys.html')
browser.keys.down :shift, :control
browser.keys.up :shift, :control
window.find_by_id('log').text.should include 'up, 16'
window.find_by_id('log').text.should include 'up, 17'
end
it 'presses an invalid key' do
browser.keys.down(:hoobaflooba).should raise_error InvalidKeyException
end
it 'passes an array instead of a string' do
browser.keys.up([:shift, :control]).should raise_error NativeException
end
end
describe '#release' do
it 'releases one button' do
browser.url = fixture('two_input_fields.html')
window.find_by_name('one').click
browser.keys.down :shift
browser.keys.send 'a'
browser.keys.release
browser.keys.send 'b'
window.find_by_name('one').value.should == 'Ab'
end
it 'releases two buttons' do
browser.url = fixture('keys.html')
browser.keys.down :shift, :control
browser.keys.release
window.find_by_id('log').text.should include 'up, 16'
window.find_by_id('log').text.should include 'up, 17'
end
end
end
Jump to Line
Something went wrong with that request. Please try again.