sapphire 0.6.7 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (124) hide show
  1. data/lib/sapphire.rb +3 -2
  2. data/lib/sapphire/Adapters/Selenium/RubySeleniumWebDriver.rb +43 -27
  3. data/lib/sapphire/Configuration/AppConfig.rb +1 -1
  4. data/lib/sapphire/DSL.rb +6 -1
  5. data/lib/sapphire/DSL/Browser/ExecuteAgainstControl.rb +6 -20
  6. data/lib/sapphire/DSL/Browser/Fluff/Be.rb +10 -0
  7. data/lib/sapphire/DSL/Browser/Fluff/By.rb +2 -2
  8. data/lib/sapphire/DSL/Browser/Fluff/Have.rb +10 -0
  9. data/lib/sapphire/DSL/Browser/Fluff/To.rb +2 -2
  10. data/lib/sapphire/DSL/Browser/For.rb +9 -10
  11. data/lib/sapphire/DSL/Browser/Nouns/Browser.rb +2 -2
  12. data/lib/sapphire/DSL/Browser/Nouns/Day.rb +42 -24
  13. data/lib/sapphire/DSL/Browser/Nouns/Enter.rb +1 -1
  14. data/lib/sapphire/DSL/Browser/Nouns/Month.rb +42 -24
  15. data/lib/sapphire/DSL/Browser/Nouns/Popup.rb +2 -2
  16. data/lib/sapphire/DSL/Browser/Nouns/Second.rb +42 -0
  17. data/lib/sapphire/DSL/Browser/Should.rb +1 -46
  18. data/lib/sapphire/DSL/Browser/Verbs/Accept.rb +1 -2
  19. data/lib/sapphire/DSL/Browser/Verbs/Check.rb +0 -1
  20. data/lib/sapphire/DSL/Browser/Verbs/Click.rb +0 -1
  21. data/lib/sapphire/DSL/Browser/Verbs/Compare.rb +5 -5
  22. data/lib/sapphire/DSL/Browser/Verbs/Complete.rb +2 -2
  23. data/lib/sapphire/DSL/Browser/Verbs/Disable.rb +1 -1
  24. data/lib/sapphire/DSL/Browser/Verbs/Exists.rb +6 -11
  25. data/lib/sapphire/DSL/Browser/Verbs/{Close.rb → Exit.rb} +0 -0
  26. data/lib/sapphire/DSL/Browser/Verbs/Has.rb +9 -0
  27. data/lib/sapphire/DSL/Browser/Verbs/MouseOver.rb +0 -1
  28. data/lib/sapphire/DSL/Browser/Verbs/Navigate.rb +1 -2
  29. data/lib/sapphire/DSL/Browser/Verbs/On.rb +19 -0
  30. data/lib/sapphire/DSL/Browser/Verbs/Press.rb +1 -1
  31. data/lib/sapphire/DSL/Browser/Verbs/Reload.rb +1 -1
  32. data/lib/sapphire/DSL/Browser/Verbs/Remove.rb +22 -0
  33. data/lib/sapphire/DSL/Browser/Verbs/Set.rb +1 -1
  34. data/lib/sapphire/DSL/Browser/Verbs/Start.rb +14 -16
  35. data/lib/sapphire/DSL/Browser/Verbs/Uncheck.rb +0 -1
  36. data/lib/sapphire/DSL/Comparisons/CheckedComparison.rb +17 -0
  37. data/lib/sapphire/DSL/Comparisons/Comparison.rb +34 -0
  38. data/lib/sapphire/DSL/Comparisons/ContainsComparison.rb +17 -0
  39. data/lib/sapphire/DSL/Comparisons/DifferComparison.rb +17 -0
  40. data/lib/sapphire/DSL/Comparisons/EqualsComparison.rb +16 -0
  41. data/lib/sapphire/DSL/Comparisons/NotComparison.rb +21 -0
  42. data/lib/sapphire/DSL/Comparisons/SelectedComparison.rb +17 -0
  43. data/lib/sapphire/DSL/Comparisons/StartsWithComparison.rb +17 -0
  44. data/lib/sapphire/DSL/Comparisons/VisibleComparison.rb +17 -0
  45. data/lib/sapphire/DSL/Configuration/Use.rb +3 -0
  46. data/lib/sapphire/DSL/Data/GetPageField.rb +4 -8
  47. data/lib/sapphire/DSL/Evaluations/Evaluation.rb +46 -0
  48. data/lib/sapphire/DSL/Evaluations/FieldNotDefinedEvaluation.rb +21 -0
  49. data/lib/sapphire/DSL/Evaluations/FieldNotFoundEvaluation.rb +21 -0
  50. data/lib/sapphire/DSL/Evaluators/AltText.rb +17 -0
  51. data/lib/sapphire/DSL/Evaluators/Checked.rb +17 -0
  52. data/lib/sapphire/DSL/Evaluators/Contain.rb +10 -0
  53. data/lib/sapphire/DSL/Evaluators/Count.rb +9 -0
  54. data/lib/sapphire/DSL/Evaluators/Differ.rb +10 -0
  55. data/lib/sapphire/DSL/Evaluators/Evaluator.rb +22 -0
  56. data/lib/sapphire/DSL/Evaluators/Exist.rb +9 -0
  57. data/lib/sapphire/DSL/Evaluators/In.rb +10 -0
  58. data/lib/sapphire/DSL/Evaluators/Selected.rb +10 -0
  59. data/lib/sapphire/DSL/Evaluators/Show.rb +10 -0
  60. data/lib/sapphire/DSL/Evaluators/Source.rb +17 -0
  61. data/lib/sapphire/DSL/Evaluators/Transition.rb +10 -0
  62. data/lib/sapphire/DSL/Evaluators/Validate.rb +8 -0
  63. data/lib/sapphire/DSL/Events/Causes.rb +3 -0
  64. data/lib/sapphire/DSL/Events/Event.rb +19 -0
  65. data/lib/sapphire/DSL/Events/Expect.rb +19 -0
  66. data/lib/sapphire/DSL/Scenarios/then.rb +1 -1
  67. data/lib/sapphire/DSL/Scenarios/when.rb +1 -1
  68. data/lib/sapphire/DSL/TestPlans/FileHandler.rb +7 -2
  69. data/lib/sapphire/DSL/TestPlans/PathHandler.rb +2 -1
  70. data/lib/sapphire/DataAbstractions/NonQuery.rb +2 -1
  71. data/lib/sapphire/DataAbstractions/Query.rb +2 -1
  72. data/lib/sapphire/Extensions.rb +1 -0
  73. data/lib/sapphire/{DSL/Browser/Extensions → Extensions}/Class.rb +10 -0
  74. data/lib/sapphire/Extensions/Hash.rb +85 -0
  75. data/lib/sapphire/{DSL/Browser/Extensions → Extensions}/Numeric.rb +6 -6
  76. data/lib/sapphire/Extensions/Object.rb +9 -0
  77. data/lib/sapphire/{DSL/Browser/Extensions → Extensions}/String.rb +4 -0
  78. data/lib/sapphire/Extensions/Symbol.rb +105 -0
  79. data/lib/sapphire/Sessions/Parameter.rb +36 -0
  80. data/lib/sapphire/Sessions/Storage.rb +17 -0
  81. data/lib/sapphire/UI/Functions.rb +2 -1
  82. data/lib/sapphire/UI/ProcessBuilder.rb +174 -0
  83. data/lib/sapphire/Virtualization.rb +1 -1
  84. data/lib/sapphire/WebAbstractions/Browsers/Chrome.rb +22 -21
  85. data/lib/sapphire/WebAbstractions/Browsers/FireFox.rb +24 -22
  86. data/lib/sapphire/WebAbstractions/Browsers/InternetExplorer.rb +22 -21
  87. data/lib/sapphire/WebAbstractions/Controls/AlertBox.rb +21 -0
  88. data/lib/sapphire/WebAbstractions/Controls/Base/Control.rb +32 -14
  89. data/lib/sapphire/WebAbstractions/Controls/Base/Page.rb +74 -65
  90. data/lib/sapphire/WebAbstractions/Controls/CheckBox.rb +29 -28
  91. data/lib/sapphire/WebAbstractions/Controls/DropDown.rb +59 -26
  92. data/lib/sapphire/WebAbstractions/Controls/Image.rb +10 -0
  93. data/lib/sapphire/WebAbstractions/Controls/List.rb +45 -4
  94. data/lib/sapphire/WebAbstractions/Controls/RadioButton.rb +29 -18
  95. data/lib/sapphire/WebAbstractions/Controls/TextBox.rb +9 -8
  96. data/lib/sapphire/WebAbstractions/Controls/Title.rb +1 -1
  97. data/lib/sapphire/version.rb +1 -1
  98. metadata +55 -39
  99. data/lib/sapphire/Configuration/SapphireConfig.rb +0 -33
  100. data/lib/sapphire/DSL/Browser/Extensions/Hash.rb +0 -11
  101. data/lib/sapphire/DSL/Browser/Extensions/Symbol.rb +0 -37
  102. data/lib/sapphire/DSL/Browser/Not.rb +0 -39
  103. data/lib/sapphire/DSL/Browser/Nouns/AlertBox.rb +0 -15
  104. data/lib/sapphire/DSL/Browser/Verbs/Attempt.rb +0 -14
  105. data/lib/sapphire/DSL/Browser/Verbs/Contain.rb +0 -25
  106. data/lib/sapphire/DSL/Browser/Verbs/Count.rb +0 -24
  107. data/lib/sapphire/DSL/Browser/Verbs/Differ.rb +0 -19
  108. data/lib/sapphire/DSL/Browser/Verbs/Error.rb +0 -25
  109. data/lib/sapphire/DSL/Browser/Verbs/Hide.rb +0 -25
  110. data/lib/sapphire/DSL/Browser/Verbs/Show.rb +0 -25
  111. data/lib/sapphire/DSL/Browser/Verbs/Transition.rb +0 -25
  112. data/lib/sapphire/DSL/Data/Exist.rb +0 -26
  113. data/lib/sapphire/DSL/Data/Validate.rb +0 -25
  114. data/lib/sapphire/Strategies.rb +0 -2
  115. data/lib/sapphire/Strategies/ClassStrategy.rb +0 -13
  116. data/lib/sapphire/Strategies/ContainsEvaluation.rb +0 -16
  117. data/lib/sapphire/Strategies/ContainsNullModifier.rb +0 -34
  118. data/lib/sapphire/Strategies/DefaultStrategy.rb +0 -17
  119. data/lib/sapphire/Strategies/Evaluation.rb +0 -16
  120. data/lib/sapphire/Strategies/HashStrategy.rb +0 -72
  121. data/lib/sapphire/Strategies/NullModifier.rb +0 -34
  122. data/lib/sapphire/Strategies/Strategy.rb +0 -11
  123. data/lib/sapphire/Strategies/SymbolStrategy.rb +0 -59
  124. data/lib/sapphire/WebAbstractions/Controls/TableCell.rb +0 -10
@@ -1,4 +1,4 @@
1
- require File.expand_path(File.dirname(__FILE__) +'/UI/Functions.rb', File.dirname(__FILE__)) if Platform::OS == :win32
1
+ require File.expand_path(File.dirname(__FILE__) +'/UI/ProcessBuilder.rb', File.dirname(__FILE__)) if Platform::OS == :win32
2
2
  require File.expand_path(File.dirname(__FILE__) +'/UI/VirtualUI.rb', File.dirname(__FILE__)) if Platform::OS == :win32
3
3
 
4
4
  module Sapphire
@@ -1,21 +1,22 @@
1
- module Sapphire
2
- module WebAbstractions
3
- def Chrome(url)
4
- ChromeBrowser.new
5
- end
6
-
7
- class ChromeBrowser
8
- include RubySeleniumWebDriver
9
-
10
- attr_reader :browser
11
-
12
- def initialize()
13
- @browser = self.Create :chrome
14
- super @browser
15
- $browser = self
16
- end
17
- end
18
- end
19
- end
20
-
21
-
1
+ module Sapphire
2
+ module WebAbstractions
3
+ def Chrome(url)
4
+ @rootUrl = url
5
+ ChromeBrowser.new
6
+ end
7
+
8
+ class ChromeBrowser
9
+ include RubySeleniumWebDriver
10
+
11
+ attr_reader :browser
12
+
13
+ def initialize()
14
+ @browser = self.Create :chrome
15
+ super @browser
16
+ $driver = self
17
+ end
18
+ end
19
+ end
20
+ end
21
+
22
+
@@ -1,22 +1,24 @@
1
- module Sapphire
2
- module WebAbstractions
3
- class FireFoxBrowser
4
- include RubySeleniumWebDriver
5
-
6
- attr_reader :browser
7
-
8
- def initialize()
9
- @browser = self.Create :firefox
10
- super(@browser)
11
- $browser = self
12
- end
13
-
14
- end
15
-
16
- def FireFox(url)
17
- FireFoxBrowser.new
18
- end
19
- end
20
- end
21
-
22
-
1
+ module Sapphire
2
+ module WebAbstractions
3
+ class FireFoxBrowser
4
+ include RubySeleniumWebDriver
5
+
6
+ attr_reader :browser
7
+
8
+ def initialize()
9
+ @browser = self.Create :firefox
10
+ super(@browser)
11
+ $driver = self
12
+ end
13
+
14
+ end
15
+
16
+ def FireFox(url)
17
+ @rootUrl = url
18
+ return FireFoxBrowser.new
19
+ end
20
+
21
+ end
22
+ end
23
+
24
+
@@ -1,21 +1,22 @@
1
- module Sapphire
2
- module WebAbstractions
3
- def InternetExplorer(url)
4
- driver = InternetExplorerBrowser.new
5
- driver
6
- end
7
-
8
- class InternetExplorerBrowser
9
- include RubySeleniumWebDriver
10
-
11
- attr_reader :browser
12
-
13
- def initialize
14
- @browser = self.Create :ie
15
- super(@browser)
16
- $browser = self
17
- end
18
- end
19
- end
20
- end
21
-
1
+ module Sapphire
2
+ module WebAbstractions
3
+ def InternetExplorer(url)
4
+ @rootUrl = url
5
+ driver = InternetExplorerBrowser.new
6
+ driver
7
+ end
8
+
9
+ class InternetExplorerBrowser
10
+ include RubySeleniumWebDriver
11
+
12
+ attr_reader :browser
13
+
14
+ def initialize
15
+ @browser = self.Create :ie
16
+ super(@browser)
17
+ $driver = self
18
+ end
19
+ end
20
+ end
21
+ end
22
+
@@ -0,0 +1,21 @@
1
+ module Sapphire
2
+ module WebAbstractions
3
+ class AlertBox < Control
4
+ def Accept
5
+ $driver.AcceptAlert
6
+ end
7
+
8
+ def Set(text)
9
+ $driver.SetAlert(text)
10
+ end
11
+
12
+ def Visible()
13
+ $driver.AlertShown()
14
+ end
15
+
16
+ def Find(comparator = nil)
17
+ return $driver.FindAlert
18
+ end
19
+ end
20
+ end
21
+ end
@@ -2,19 +2,19 @@ module Sapphire
2
2
  module WebAbstractions
3
3
  class Control
4
4
  def initialize(hash)
5
- @hash = hash
5
+ @hash = hash
6
6
  end
7
7
 
8
- def Find
9
- $browser.FindItem(@hash)
8
+ def Find(comparator = nil)
9
+ $driver.FindItem(@hash, comparator)
10
10
  end
11
11
 
12
12
  def FindAll
13
- $browser.FindAllItems(@hash)
13
+ $driver.FindAllItems(@hash)
14
14
  end
15
15
 
16
16
  def FindWithoutWait
17
- $browser.FindElement @hash[0].keys.first, @hash[0].fetch(@hash[0].keys.first)
17
+ $driver.FindElement @hash[0].keys.first, @hash[0].fetch(@hash[0].keys.first)
18
18
  end
19
19
 
20
20
  def Text
@@ -30,31 +30,49 @@ module Sapphire
30
30
  def MouseOver
31
31
  if @hash.is_a? Hash
32
32
  if(@hash.has_key?(:id))
33
- $browser.ExecuteScript("document.getElementById('"+ @hash.fetch(:id) +"').style.visibility = 'visible'; ")
33
+ $driver.ExecuteScript("document.getElementById('"+ @hash.fetch(:id) +"').style.visibility = 'visible'; ")
34
34
  elsif (@hash.has_key?(:name))
35
- $browser.ExecuteScript("document.getElementByName('"+ @hash.fetch(:name) +"').style.visibility = 'visible'; ")
35
+ $driver.ExecuteScript("document.getElementByName('"+ @hash.fetch(:name) +"').style.visibility = 'visible'; ")
36
36
  elsif (@hash.has_key?(:xpath))
37
- $browser.ExecuteScript("document.evaluate( '" + @hash.fetch(:xpath) + "', document, null, XPathResult.ANY_TYPE, null ).iterateNext().style.visibility = 'visible'; ")
37
+ $driver.ExecuteScript("document.evaluate( '" + @hash.fetch(:xpath) + "', document, null, XPathResult.ANY_TYPE, null ).iterateNext().style.visibility = 'visible'; ")
38
38
  end
39
39
  elsif @hash.is_a? Array
40
40
  if(@hash[0].has_key?(:id))
41
- $browser.ExecuteScript("document.getElementById('"+ @hash[0].fetch(:id) +"').style.visibility = 'visible'; ")
41
+ $driver.ExecuteScript("document.getElementById('"+ @hash[0].fetch(:id) +"').style.visibility = 'visible'; ")
42
42
  elsif (@hash[0].has_key?(:name))
43
- $browser.ExecuteScript("document.getElementByName('"+ @hash[0].fetch(:name) +"').style.visibility = 'visible'; ")
43
+ $driver.ExecuteScript("document.getElementByName('"+ @hash[0].fetch(:name) +"').style.visibility = 'visible'; ")
44
44
  elsif (@hash[0].has_key?(:xpath))
45
- $browser.ExecuteScript("document.evaluate( '" + @hash[0].fetch(:xpath) + "', document, null, XPathResult.ANY_TYPE, null ).iterateNext().style.visibility = 'visible'; ")
45
+ $driver.ExecuteScript("document.evaluate( '" + @hash[0].fetch(:xpath) + "', document, null, XPathResult.ANY_TYPE, null ).iterateNext().style.visibility = 'visible'; ")
46
46
  end
47
47
  end
48
48
 
49
49
  sleep(1)
50
50
  end
51
51
 
52
- def Equals(value)
53
- return Evaluation.new(self.Text, value)
52
+ def Visible
53
+ control = self.Find
54
+ control.displayed?
55
+ end
56
+
57
+ def Equals(value, comparator)
58
+ evaluation = Evaluation.new(self.Text, value)
59
+ EqualsComparison.new(evaluation)
54
60
  end
55
61
 
56
62
  def Contain(value)
57
- return ContainsEvaluation.new(self.Text, value)
63
+ return ContainsComparison.new(Evaluation.new(value, self.Text))
64
+ end
65
+
66
+ def In(values, comparator)
67
+ text = self.Text
68
+ values.each do |value|
69
+ if comparator.Compare(text, value)
70
+ return Evaluation.new(text, value)
71
+ end
72
+ end
73
+
74
+ #error land
75
+ return Evaluation.new(text, values)
58
76
  end
59
77
  end
60
78
  end
@@ -1,65 +1,74 @@
1
- module Sapphire
2
- module WebAbstractions
3
- class Page
4
-
5
- def AlternateUrls
6
- []
7
- end
8
-
9
- attr_reader :fields
10
-
11
- def initialize()
12
- @fields = []
13
- end
14
-
15
- def DropDown(*args)
16
- @fields << { args.first => DropDown.new(args[1..args.length]) }
17
- end
18
-
19
- def TextBox(*args)
20
- @fields << { args.first => TextBox.new(args[1..args.length]) }
21
- end
22
-
23
- def RadioButton(*args)
24
- @fields << { args.first => RadioButton.new(args[1..args.length]) }
25
- end
26
-
27
- def CheckBox(*args)
28
- @fields << { args.first => CheckBox.new(args[1..args.length]) }
29
- end
30
-
31
- def Button(*args)
32
- @fields << { args.first => Button.new(args[1..args.length]) }
33
- end
34
-
35
- def Label(*args)
36
- @fields << { args.first => Label.new(args[1..args.length]) }
37
- end
38
-
39
- def Image(*args)
40
- @fields << { args.first => Image.new(args[1..args.length]) }
41
- end
42
-
43
- def Hyperlink(*args)
44
- @fields << { args.first => Hyperlink.new(args[1..args.length]) }
45
- end
46
-
47
- def List(*args)
48
- @fields << { args.first => List.new(args[1..args.length]) }
49
- end
50
-
51
- def Date(*args)
52
- @fields << { args.first => Date.new(args[1..args.length]) }
53
- end
54
-
55
- def Date(*args)
56
- @fields << { args.first => Date.new(args[1]) }
57
- end
58
-
59
- def Contains(item)
60
- @fields.has_key? item
61
- end
62
-
63
- end
64
- end
65
- end
1
+ module Sapphire
2
+ module WebAbstractions
3
+ class Page
4
+
5
+ def AlternateUrls
6
+ []
7
+ end
8
+
9
+ attr_reader :fields
10
+
11
+ def initialize()
12
+ @fields = {}
13
+ self.Init()
14
+ end
15
+
16
+ def Title(*args)
17
+ @fields = @fields.merge! args.first => Title.new(nil)
18
+ end
19
+
20
+ def DropDown(*args)
21
+ @fields = @fields.merge! args.first => DropDown.new(args[1..args.length])
22
+ end
23
+
24
+ def TextBox(*args)
25
+ @fields = @fields.merge! args.first => TextBox.new(args[1..args.length])
26
+ end
27
+
28
+ def RadioButton(*args)
29
+ @fields = @fields.merge! args.first => RadioButton.new(args[1..args.length])
30
+ end
31
+
32
+ def CheckBox(*args)
33
+ @fields = @fields.merge! args.first => CheckBox.new(args[1..args.length])
34
+ end
35
+
36
+ def Button(*args)
37
+ @fields = @fields.merge! args.first => Button.new(args[1..args.length])
38
+ end
39
+
40
+ def Label(*args)
41
+ @fields = @fields.merge! args.first => Label.new(args[1..args.length])
42
+ end
43
+
44
+ def Image(*args)
45
+ @fields = @fields.merge! args.first => Image.new(args[1..args.length])
46
+ end
47
+
48
+ def Hyperlink(*args)
49
+ @fields = @fields.merge! args.first => Hyperlink.new(args[1..args.length])
50
+ end
51
+
52
+ def List(*args)
53
+ @fields = @fields.merge! args.first => List.new(args[1..args.length])
54
+ end
55
+
56
+ def Date(*args)
57
+ @fields = @fields.merge! args.first => Date.new(args[1])
58
+ end
59
+
60
+ def AlertBox(*args)
61
+ @fields = @fields.merge! args.first => AlertBox.new(nil)
62
+ end
63
+
64
+ def Contains(item)
65
+ @fields.has_key? item
66
+ end
67
+
68
+ def Get(item)
69
+ @fields[item]
70
+ end
71
+
72
+ end
73
+ end
74
+ end
@@ -1,28 +1,29 @@
1
- module Sapphire
2
- module WebAbstractions
3
- class CheckBox < Control
4
- def Check (value)
5
-
6
- if value && self.IsChecked
7
- return;
8
- end
9
-
10
- if !value && !self.IsChecked
11
- return;
12
- end
13
-
14
- radio = self.Find
15
- radio.click
16
-
17
- end
18
-
19
- def IsChecked
20
-
21
- radio = self.Find
22
- radio.attribute("checked")
23
-
24
- end
25
- end
26
- end
27
- end
28
-
1
+ module Sapphire
2
+ module WebAbstractions
3
+ class CheckBox < Control
4
+ def Check (value)
5
+ checked = self.Checked
6
+
7
+ if value && checked
8
+ return;
9
+ end
10
+
11
+ if !value && !checked
12
+ return;
13
+ end
14
+
15
+ self.Click
16
+ end
17
+
18
+ def Checked
19
+ radio = self.Find
20
+ radio.attribute("checked") != nil
21
+ end
22
+
23
+ def Clear
24
+ self.Check false
25
+ end
26
+ end
27
+ end
28
+ end
29
+