browser_shooter 0.2.3 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.md +78 -28
- data/Rakefile +1 -1
- data/bin/browser_shooter +4 -8
- data/browser_shoter.gemspec +1 -2
- data/examples/config0.yml +35 -0
- data/examples/config1.yml +24 -21
- data/examples/config2.yml +48 -28
- data/lib/browser_shooter.rb +10 -34
- data/lib/browser_shooter/argv_parser.rb +54 -0
- data/lib/browser_shooter/base.rb +65 -0
- data/lib/browser_shooter/commander.rb +109 -107
- data/lib/browser_shooter/configurator.rb +77 -6
- data/lib/browser_shooter/log_exporter.rb +11 -17
- data/lib/browser_shooter/logger.rb +20 -3
- data/lib/browser_shooter/models/browser.rb +6 -0
- data/lib/browser_shooter/models/suite.rb +6 -0
- data/lib/browser_shooter/models/test.rb +6 -0
- data/lib/browser_shooter/version.rb +2 -2
- data/test/argv_parser_test.rb +15 -0
- data/test/base_test.rb +51 -0
- data/test/commander_test.rb +45 -68
- data/test/configurator_test.rb +69 -3
- data/test/fixtures/config.yml +30 -21
- data/test/fixtures/config_simple.yml +3 -0
- data/test/fixtures/logs/{script1.csv → log.csv} +1 -1
- data/test/log_exporter_test.rb +23 -41
- data/test/logger_test.rb +51 -0
- data/test/models/browser_test.rb +10 -0
- data/test/models/suite_test.rb +10 -0
- data/test/models/test_test.rb +9 -0
- metadata +33 -35
- data/lib/browser_shooter/driver.rb +0 -33
- data/test/browser_shooter_test.rb +0 -23
- data/test/driver_test.rb +0 -34
- data/test/fixtures/logs/logs.json +0 -24
- data/test/fixtures/logs/script2.csv +0 -2
data/README.md
CHANGED
@@ -38,53 +38,103 @@ Create a YAML file like this:
|
|
38
38
|
|
39
39
|
# myconfig.yml
|
40
40
|
output_path: "/tmp/shoots"
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
click "input[name='btnG']"
|
57
|
-
pause 3
|
58
|
-
click "a.kls"
|
59
|
-
pause 3
|
60
|
-
shot after
|
41
|
+
|
42
|
+
tests:
|
43
|
+
google: |
|
44
|
+
navigate.to "http://www.google.de"
|
45
|
+
shot before
|
46
|
+
type "input[name='q']", "beautiful houses"
|
47
|
+
click "input[name='btnG']"
|
48
|
+
pause 3
|
49
|
+
click "a.kls"
|
50
|
+
pause 3
|
51
|
+
shot after
|
52
|
+
|
53
|
+
miniclip: |
|
54
|
+
navigate.to "http://www.miniclip.com/games/de/"
|
55
|
+
shot
|
61
56
|
|
62
57
|
browsers:
|
63
58
|
windows-firefox:
|
64
|
-
name: "windows-firefox"
|
65
59
|
url: "http://127.0.0.1:4444/wd/hub"
|
66
|
-
|
60
|
+
type: "firefox"
|
67
61
|
|
68
62
|
windows-iexplore:
|
69
|
-
name: "windows-iexploreproxy"
|
70
63
|
url: "http://127.0.0.1:4444/wd/hub"
|
71
|
-
|
64
|
+
type: "ie"
|
65
|
+
|
66
|
+
suites:
|
67
|
+
suite1:
|
68
|
+
tests:
|
69
|
+
- google
|
70
|
+
- miniclip
|
71
|
+
browsers:
|
72
|
+
- ios-firefox
|
73
|
+
- ios-chrome
|
74
|
+
|
75
|
+
suite2:
|
76
|
+
tests:
|
77
|
+
- google
|
78
|
+
browsers:
|
79
|
+
- ios-chrome
|
80
|
+
|
72
81
|
|
73
82
|
Look in the [examples folder](https://github.com/fguillen/BrowserShooter/tree/master/examples) for more complete examples.
|
74
83
|
|
84
|
+
##### Tests section
|
85
|
+
|
86
|
+
Commands are WebDriver commands, except:
|
87
|
+
|
88
|
+
* **shot** command which receive an optional param with the 'sufix' of the page screenshot png
|
89
|
+
* **pause** command which use a Ruby 'sleep' command to pause
|
90
|
+
* **click** command which receive a 'css_selector' as a param, find the element and click on it
|
91
|
+
* **type** command which receive two params: 'css_selector' ana a 'message', find the element and type the message on it
|
92
|
+
* **wait_for_element** command which receive two params: 'css_selector', and a 'timeout' in seconds
|
93
|
+
|
94
|
+
You can define as much tests as you want. Every test is composed by a list of **one line** commands.
|
95
|
+
|
96
|
+
##### Browsers section
|
97
|
+
|
98
|
+
All the available browsers with the **selenium server url** and the **selenium browser type**.
|
99
|
+
|
100
|
+
##### Suites section
|
101
|
+
|
102
|
+
Groups of **tests** and **browsers** to be executed as one.
|
103
|
+
|
75
104
|
|
76
105
|
#### Run the BrowserShooter script
|
77
106
|
|
78
|
-
|
107
|
+
##### The simple way
|
108
|
+
|
109
|
+
$ browser_shooter --config ./my/config.yml
|
110
|
+
|
111
|
+
##### Choosing a suite
|
112
|
+
|
113
|
+
$ browser_shooter --config ./my/config.yml -s --suite suite1
|
114
|
+
|
115
|
+
##### Choosing a test
|
116
|
+
|
117
|
+
$ browser_shooter --config ./my/config.yml -s --test google
|
118
|
+
|
119
|
+
##### Choosing a test an a list of browsers
|
120
|
+
|
121
|
+
$ browser_shooter --config ./my/config.yml -s --test google --browsers windows-firefox,windows-iexplore
|
122
|
+
|
123
|
+
##### Check all the options
|
124
|
+
|
125
|
+
$ browser_shooter --help
|
126
|
+
|
127
|
+
|
128
|
+
#### The output paths
|
79
129
|
|
80
130
|
The screenshots will be stored in:
|
81
131
|
|
82
|
-
/<output_path>/<time_stamp>/shots
|
132
|
+
/<output_path>/<time_stamp>/<suite_name>/<test_name>/<browser_name>/shots
|
83
133
|
|
84
134
|
The logs will be stored in:
|
85
135
|
|
86
|
-
/<output_path>/<time_stamp>/logs
|
136
|
+
/<output_path>/<time_stamp>/<suite_name>/<test_name>/<browser_name>/logs
|
87
137
|
|
88
138
|
## Status
|
89
139
|
|
90
|
-
Still in a
|
140
|
+
Still in a _development_ state.. but is already **functional**.
|
data/Rakefile
CHANGED
data/bin/browser_shooter
CHANGED
@@ -1,18 +1,14 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
# Use:
|
4
|
-
# browser_shooter /path/to/config.yml
|
5
|
-
|
6
3
|
begin
|
7
4
|
require 'browser_shooter'
|
5
|
+
# require_relative "../lib/browser_shooter"
|
8
6
|
rescue LoadError
|
9
7
|
require 'rubygems'
|
10
8
|
require 'browser_shooter'
|
11
9
|
end
|
12
10
|
|
13
|
-
|
14
|
-
|
15
|
-
exit 1
|
16
|
-
end
|
11
|
+
argv_parser = BrowserShooter::ARGVParsers.new
|
12
|
+
argv_parser.parse_options( ARGV )
|
17
13
|
|
18
|
-
BrowserShooter.new(
|
14
|
+
BrowserShooter::Base.new( argv_parser.config ).run
|
data/browser_shoter.gemspec
CHANGED
@@ -18,8 +18,7 @@ Gem::Specification.new do |s|
|
|
18
18
|
s.add_development_dependency "mocha"
|
19
19
|
|
20
20
|
s.add_dependency "selenium-webdriver"
|
21
|
-
s.add_dependency "
|
22
|
-
s.add_dependency "selenium-client"
|
21
|
+
s.add_dependency "mixlib-cli"
|
23
22
|
|
24
23
|
s.files = `git ls-files`.split("\n")
|
25
24
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
@@ -0,0 +1,35 @@
|
|
1
|
+
output_path: "~/browser_shoots"
|
2
|
+
|
3
|
+
tests:
|
4
|
+
google: |
|
5
|
+
navigate.to "http://www.google.com"
|
6
|
+
shot
|
7
|
+
|
8
|
+
miniclip: |
|
9
|
+
navigate.to "http://www.miniclip.com/games/de/"
|
10
|
+
shot
|
11
|
+
|
12
|
+
browsers:
|
13
|
+
ios-firefox:
|
14
|
+
url: "http://127.0.0.1:4444/wd/hub"
|
15
|
+
type: "firefox"
|
16
|
+
|
17
|
+
ios-chrome:
|
18
|
+
url: "http://127.0.0.1:4444/wd/hub"
|
19
|
+
type: "chrome"
|
20
|
+
|
21
|
+
suites:
|
22
|
+
suite1:
|
23
|
+
tests:
|
24
|
+
- google
|
25
|
+
- miniclip
|
26
|
+
browsers:
|
27
|
+
- ios-firefox
|
28
|
+
- ios-chrome
|
29
|
+
|
30
|
+
suite2:
|
31
|
+
tests:
|
32
|
+
- google
|
33
|
+
browsers:
|
34
|
+
- ios-chrome
|
35
|
+
|
data/examples/config1.yml
CHANGED
@@ -1,31 +1,34 @@
|
|
1
1
|
output_path: "~/browser_shoots"
|
2
2
|
|
3
|
-
|
4
|
-
google:
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
pause 3
|
14
|
-
shot after
|
3
|
+
tests:
|
4
|
+
google: |
|
5
|
+
navigate.to "http://www.google.de"
|
6
|
+
shot before
|
7
|
+
type "input[name='q']", "beautiful houses"
|
8
|
+
click "input[name='btnG']"
|
9
|
+
pause 3
|
10
|
+
click "a.kls"
|
11
|
+
pause 3
|
12
|
+
shot after
|
15
13
|
|
16
|
-
miniclip:
|
17
|
-
|
18
|
-
|
19
|
-
navigate.to "http://www.miniclip.com/games/de/"
|
20
|
-
shot
|
14
|
+
miniclip: |
|
15
|
+
navigate.to "http://www.miniclip.com/games/de/"
|
16
|
+
shot
|
21
17
|
|
22
18
|
browsers:
|
23
19
|
ios-firefox:
|
24
|
-
name: "ios-firefox"
|
25
20
|
url: "http://127.0.0.1:4444/wd/hub"
|
26
|
-
|
21
|
+
type: "firefox"
|
27
22
|
|
28
23
|
ios-chrome:
|
29
|
-
name: "ios-chrome"
|
30
24
|
url: "http://127.0.0.1:4444/wd/hub"
|
31
|
-
|
25
|
+
type: "chrome"
|
26
|
+
|
27
|
+
suites:
|
28
|
+
suite1:
|
29
|
+
tests:
|
30
|
+
- google
|
31
|
+
- miniclip
|
32
|
+
browsers:
|
33
|
+
- ios-firefox
|
34
|
+
- ios-chrome
|
data/examples/config2.yml
CHANGED
@@ -1,34 +1,54 @@
|
|
1
1
|
output_path: "~/browser_shooter"
|
2
2
|
|
3
|
-
|
4
|
-
lightbox:
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
pause 4
|
28
|
-
shot 06_hidden
|
3
|
+
tests:
|
4
|
+
lightbox: |
|
5
|
+
navigate.to "http://192.168.70.70/test/browser_shooter/lightbox_bareplayer.html"
|
6
|
+
shot 01_first
|
7
|
+
pause 5
|
8
|
+
switch_to.alert.accept
|
9
|
+
click "a"
|
10
|
+
pause 5
|
11
|
+
shot 02_video
|
12
|
+
switch_to.frame "_sp_wiframe"
|
13
|
+
execute_script "$f().play()"
|
14
|
+
pause 3
|
15
|
+
shot 03_video_start
|
16
|
+
wait_for_element "span.enabled", 40
|
17
|
+
shot 04_green_button
|
18
|
+
click "span.enabled"
|
19
|
+
pause 8
|
20
|
+
switch_to.alert.accept
|
21
|
+
shot 05_spinner
|
22
|
+
switch_to.default_content
|
23
|
+
click "#sp_close_x"
|
24
|
+
switch_to.alert.accept
|
25
|
+
pause 4
|
26
|
+
shot 06_hidden
|
29
27
|
|
30
28
|
browsers:
|
31
29
|
osx-chrome:
|
32
|
-
name: "osx-chrome"
|
33
30
|
url: "http://127.0.0.1:4444/wd/hub"
|
34
|
-
|
31
|
+
type: "chrome"
|
32
|
+
|
33
|
+
windows-chrome:
|
34
|
+
url: "http://10.211.55.4:4444/wd/hub"
|
35
|
+
type: "chrome"
|
36
|
+
|
37
|
+
windows-firefox:
|
38
|
+
url: "http://10.211.55.4:4444/wd/hub"
|
39
|
+
type: "firefox"
|
40
|
+
|
41
|
+
windows-ie:
|
42
|
+
url: "http://10.211.55.4:4444/wd/hub"
|
43
|
+
type: "ie"
|
44
|
+
|
45
|
+
suites:
|
46
|
+
suite1:
|
47
|
+
tests:
|
48
|
+
- lightbox
|
49
|
+
browsers:
|
50
|
+
- osx-crhome
|
51
|
+
- windows-chrome
|
52
|
+
- windows-firefox
|
53
|
+
- windows-ie
|
54
|
+
|
data/lib/browser_shooter.rb
CHANGED
@@ -1,41 +1,17 @@
|
|
1
|
+
require "selenium-webdriver"
|
2
|
+
require "mixlib/cli"
|
3
|
+
require "yaml"
|
4
|
+
require "json"
|
5
|
+
|
6
|
+
require_relative "./browser_shooter/base"
|
7
|
+
require_relative "./browser_shooter/models/suite"
|
8
|
+
require_relative "./browser_shooter/models/test"
|
9
|
+
require_relative "./browser_shooter/models/browser"
|
1
10
|
require_relative "./browser_shooter/version"
|
2
11
|
require_relative "./browser_shooter/configurator"
|
3
12
|
require_relative "./browser_shooter/logger"
|
4
|
-
require_relative "./browser_shooter/driver"
|
5
13
|
require_relative "./browser_shooter/commander"
|
6
14
|
require_relative "./browser_shooter/log_exporter"
|
15
|
+
require_relative "./browser_shooter/argv_parser"
|
7
16
|
|
8
|
-
require "selenium-webdriver"
|
9
|
-
require "selenium-client"
|
10
|
-
require "yaml"
|
11
|
-
require "json"
|
12
|
-
|
13
|
-
class BrowserShooter
|
14
|
-
attr_reader :config_file_path
|
15
|
-
|
16
|
-
def initialize( config_file_path )
|
17
|
-
@config_file_path = config_file_path
|
18
|
-
end
|
19
|
-
|
20
|
-
def run
|
21
|
-
BrowserShooter::Logger.log "Starting script running with version #{BrowserShooter::VERSION}..."
|
22
|
-
|
23
|
-
config = BrowserShooter::Configurator.load_config( config_file_path )
|
24
|
-
logs = {}
|
25
|
-
|
26
|
-
config["scripts"].each_value do |script|
|
27
|
-
config["browsers"].each_value do |browser|
|
28
|
-
logs["#{script["name"]}_#{browser["name"]}"] =
|
29
|
-
BrowserShooter::Driver.run_script_on_browser(script, browser, "#{config["output_path"]}/shots")
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
BrowserShooter::LogExporter.export( logs, "#{config["output_path"]}/logs", config["logs_format"] )
|
34
|
-
|
35
|
-
BrowserShooter::Logger.log "... script running ended."
|
36
|
-
BrowserShooter::Logger.log "shots are in: #{config["output_path"]}/shots"
|
37
|
-
BrowserShooter::Logger.log "logs are in: #{config["output_path"]}/logs"
|
38
|
-
BrowserShooter::Logger.log "BYE!"
|
39
|
-
end
|
40
|
-
end
|
41
17
|
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module BrowserShooter
|
2
|
+
class ARGVParsers
|
3
|
+
include Mixlib::CLI
|
4
|
+
|
5
|
+
option(
|
6
|
+
:config_file,
|
7
|
+
:short => "-c CONFIG",
|
8
|
+
:long => "--config CONFIG",
|
9
|
+
:required => true,
|
10
|
+
:description => "The configuration file to use"
|
11
|
+
)
|
12
|
+
|
13
|
+
option(
|
14
|
+
:suite,
|
15
|
+
:short => "-s SUITE",
|
16
|
+
:long => "--suite SUITE",
|
17
|
+
:description => "The name of the suite to execute",
|
18
|
+
)
|
19
|
+
|
20
|
+
option(
|
21
|
+
:test,
|
22
|
+
:short => "-t TEST",
|
23
|
+
:long => "--test TEST",
|
24
|
+
:description => "The name of the test to execute",
|
25
|
+
)
|
26
|
+
|
27
|
+
option(
|
28
|
+
:browsers,
|
29
|
+
:short => "-b BROWSERS",
|
30
|
+
:long => "--browsers BROWSERS",
|
31
|
+
:description => "The name of the browsers to execute, separated by comas",
|
32
|
+
:proc => Proc.new { |browsers| browsers.split(",") }
|
33
|
+
)
|
34
|
+
|
35
|
+
option(
|
36
|
+
:verbose,
|
37
|
+
:short => "-v",
|
38
|
+
:long => "--verbose",
|
39
|
+
:description => "More verbose output",
|
40
|
+
:boolean => true
|
41
|
+
)
|
42
|
+
|
43
|
+
option(
|
44
|
+
:help,
|
45
|
+
:short => "-h",
|
46
|
+
:long => "--help",
|
47
|
+
:description => "Show this message",
|
48
|
+
:on => :tail,
|
49
|
+
:boolean => true,
|
50
|
+
:show_options => true,
|
51
|
+
:exit => 0
|
52
|
+
)
|
53
|
+
end
|
54
|
+
end
|