BrowserShooter
Combined with Selenium RC this gem allows to program Selenium scripts combined with screenshots.
Use it
Setup the servers
Starting the Selenium RC server
- Set up your VirtualMachines with your target SO and browsers installed. Java SE is also needed.
- Download the last version of Selenium Server (AKA Selenium Remote Control).
Go to the console and start the Selenium Server:
java -jar <your selenium server file>.jar
Pluging for IE screenshots
Chrome WebDriver
In the servers that are gonna execute Chrome you have to install the ChromeDriver.
Repeat these steps in every VM.
Setup the client
Install the gem
gem install "browser_shooter"
Config your BrowserShooter script
Create a YAML file like this:
# myconfig.yml
output_path: "~/browser_shooter"
timeout: 40
extensions:
- ~/browser_shooter/my_extension_1.rb
- ~/browser_shooter/my_extension_2.rb
tests:
google: |
navigate.to "http://www.google.de"
shot "before"
type "input[name='q']", "beautiful houses"
click "input[name='btnG']"
pause 3
click "a.kls"
pause 3
shot "after"
shot_system "final_shot"
miniclip: |
navigate.to "http://www.miniclip.com/games/de/"
shot
browsers:
windows-firefox:
url: "http://127.0.0.1:4444/wd/hub"
type: "firefox"
vm: "VirtualBox name"
windows-iexplore:
url: "http://127.0.0.1:4444/wd/hub"
type: "ie"
vm: "VirtualBox name"
suites:
suite1:
tests:
- google
- miniclip
browsers:
- ios-firefox
- ios-chrome
suite2:
tests:
- google
browsers:
- ios-chrome
Look in the examples folder for more complete examples.
Root section
- output_path: Root folder for the logs and screenshots. Optional, showing the default value.
- timeout: WebDriver global timeout for all commands. Optional. showing the default value.
- extensions: List of files with Custom Extended Commands implementations. Optional, empty is default. Please check the section Custom Extended Commands for more information.
Tests section
WebDriver commands
You can use any command from the WebDriver API.
Any command you can call from a driver
instance like:
driver.navigate.to "http://google.com"
You can use in the test section just removing the driver
word:
navigate.to "http://google.com"
Extended Commands
Also you can use this list of extended commands:
- shot receives an optional param with the 'sufix' of the page screenshot png
- shot_system equal to 'shot' but uses the "VirtualBox" system command "VBoxManage" to make an screenshot of the OS screen.
- pause uses a Ruby 'sleep' command to pause
- click receives a 'css_selector' as a param, find the element and click on it
- type receives two params: 'css_selector' ana a 'message', find the element and type the message on it
- wait_for_element receives two params: 'css_selector', and a 'timeout' in seconds
- try receives an string wich is Ruby code, you have access here to variables like
driver
,browser
andoutput_path
. - debug receives no argument. When the test arrives to this command a Ruby console will be open and you will be able to write Ruby commands on the air. Until you write
exit
.
You can define as much tests as you want. Every test is composed by a list of one line commands.
Custom Extended Commands
If you need to add new commands to the test section you can implement your own ones.
Write a file like this:
# my_extension.rb
module MyExtension
def log( arg1, arg2 )
puts "This is the log extension method"
puts "arg1: #{arg1}"
puts "arg2: #{arg2}"
puts "driver: #{driver}"
puts "browser: #{browser}"
puts "output_path: #{output_path}"
end
end
BrowserShooter::Commands::Base.plug( MyExtension )
Declare this extension file in the extensions section:
# config.yml
extensions:
- path/to/my_extension.rb
Then you will be able to use this new command into the test section like this:
log "myarg1", "myarg2"
You can check the custom extensions that are already integrated in BrowserShooter.
External test files
Instead of defining all the tests in this file you can create a folder and create a File for each Tests.
These files have to have the .test extension.
Then you use the tests key on the config.yml file to indicate the path to the external test files folder.
For example, if you have this file tree:
/config.yml
/external_tests/test1.test
/external_tests/test2.test
Then you have to use this configuration:
tests: "./external_tests"
The path is relative to the config.yml file path.
The name of the Test will be the name of the File. Use it in your suite definition.
Check the config with external test example.
Browsers section
All the available browsers with the selenium server url and the selenium browser type.
Also if you are gonna use the shot_system command you have to indicate the name of the VirtualBox machine in the vm attribute.
Suites section
Groups of tests and browsers to be executed as one.
Run the BrowserShooter script
The simple way
$ browser_shooter --config ./my/config.yml
Choosing a suite
$ browser_shooter --config ./my/config.yml --suite suite1
Choosing a test
$ browser_shooter --config ./my/config.yml --test google
Choosing a test an a list of browsers
$ browser_shooter --config ./my/config.yml --test google --browsers windows-firefox,windows-iexplore
Verbose
$ browser_shooter --config ./my/config.yml --verbose
Check all the options
$ browser_shooter --help
The output paths
The screenshots will be stored in:
/<output_path>/<time_stamp>/<suite_name>/<test_name>/<browser_name>/shots
The logs will be stored in:
/<output_path>/<time_stamp>/<suite_name>/<test_name>/<browser_name>/logs
Status
Still in a development state.. but is already functional.
TODO
Support Parallels screenshots with $ prlctl capture
.