sapphire 0.1.2 → 0.2.0
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/lib/sapphire.rb +3 -0
- data/lib/sapphire/Configuration/SapphireConfig.rb +30 -0
- data/lib/sapphire/DSL/Browser/Error.rb +16 -2
- data/lib/sapphire/DSL/Browser/ExecuteAgainstControl.rb +3 -3
- data/lib/sapphire/DSL/Browser/List.rb +4 -2
- data/lib/sapphire/DSL/Browser/Not.rb +22 -1
- data/lib/sapphire/DSL/Browser/Set.rb +1 -1
- data/lib/sapphire/DSL/Browser/Should.rb +24 -1
- data/lib/sapphire/DSL/Browser/Show.rb +15 -18
- data/lib/sapphire/DSL/Browser/Transition.rb +17 -1
- data/lib/sapphire/DSL/Data/Exist.rb +17 -1
- data/lib/sapphire/DSL/Data/Validate.rb +16 -6
- data/lib/sapphire/Strategies/ClassStrategy.rb +2 -2
- data/lib/sapphire/Strategies/DefaultStrategy.rb +5 -1
- data/lib/sapphire/Strategies/Evaluation.rb +16 -0
- data/lib/sapphire/Strategies/HashStrategy.rb +13 -4
- data/lib/sapphire/Strategies/NullModifier.rb +8 -3
- data/lib/sapphire/Strategies/SymbolStrategy.rb +7 -3
- data/lib/sapphire/WebAbstractions/Controls/Base/Control.rb +2 -2
- data/lib/sapphire/WebAbstractions/Controls/Base/WebBrowser.rb +4 -3
- data/lib/sapphire/WebAbstractions/Controls/InternetExplorer.rb +1 -1
- data/lib/sapphire/version.rb +1 -1
- metadata +10 -8
data/lib/sapphire.rb
CHANGED
@@ -8,11 +8,13 @@ require 'Forwardable'
|
|
8
8
|
require 'win32ole'
|
9
9
|
require 'json'
|
10
10
|
|
11
|
+
require File.expand_path(File.dirname(__FILE__) +'/sapphire/Strategies/Strategy.rb', __FILE__)
|
11
12
|
Dir[File.dirname(__FILE__) + '/sapphire/Testing/*.rb'].each {|file| require file }
|
12
13
|
Dir[File.dirname(__FILE__) + '/sapphire/Configuration/*.rb'].each {|file| require file }
|
13
14
|
Dir[File.dirname(__FILE__) + '/sapphire/WebAbstractions/Controls/Base/*.rb'].each {|file| require file }
|
14
15
|
Dir[File.dirname(__FILE__) + '/sapphire/WebAbstractions/Controls/*.rb'].each {|file| require file }
|
15
16
|
Dir[File.dirname(__FILE__) + '/sapphire/DataAbstractions/*.rb'].each {|file| require file }
|
17
|
+
Dir[File.dirname(__FILE__) + '/sapphire/Strategies/*.rb'].each {|file| require file }
|
16
18
|
Dir[File.dirname(__FILE__) + '/sapphire/DSL/Browser/*.rb'].each {|file| require file }
|
17
19
|
Dir[File.dirname(__FILE__) + '/sapphire/DSL/Configuration/*.rb'].each {|file| require file }
|
18
20
|
Dir[File.dirname(__FILE__) + '/sapphire/DSL/Data/*.rb'].each {|file| require file }
|
@@ -21,6 +23,7 @@ Dir[File.dirname(__FILE__) + '/sapphire/DSL/TestPlans/*.rb'].each {|file| requir
|
|
21
23
|
|
22
24
|
module Sapphire
|
23
25
|
module Sapphire
|
26
|
+
include DSL::Strategies
|
24
27
|
include DSL::Scenarios
|
25
28
|
include DSL::Browser
|
26
29
|
include DSL::Configuration
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Sapphire
|
2
|
+
module Configuration
|
3
|
+
class SapphireConfig
|
4
|
+
|
5
|
+
def initialize
|
6
|
+
@@config = {}
|
7
|
+
|
8
|
+
Add Symbol => SymbolStrategy
|
9
|
+
Add Class => ClassStrategy
|
10
|
+
Add Hash => HashStrategy
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.Current
|
14
|
+
@@instance ||= SapphireConfig.new
|
15
|
+
end
|
16
|
+
|
17
|
+
def Add(hash)
|
18
|
+
@@config = @@config.merge(hash)
|
19
|
+
end
|
20
|
+
|
21
|
+
def GetBy(symbol)
|
22
|
+
if(@@config.has_key? symbol)
|
23
|
+
return @@config[symbol]
|
24
|
+
end
|
25
|
+
|
26
|
+
return DefaultStrategy
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -2,8 +2,22 @@ module Sapphire
|
|
2
2
|
module DSL
|
3
3
|
module Browser
|
4
4
|
def Error(hash)
|
5
|
-
|
6
|
-
|
5
|
+
NullModifier.new(Error.new(hash, @page, @browser))
|
6
|
+
end
|
7
|
+
|
8
|
+
class Error
|
9
|
+
def initialize(item, page, browser)
|
10
|
+
@item = item
|
11
|
+
@page = page
|
12
|
+
@browser = browser
|
13
|
+
end
|
14
|
+
|
15
|
+
def ModifyWith(item)
|
16
|
+
@modifier = item
|
17
|
+
end
|
18
|
+
|
19
|
+
def execute
|
20
|
+
return { :value => SapphireConfig.Current.GetBy(@item.class).new(@page, @browser).Error(@item), :modifier => @modifier }
|
7
21
|
end
|
8
22
|
end
|
9
23
|
end
|
@@ -1,12 +1,12 @@
|
|
1
1
|
module Sapphire
|
2
2
|
module DSL
|
3
3
|
module Browser
|
4
|
-
def ExecuteHashAgainstControl(hash, &block)
|
4
|
+
def ExecuteHashAgainstControl(hash, page, &block)
|
5
5
|
hash.keys.each do |key|
|
6
|
-
|
6
|
+
page.fields.each do |field|
|
7
7
|
field.keys.each do |field_key|
|
8
8
|
if(field_key == key)
|
9
|
-
block.call(field[
|
9
|
+
block.call(field[field_key], hash[key])
|
10
10
|
return
|
11
11
|
end
|
12
12
|
end
|
@@ -5,9 +5,11 @@ module Sapphire
|
|
5
5
|
def Equals(value)
|
6
6
|
x = self.FindAll
|
7
7
|
x.each do |item|
|
8
|
-
|
8
|
+
if item.text == value
|
9
|
+
return Evaluation.new(item.text, value)
|
10
|
+
end
|
9
11
|
end
|
10
|
-
return
|
12
|
+
return Evaluation.new("Value not found in list", value)
|
11
13
|
end
|
12
14
|
end
|
13
15
|
end
|
@@ -2,7 +2,28 @@ module Sapphire
|
|
2
2
|
module DSL
|
3
3
|
module Browser
|
4
4
|
def Not(item)
|
5
|
-
|
5
|
+
Not.new(item)
|
6
|
+
end
|
7
|
+
|
8
|
+
class Not
|
9
|
+
|
10
|
+
def initialize(item)
|
11
|
+
@item = item
|
12
|
+
@item.ModifyWith self
|
13
|
+
end
|
14
|
+
|
15
|
+
def Modify(item)
|
16
|
+
return @modifier.Modify(!item) if @modifier != nil
|
17
|
+
!item
|
18
|
+
end
|
19
|
+
|
20
|
+
def Evaluate(evaluation)
|
21
|
+
evaluation.left.should_not == evaluation.right
|
22
|
+
end
|
23
|
+
|
24
|
+
def execute
|
25
|
+
@item.execute
|
26
|
+
end
|
6
27
|
end
|
7
28
|
end
|
8
29
|
end
|
@@ -2,7 +2,30 @@ module Sapphire
|
|
2
2
|
module DSL
|
3
3
|
module Browser
|
4
4
|
def Should(item)
|
5
|
-
item.
|
5
|
+
results = item.execute()
|
6
|
+
|
7
|
+
if results.is_a? Hash
|
8
|
+
@page = results[:page] if results[:page] != nil
|
9
|
+
value = results[:value]
|
10
|
+
modifier = results[:modifier]
|
11
|
+
|
12
|
+
if value.is_a? Hash
|
13
|
+
@page = value[:page] if value[:page] != nil
|
14
|
+
sub_value = value[:value]
|
15
|
+
modifier.Evaluate(sub_value)
|
16
|
+
return
|
17
|
+
end
|
18
|
+
modifier.Evaluate(value)
|
19
|
+
|
20
|
+
return
|
21
|
+
end
|
22
|
+
|
23
|
+
if(results.is_a? Evaluation)
|
24
|
+
results.left.should == results.right
|
25
|
+
return
|
26
|
+
end
|
27
|
+
|
28
|
+
raise "Cannot act upon result " + results.to_s + " for page " + @page.to_s
|
6
29
|
end
|
7
30
|
end
|
8
31
|
end
|
@@ -2,25 +2,22 @@ module Sapphire
|
|
2
2
|
module DSL
|
3
3
|
module Browser
|
4
4
|
def Show(item)
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
5
|
+
NullModifier.new(Show.new(item, @page, @browser))
|
6
|
+
end
|
7
|
+
|
8
|
+
class Show
|
9
|
+
def initialize(item, page, browser)
|
10
|
+
@item = item
|
11
|
+
@page = page
|
12
|
+
@browser = browser
|
13
|
+
end
|
14
|
+
|
15
|
+
def ModifyWith(item)
|
16
|
+
@modifier = item
|
17
|
+
end
|
11
18
|
|
12
|
-
|
13
|
-
|
14
|
-
elsif(item.is_a? Symbol)
|
15
|
-
return IsVisible(item) == true
|
16
|
-
elsif(item.is_a? Class)
|
17
|
-
temp, @page = @browser.ShouldNavigateTo item
|
18
|
-
@page.Init
|
19
|
-
return temp
|
20
|
-
else
|
21
|
-
@page = item
|
22
|
-
@page.Init
|
23
|
-
return true
|
19
|
+
def execute
|
20
|
+
return { :value => SapphireConfig.Current.GetBy(@item.class).new(@page, @browser).Show(@item, @modifier), :modifier => @modifier }
|
24
21
|
end
|
25
22
|
end
|
26
23
|
end
|
@@ -1,8 +1,24 @@
|
|
1
1
|
module Sapphire
|
2
2
|
module DSL
|
3
3
|
module Browser
|
4
|
+
|
4
5
|
def Transition(url)
|
5
|
-
@browser
|
6
|
+
NullModifier.new(Transition.new(url, @browser))
|
7
|
+
end
|
8
|
+
|
9
|
+
class Transition
|
10
|
+
def initialize(item, browser)
|
11
|
+
@item = item
|
12
|
+
@browser = browser
|
13
|
+
end
|
14
|
+
|
15
|
+
def ModifyWith(item)
|
16
|
+
@modifier = item
|
17
|
+
end
|
18
|
+
|
19
|
+
def execute
|
20
|
+
@modifier.Modify(@browser.ShouldTransitionTo(@item))
|
21
|
+
end
|
6
22
|
end
|
7
23
|
end
|
8
24
|
end
|
@@ -2,7 +2,23 @@ module Sapphire
|
|
2
2
|
module DSL
|
3
3
|
module Data
|
4
4
|
def Exist(value)
|
5
|
-
value
|
5
|
+
Not(Exist.new(value, @page, @browser))
|
6
|
+
end
|
7
|
+
|
8
|
+
class Exist
|
9
|
+
def initialize(item, page, browser)
|
10
|
+
@item = item
|
11
|
+
@page = page
|
12
|
+
@browser = browser
|
13
|
+
end
|
14
|
+
|
15
|
+
def ModifyWith(item)
|
16
|
+
@modifier = item
|
17
|
+
end
|
18
|
+
|
19
|
+
def execute
|
20
|
+
return { :value => SapphireConfig.Current.GetBy(@item.class).new(@page, @browser).Exists(@item), :modifier => @modifier }
|
21
|
+
end
|
6
22
|
end
|
7
23
|
end
|
8
24
|
end
|
@@ -2,12 +2,22 @@ module Sapphire
|
|
2
2
|
module DSL
|
3
3
|
module Data
|
4
4
|
def Validate(hash)
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
5
|
+
NullModifier.new(Validate.new(hash, @page, @browser))
|
6
|
+
end
|
7
|
+
|
8
|
+
class Validate
|
9
|
+
def initialize(item, page, browser)
|
10
|
+
@item = item
|
11
|
+
@page = page
|
12
|
+
@browser = browser
|
13
|
+
end
|
14
|
+
|
15
|
+
def ModifyWith(item)
|
16
|
+
@modifier = item
|
17
|
+
end
|
18
|
+
|
19
|
+
def execute
|
20
|
+
return { :value => SapphireConfig.Current.GetBy(@item.class).new(@page, @browser).Validate(@item), :modifier => @modifier }
|
11
21
|
end
|
12
22
|
end
|
13
23
|
end
|
@@ -3,9 +3,9 @@ module Sapphire
|
|
3
3
|
module Strategies
|
4
4
|
class ClassStrategy < Strategy
|
5
5
|
def Show(item, modifier)
|
6
|
-
|
6
|
+
evaluation, @page = @browser.ShouldNavigateTo item
|
7
7
|
@page.Init
|
8
|
-
{:page => @page, :value =>
|
8
|
+
{:page => @page, :value => evaluation }
|
9
9
|
end
|
10
10
|
end
|
11
11
|
end
|
@@ -5,7 +5,11 @@ module Sapphire
|
|
5
5
|
def Show(item, modifier)
|
6
6
|
@page = item
|
7
7
|
@page.Init
|
8
|
-
{:page => @page, :value =>
|
8
|
+
{:page => @page, :value => Evaluation.new(true, true)}
|
9
|
+
end
|
10
|
+
|
11
|
+
def Exists(item)
|
12
|
+
Evaluation.new(item, nil)
|
9
13
|
end
|
10
14
|
end
|
11
15
|
end
|
@@ -3,14 +3,23 @@ module Sapphire
|
|
3
3
|
module Strategies
|
4
4
|
class HashStrategy < Strategy
|
5
5
|
def Show(item, modifier)
|
6
|
-
ExecuteHashAgainstControl(item) do |control, arg|
|
6
|
+
ExecuteHashAgainstControl(item, @page) do |control, arg|
|
7
7
|
wait = Selenium::WebDriver::Wait.new(:timeout => 10)
|
8
8
|
text = wait.until { x = control
|
9
|
-
x
|
9
|
+
x unless (!x.Equals(arg) && x.Equals(""))
|
10
10
|
}
|
11
11
|
|
12
|
-
|
13
|
-
|
12
|
+
return text.Equals(arg)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def Validate(hash)
|
17
|
+
Evaluation.new(hash.keys.first.to_s, hash[hash.keys.first].to_s)
|
18
|
+
end
|
19
|
+
|
20
|
+
def Error(item)
|
21
|
+
ExecuteHashAgainstControl(item, @page) do |control, arg|
|
22
|
+
return control.Equals(arg)
|
14
23
|
end
|
15
24
|
end
|
16
25
|
end
|
@@ -8,9 +8,14 @@ class NullModifier
|
|
8
8
|
@modifier = item
|
9
9
|
end
|
10
10
|
|
11
|
-
def Modify(
|
12
|
-
return @modifier.Modify(
|
13
|
-
|
11
|
+
def Modify(item)
|
12
|
+
return @modifier.Modify(item) if @modifier != nil
|
13
|
+
item if @modifier == nil
|
14
|
+
end
|
15
|
+
|
16
|
+
def Evaluate(evaluation)
|
17
|
+
return @modifier.Evaluate(evaluation) if @modifier != nil
|
18
|
+
evaluation.left.should == evaluation.right if @modifier == nil
|
14
19
|
end
|
15
20
|
|
16
21
|
def execute
|
@@ -14,13 +14,13 @@ module Sapphire
|
|
14
14
|
result = wait.until { y = modifier.Modify(x.displayed?)
|
15
15
|
y unless y == false
|
16
16
|
}
|
17
|
-
return
|
17
|
+
return Evaluation.new(modifier.Modify(x.displayed?), modifier.Modify(true))
|
18
18
|
rescue
|
19
|
-
return
|
19
|
+
return Evaluation.new(true, "An error occurred.")
|
20
20
|
end
|
21
21
|
end
|
22
22
|
rescue
|
23
|
-
return
|
23
|
+
return Evaluation.new(true, "An error occurred.")
|
24
24
|
end
|
25
25
|
end
|
26
26
|
end
|
@@ -28,6 +28,10 @@ module Sapphire
|
|
28
28
|
|
29
29
|
raise "cannot find control matching " + args.to_s + " for page " + @page.to_s
|
30
30
|
end
|
31
|
+
|
32
|
+
def Validate(hash)
|
33
|
+
GetPageField(hash[hash.keys.first]).Equals(hash.keys.first.to_s)
|
34
|
+
end
|
31
35
|
end
|
32
36
|
end
|
33
37
|
end
|
@@ -50,7 +50,7 @@ module Sapphire
|
|
50
50
|
def FindAllBy(symbol)
|
51
51
|
wait = Selenium::WebDriver::Wait.new(:timeout => 10)
|
52
52
|
element = wait.until { x = @browser.find_elements symbol, @hash.fetch(symbol)
|
53
|
-
x
|
53
|
+
x unless x.count == 0
|
54
54
|
}
|
55
55
|
end
|
56
56
|
|
@@ -86,7 +86,7 @@ module Sapphire
|
|
86
86
|
end
|
87
87
|
|
88
88
|
def Equals(value)
|
89
|
-
self.Text
|
89
|
+
Evaluation.new(self.Text, value)
|
90
90
|
end
|
91
91
|
end
|
92
92
|
end
|
@@ -56,11 +56,12 @@ module Sapphire
|
|
56
56
|
nav.AlternateUrls.each do |url|
|
57
57
|
temp = self.CurrentUrl.upcase.start_with?("HTTP://" + url.upcase) || self.CurrentUrl.upcase.start_with?("HTTPS://" + url.upcase)
|
58
58
|
if(temp)
|
59
|
+
temp = Evaluation.new(self.CurrentUrl.upcase.start_with?("HTTP://" + url.upcase) || self.CurrentUrl.upcase.start_with?("HTTPS://" + url.upcase), true)
|
59
60
|
return temp, nav
|
60
61
|
end
|
61
62
|
end
|
62
63
|
end
|
63
|
-
|
64
|
+
temp = Evaluation.new(self.CurrentUrl.upcase.start_with?("HTTP://" + nav.Url.upcase) || self.CurrentUrl.upcase.start_with?("HTTPS://" + nav.Url.upcase), true)
|
64
65
|
return temp, nav
|
65
66
|
end
|
66
67
|
|
@@ -75,11 +76,11 @@ module Sapphire
|
|
75
76
|
|
76
77
|
def ShouldTransitionTo(url)
|
77
78
|
if(url.instance_of?(String))
|
78
|
-
temp = self.CurrentUrl.upcase.start_with?("HTTP://" + url.upcase) || self.CurrentUrl.upcase.start_with?("HTTPS://" + url.upcase)
|
79
|
+
temp = Evaluation.new(self.CurrentUrl.upcase.start_with?("HTTP://" + url.upcase) || self.CurrentUrl.upcase.start_with?("HTTPS://" + url.upcase), true)
|
79
80
|
@rootUrl = url
|
80
81
|
else
|
81
82
|
x = url.new().Url
|
82
|
-
temp = self.CurrentUrl.upcase.start_with?("HTTP://" + x.upcase) ||
|
83
|
+
temp = Evaluation.new(self.CurrentUrl.upcase.start_with?("HTTP://" + x.upcase) || self.CurrentUrl.upcase.start_with?("HTTPS://" + x.upcase), true)
|
83
84
|
@rootUrl = x
|
84
85
|
end
|
85
86
|
|
data/lib/sapphire/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sapphire
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-08-
|
12
|
+
date: 2011-08-31 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: albacore
|
16
|
-
requirement: &
|
16
|
+
requirement: &9358284 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *9358284
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: selenium-webdriver
|
27
|
-
requirement: &
|
27
|
+
requirement: &9358020 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *9358020
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: activesupport
|
38
|
-
requirement: &
|
38
|
+
requirement: &9357672 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,7 +43,7 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *9357672
|
47
47
|
description: An automated web acceptance test framework for non-technical resources
|
48
48
|
using selenium-wedriver.
|
49
49
|
email:
|
@@ -54,6 +54,7 @@ extra_rdoc_files: []
|
|
54
54
|
files:
|
55
55
|
- lib/sapphire/Configuration/AttrMethods.rb
|
56
56
|
- lib/sapphire/Configuration/Config.rb
|
57
|
+
- lib/sapphire/Configuration/SapphireConfig.rb
|
57
58
|
- lib/sapphire/DataAbstractions/Database.rb
|
58
59
|
- lib/sapphire/DataAbstractions/NonQuery.rb
|
59
60
|
- lib/sapphire/DataAbstractions/Query.rb
|
@@ -116,6 +117,7 @@ files:
|
|
116
117
|
- lib/sapphire/DSL/TestPlans/TestPlan.rb
|
117
118
|
- lib/sapphire/Strategies/ClassStrategy.rb
|
118
119
|
- lib/sapphire/Strategies/DefaultStrategy.rb
|
120
|
+
- lib/sapphire/Strategies/Evaluation.rb
|
119
121
|
- lib/sapphire/Strategies/HashStrategy.rb
|
120
122
|
- lib/sapphire/Strategies/NullModifier.rb
|
121
123
|
- lib/sapphire/Strategies/Strategy.rb
|