rubinium 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (161) hide show
  1. data/CHANGES +7 -0
  2. data/MIT-LICENSE +21 -0
  3. data/README +137 -0
  4. data/Rakefile +139 -0
  5. data/TODO +7 -0
  6. data/doc/examples/rtc_site_live.rb +12 -0
  7. data/doc/examples/rts_main.rb +9 -0
  8. data/doc/examples/rts_shared_code.rb +25 -0
  9. data/lib/rubinium.rb +9 -0
  10. data/lib/rubinium/string.rb +3 -0
  11. data/lib/rubinium/test_base.rb +80 -0
  12. data/lib/rubinium/test_suite.rb +53 -0
  13. data/lib/rubinium/validator.rb +16 -0
  14. data/test/selenium_tests/test_click.rb +22 -0
  15. data/test/selenium_tests/test_open.rb +11 -0
  16. data/test/tc_file_creation.rb +60 -0
  17. data/test/ts_rubinium.rb +1 -0
  18. data/vendor/selenium-0.6.0/install-readme.txt +9 -0
  19. data/vendor/selenium-0.6.0/selenium/SeleneseRunner.html +253 -0
  20. data/vendor/selenium-0.6.0/selenium/SeleniumLog.html +61 -0
  21. data/vendor/selenium-0.6.0/selenium/TestRunner-splash.html +55 -0
  22. data/vendor/selenium-0.6.0/selenium/TestRunner.hta +146 -0
  23. data/vendor/selenium-0.6.0/selenium/TestRunner.html +146 -0
  24. data/vendor/selenium-0.6.0/selenium/devtests/TestClickInFrame.html +58 -0
  25. data/vendor/selenium-0.6.0/selenium/devtests/TestOpenInFrame.html +48 -0
  26. data/vendor/selenium-0.6.0/selenium/devtests/TestOpenInNewWindow.html +78 -0
  27. data/vendor/selenium-0.6.0/selenium/devtests/TestOpenMeta.html +43 -0
  28. data/vendor/selenium-0.6.0/selenium/devtests/TestSuite.html +39 -0
  29. data/vendor/selenium-0.6.0/selenium/devtests/meta/page.html +5 -0
  30. data/vendor/selenium-0.6.0/selenium/dom-images/butmin.gif +0 -0
  31. data/vendor/selenium-0.6.0/selenium/dom-images/butplus.gif +0 -0
  32. data/vendor/selenium-0.6.0/selenium/dom-styles/default.css +298 -0
  33. data/vendor/selenium-0.6.0/selenium/domviewer.html +16 -0
  34. data/vendor/selenium-0.6.0/selenium/html-xpath/carnation.jpg +0 -0
  35. data/vendor/selenium-0.6.0/selenium/html-xpath/example.html +75 -0
  36. data/vendor/selenium-0.6.0/selenium/html-xpath/html-xpath-patched.js +657 -0
  37. data/vendor/selenium-0.6.0/selenium/html-xpath/html-xpath.js +610 -0
  38. data/vendor/selenium-0.6.0/selenium/html-xpath/license.txt +504 -0
  39. data/vendor/selenium-0.6.0/selenium/html-xpath/rainbow.jpg +0 -0
  40. data/vendor/selenium-0.6.0/selenium/htmlutils.js +283 -0
  41. data/vendor/selenium-0.6.0/selenium/index.html +60 -0
  42. data/vendor/selenium-0.6.0/selenium/jsmock/mock-tests.html +205 -0
  43. data/vendor/selenium-0.6.0/selenium/jsmock/mock.js +124 -0
  44. data/vendor/selenium-0.6.0/selenium/selenium-api.js +683 -0
  45. data/vendor/selenium-0.6.0/selenium/selenium-browserbot.js +930 -0
  46. data/vendor/selenium-0.6.0/selenium/selenium-commandhandlers.js +286 -0
  47. data/vendor/selenium-0.6.0/selenium/selenium-domviewer.js +188 -0
  48. data/vendor/selenium-0.6.0/selenium/selenium-executionloop.js +250 -0
  49. data/vendor/selenium-0.6.0/selenium/selenium-fitrunner.js +597 -0
  50. data/vendor/selenium-0.6.0/selenium/selenium-logging.js +88 -0
  51. data/vendor/selenium-0.6.0/selenium/selenium-logo.png +0 -0
  52. data/vendor/selenium-0.6.0/selenium/selenium-tableparser.js +50 -0
  53. data/vendor/selenium-0.6.0/selenium/selenium.css +211 -0
  54. data/vendor/selenium-0.6.0/selenium/tests/ErrorCheckingTestSuite.html +36 -0
  55. data/vendor/selenium-0.6.0/selenium/tests/GoogleTestSearch.html +69 -0
  56. data/vendor/selenium-0.6.0/selenium/tests/GoogleTestSuite.html +32 -0
  57. data/vendor/selenium-0.6.0/selenium/tests/JsUnitSuite.html +38 -0
  58. data/vendor/selenium-0.6.0/selenium/tests/TestClick.html +128 -0
  59. data/vendor/selenium-0.6.0/selenium/tests/TestClickJavascriptHref.html +115 -0
  60. data/vendor/selenium-0.6.0/selenium/tests/TestCommandError.html +79 -0
  61. data/vendor/selenium-0.6.0/selenium/tests/TestConfirmations.html +77 -0
  62. data/vendor/selenium-0.6.0/selenium/tests/TestErrorChecking.html +71 -0
  63. data/vendor/selenium-0.6.0/selenium/tests/TestFailingAssert.html +59 -0
  64. data/vendor/selenium-0.6.0/selenium/tests/TestFailingVerifications.html +198 -0
  65. data/vendor/selenium-0.6.0/selenium/tests/TestFocusOnBlur.html +53 -0
  66. data/vendor/selenium-0.6.0/selenium/tests/TestGoBack.html +81 -0
  67. data/vendor/selenium-0.6.0/selenium/tests/TestImplicitLocators.html +81 -0
  68. data/vendor/selenium-0.6.0/selenium/tests/TestJavascriptParameters.html +91 -0
  69. data/vendor/selenium-0.6.0/selenium/tests/TestLocators.html +161 -0
  70. data/vendor/selenium-0.6.0/selenium/tests/TestModalDialog.html +58 -0
  71. data/vendor/selenium-0.6.0/selenium/tests/TestModalDialogDialog.html +48 -0
  72. data/vendor/selenium-0.6.0/selenium/tests/TestOpen.html +66 -0
  73. data/vendor/selenium-0.6.0/selenium/tests/TestPatternMatching.html +127 -0
  74. data/vendor/selenium-0.6.0/selenium/tests/TestPause.html +78 -0
  75. data/vendor/selenium-0.6.0/selenium/tests/TestPrompting.html +82 -0
  76. data/vendor/selenium-0.6.0/selenium/tests/TestProxy.html +62 -0
  77. data/vendor/selenium-0.6.0/selenium/tests/TestSelect.html +111 -0
  78. data/vendor/selenium-0.6.0/selenium/tests/TestSelectWindow.html +106 -0
  79. data/vendor/selenium-0.6.0/selenium/tests/TestStore.html +165 -0
  80. data/vendor/selenium-0.6.0/selenium/tests/TestSuite-InternetExplorer.html +79 -0
  81. data/vendor/selenium-0.6.0/selenium/tests/TestSuite-Konqueror.html +75 -0
  82. data/vendor/selenium-0.6.0/selenium/tests/TestSuite-Safari.html +75 -0
  83. data/vendor/selenium-0.6.0/selenium/tests/TestSuite.html +75 -0
  84. data/vendor/selenium-0.6.0/selenium/tests/TestType.html +79 -0
  85. data/vendor/selenium-0.6.0/selenium/tests/TestUserExtensions.html +81 -0
  86. data/vendor/selenium-0.6.0/selenium/tests/TestVerifications.html +164 -0
  87. data/vendor/selenium-0.6.0/selenium/tests/TestVerifyAlerts.html +80 -0
  88. data/vendor/selenium-0.6.0/selenium/tests/TestVerifyAlertsFailures.html +108 -0
  89. data/vendor/selenium-0.6.0/selenium/tests/TestVerifyConfirmationFailures.html +86 -0
  90. data/vendor/selenium-0.6.0/selenium/tests/TestVerifyEditable.html +70 -0
  91. data/vendor/selenium-0.6.0/selenium/tests/TestVerifyEditableFailures.html +95 -0
  92. data/vendor/selenium-0.6.0/selenium/tests/TestVisibility.html +91 -0
  93. data/vendor/selenium-0.6.0/selenium/tests/TestVisibilityFailures.html +131 -0
  94. data/vendor/selenium-0.6.0/selenium/tests/TestWait.html +112 -0
  95. data/vendor/selenium-0.6.0/selenium/tests/TestWaitFor.html +63 -0
  96. data/vendor/selenium-0.6.0/selenium/tests/TestWaitInPopupWindow.html +94 -0
  97. data/vendor/selenium-0.6.0/selenium/tests/TestXPathLocators.html +98 -0
  98. data/vendor/selenium-0.6.0/selenium/tests/browserbot/alert-handling-tests.html +79 -0
  99. data/vendor/selenium-0.6.0/selenium/tests/browserbot/assert-tests.html +113 -0
  100. data/vendor/selenium-0.6.0/selenium/tests/browserbot/browserbot-tests.html +123 -0
  101. data/vendor/selenium-0.6.0/selenium/tests/browserbot/command-factory-tests.html +290 -0
  102. data/vendor/selenium-0.6.0/selenium/tests/browserbot/command-handler-tests.html +115 -0
  103. data/vendor/selenium-0.6.0/selenium/tests/browserbot/confirm-handling-tests.html +97 -0
  104. data/vendor/selenium-0.6.0/selenium/tests/browserbot/error-checking-command-tests.html +198 -0
  105. data/vendor/selenium-0.6.0/selenium/tests/browserbot/event-bubble-tests.html +106 -0
  106. data/vendor/selenium-0.6.0/selenium/tests/browserbot/optionlocator-tests.html +180 -0
  107. data/vendor/selenium-0.6.0/selenium/tests/browserbot/pagebot-accessor-tests.html +65 -0
  108. data/vendor/selenium-0.6.0/selenium/tests/browserbot/pagebot-action-tests.html +200 -0
  109. data/vendor/selenium-0.6.0/selenium/tests/browserbot/pagebot-attribute-tests.html +98 -0
  110. data/vendor/selenium-0.6.0/selenium/tests/browserbot/pagebot-locator-tests-include.html +33 -0
  111. data/vendor/selenium-0.6.0/selenium/tests/browserbot/pagebot-locator-tests.html +258 -0
  112. data/vendor/selenium-0.6.0/selenium/tests/browserbot/pagebot-property-tests.html +49 -0
  113. data/vendor/selenium-0.6.0/selenium/tests/browserbot/pattern-matcher-tests.html +66 -0
  114. data/vendor/selenium-0.6.0/selenium/tests/browserbot/selenium-api-tests.html +412 -0
  115. data/vendor/selenium-0.6.0/selenium/tests/browserbot/selenium-parameter-tests.html +98 -0
  116. data/vendor/selenium-0.6.0/selenium/tests/browserbot/suite.html +52 -0
  117. data/vendor/selenium-0.6.0/selenium/tests/browserbot/testloop-handle-error-tests.html +74 -0
  118. data/vendor/selenium-0.6.0/selenium/tests/events/TestButtonEvents.html +72 -0
  119. data/vendor/selenium-0.6.0/selenium/tests/events/TestCheckboxEvents.html +107 -0
  120. data/vendor/selenium-0.6.0/selenium/tests/events/TestFireEvents.html +75 -0
  121. data/vendor/selenium-0.6.0/selenium/tests/events/TestLinkEvents.html +43 -0
  122. data/vendor/selenium-0.6.0/selenium/tests/events/TestRadioEvents.html +149 -0
  123. data/vendor/selenium-0.6.0/selenium/tests/events/TestSelectEvents.html +122 -0
  124. data/vendor/selenium-0.6.0/selenium/tests/events/TestTextEvents.html +87 -0
  125. data/vendor/selenium-0.6.0/selenium/tests/events/readme.txt +26 -0
  126. data/vendor/selenium-0.6.0/selenium/tests/html/banner.gif +0 -0
  127. data/vendor/selenium-0.6.0/selenium/tests/html/test_async_event.html +36 -0
  128. data/vendor/selenium-0.6.0/selenium/tests/html/test_click_javascript_page.html +34 -0
  129. data/vendor/selenium-0.6.0/selenium/tests/html/test_click_page1.html +31 -0
  130. data/vendor/selenium-0.6.0/selenium/tests/html/test_click_page2.html +30 -0
  131. data/vendor/selenium-0.6.0/selenium/tests/html/test_confirm.html +34 -0
  132. data/vendor/selenium-0.6.0/selenium/tests/html/test_dummy_page.html +26 -0
  133. data/vendor/selenium-0.6.0/selenium/tests/html/test_editable.html +36 -0
  134. data/vendor/selenium-0.6.0/selenium/tests/html/test_focus_on_blur.html +33 -0
  135. data/vendor/selenium-0.6.0/selenium/tests/html/test_form_events.html +98 -0
  136. data/vendor/selenium-0.6.0/selenium/tests/html/test_framed_page.html +7 -0
  137. data/vendor/selenium-0.6.0/selenium/tests/html/test_just_text.html +22 -0
  138. data/vendor/selenium-0.6.0/selenium/tests/html/test_locators.html +34 -0
  139. data/vendor/selenium-0.6.0/selenium/tests/html/test_modal_dialog.html +29 -0
  140. data/vendor/selenium-0.6.0/selenium/tests/html/test_modal_dialog_dialog.html +35 -0
  141. data/vendor/selenium-0.6.0/selenium/tests/html/test_open.html +23 -0
  142. data/vendor/selenium-0.6.0/selenium/tests/html/test_prompt.html +34 -0
  143. data/vendor/selenium-0.6.0/selenium/tests/html/test_reload_onchange_page.html +32 -0
  144. data/vendor/selenium-0.6.0/selenium/tests/html/test_select.html +35 -0
  145. data/vendor/selenium-0.6.0/selenium/tests/html/test_select_window.html +29 -0
  146. data/vendor/selenium-0.6.0/selenium/tests/html/test_select_window_popup.html +28 -0
  147. data/vendor/selenium-0.6.0/selenium/tests/html/test_slowloading_page.html +27 -0
  148. data/vendor/selenium-0.6.0/selenium/tests/html/test_store_value.html +23 -0
  149. data/vendor/selenium-0.6.0/selenium/tests/html/test_type_page1.html +37 -0
  150. data/vendor/selenium-0.6.0/selenium/tests/html/test_type_page2.html +61 -0
  151. data/vendor/selenium-0.6.0/selenium/tests/html/test_verifications.html +42 -0
  152. data/vendor/selenium-0.6.0/selenium/tests/html/test_verify_alert.html +46 -0
  153. data/vendor/selenium-0.6.0/selenium/tests/html/test_visibility.html +53 -0
  154. data/vendor/selenium-0.6.0/selenium/tests/readme.txt +1 -0
  155. data/vendor/selenium-0.6.0/selenium/tests/tableparser/tableparser-tests.html +122 -0
  156. data/vendor/selenium-0.6.0/selenium/tests/tinyWebServer.py +70 -0
  157. data/vendor/selenium-0.6.0/selenium/user-extensions.js.sample +62 -0
  158. data/vendor/selenium-0.6.0/selenium/version.txt +1 -0
  159. data/vendor/selenium-0.6.0/selenium/xmlextras.js +153 -0
  160. data/vendor/selenium-0.6.0/selenium/xpath.js +3910 -0
  161. metadata +216 -0
@@ -0,0 +1,53 @@
1
+ class Rubinium::TestSuite
2
+ attr_accessor :tests, :name, :filename, :basedir
3
+
4
+ def initialize(name = "Unnamed test suite")
5
+ @name = name
6
+ @basedir = ARGV[0] || "."
7
+ @tests = []
8
+ yield self if block_given?
9
+ end
10
+
11
+ def <<(test)
12
+ @tests << test
13
+ end
14
+
15
+ def generate
16
+ testfiles = []
17
+ @tests.each do |test|
18
+ filename = File.join(@basedir, test.filename)
19
+ testfiles << [test.name, test.filename]
20
+ File.open(filename, "w") do |file|
21
+ test.generate(file)
22
+ end
23
+ end
24
+ generate_suite testfiles
25
+ end
26
+
27
+ def clear
28
+ @tests.clear
29
+ end
30
+
31
+ private
32
+ def generate_suite(testfiles)
33
+ return if testfiles.empty?
34
+ tests = testfiles.map do |elem|
35
+ name, file = elem
36
+ "#{' ' * 6}<tr><td><a href='#{file}'>#{name}</a></td></tr>"
37
+ end.join("\n")
38
+ suite_html = <<EOF
39
+ <html><head><title>#{@name}</title></head>
40
+ <body>
41
+ <table>
42
+ <tr><td>#{@name}</td></tr>
43
+ #{tests}
44
+ </table>
45
+ </body>
46
+ </html>
47
+ EOF
48
+ suite_filename = @filename || "#{@name.gsub(/ /, "_")}.html"
49
+ File.open(File.join(@basedir, suite_filename), "w") { |f|
50
+ f.write(suite_html)
51
+ }
52
+ end
53
+ end
@@ -0,0 +1,16 @@
1
+ require 'open-uri'
2
+
3
+ module Rubinium
4
+ module Validator
5
+ def validateOpen(test, url)
6
+ begin
7
+ f = Kernel::open(url)
8
+ rescue StandardError => e
9
+ test.errors << e.to_s
10
+ ensure
11
+ f.close unless f.nil?
12
+ end
13
+ end
14
+ end
15
+ end
16
+
@@ -0,0 +1,22 @@
1
+ require 'rubygems'
2
+ require_gem 'rubinium'
3
+
4
+ class TestClick < Rubinium::TestBase
5
+ open './tests/html/test_click_page1.html'
6
+ verifyText 'link', 'Click here for next page'
7
+ clickAndWait 'link'
8
+ verifyTitle 'Click Page Target'
9
+ clickAndWait 'previousPage'
10
+ verifyTitle 'Click Page 1'
11
+ clickAndWait 'linkWithEnclosedImage'
12
+ verifyTitle 'Click Page Target'
13
+ clickAndWait 'previousPage'
14
+ clickAndWait 'enclosedImage'
15
+ verifyTitle 'Click Page Target'
16
+ clickAndWait 'previousPage'
17
+ click 'linkToAnchorOnThisPage'
18
+ verifyTitle 'Click Page 1'
19
+ click 'linkWithOnclickReturnsFalse'
20
+ pause 300
21
+ verifyTitle 'Click Page 1'
22
+ end
@@ -0,0 +1,11 @@
1
+ require 'rubygems'
2
+ require_gem 'rubinium'
3
+
4
+ class TestOpen < Rubinium::TestBase
5
+ open './tests/html/test_open.html'
6
+ verifyLocation '/tests/html/test_open.html'
7
+ verifyTextPresent 'This is a test of the open command.'
8
+ open './tests/html/test_slowloading_page.html'
9
+ verifyLocation '/tests/html/test_slowloading_page.html'
10
+ verifyTitle 'Slow Loading Page'
11
+ end
@@ -0,0 +1,60 @@
1
+ begin
2
+ require 'rubinium.rb'
3
+ rescue LoadError
4
+ require '../lib/rubinium.rb'
5
+ end
6
+ require 'test/unit'
7
+ require 'tmpdir'
8
+ require 'fileutils'
9
+ require 'rexml/document'
10
+
11
+ class FooTest < Rubinium::TestBase
12
+ open 'index.html'
13
+ end
14
+
15
+ class BarTest < Rubinium::TestBase
16
+ open 'index.html'
17
+ verifyTitle 'Some title'
18
+ verifyValue 'nameField', 'J. Random Hacker'
19
+ end
20
+
21
+ class SuiteTest < Test::Unit::TestCase
22
+
23
+ def setup
24
+ @basedir = Dir.tmpdir
25
+ @suite_filename = 'test_suite.html'
26
+ @suite_html = File.join(@basedir, @suite_filename)
27
+ @test_html = File.join(@basedir, FooTest.filename)
28
+
29
+ @suite = Rubinium::TestSuite.new do |suite|
30
+ suite.filename = @suite_filename
31
+ suite.basedir = @basedir
32
+ suite.name = "Sample Test"
33
+ suite << FooTest
34
+ end
35
+ end
36
+
37
+ def teardown
38
+ [@suite_html, @test_html].each { |f| FileUtils.rm(f) if File.exists?(f) }
39
+ end
40
+
41
+ def test_should_create_an_html_suite_and_an_html_test_case
42
+ @suite.generate
43
+ assert(File.exists?(@suite_html))
44
+ assert(File.exists?(@test_html))
45
+ end
46
+
47
+ def test_should_not_create_files_for_an_empty_suite
48
+ @suite.clear
49
+ @suite.generate
50
+ assert( !File.exists?(@suite_html))
51
+ assert( !File.exists?(@test_html))
52
+ end
53
+
54
+ def test_should_generate_well_formed_html
55
+ @suite.generate
56
+ suite_html = REXML::Document.new(File.open(@suite_html))
57
+ test_html = REXML::Document.new(File.open(@test_html))
58
+ end
59
+ end
60
+
@@ -0,0 +1 @@
1
+ require 'tc_file_creation.rb'
@@ -0,0 +1,9 @@
1
+ Copy the "selenium" folder to a web accessible directory in the same web server as the application you want to test.
2
+ In Apache, this would mean a subdirectory of "htdocs".
3
+
4
+ Because of javascript security settings standard in most browsers, Selenium needs to be available on the same host and port as your application.
5
+
6
+ Once deployed to the server, to run Selenium's self-tests, check out:
7
+ http://<webservername>:<port>/selenium/TestRunner.html
8
+
9
+ Read the website for more details. (http://selenium.thoughtworks.com)
@@ -0,0 +1,253 @@
1
+ <!--
2
+ Copyright 2004 ThoughtWorks, Inc
3
+
4
+ Licensed under the Apache License, Version 2.0 (the "License");
5
+ you may not use this file except in compliance with the License.
6
+ You may obtain a copy of the License at
7
+
8
+ http://www.apache.org/licenses/LICENSE-2.0
9
+
10
+ Unless required by applicable law or agreed to in writing, software
11
+ distributed under the License is distributed on an "AS IS" BASIS,
12
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ See the License for the specific language governing permissions and
14
+ limitations under the License.
15
+ -->
16
+ <html>
17
+ <head>
18
+ <meta content="text/html; charset=ISO-8859-1"
19
+ http-equiv="content-type">
20
+ <title>Selenium Functional Test Runner</title>
21
+ <link rel="stylesheet" type="text/css" href="selenium.css" />
22
+ <script language="JavaScript" type="text/javascript" src="jsunit/app/jsUnitCore.js"></script>
23
+ <script type="text/javascript" src="xmlextras.js"></script>
24
+
25
+ <script language="JavaScript" type="text/javascript" src="selenium-browserbot.js"></script>
26
+ <script language="JavaScript" type="text/javascript" src="selenium-api.js"></script>
27
+ <script language="JavaScript" type="text/javascript" src="selenium-commandhandlers.js"></script>
28
+ <script language="JavaScript" type="text/javascript" src="selenium-executionloop.js"></script>
29
+ <script language="JavaScript" type="text/javascript" src="selenium-tableparser.js"></script>
30
+ <script language="JavaScript" type="text/javascript" src="selenium-logging.js"></script>
31
+ <script language="JavaScript" type="text/javascript" src="htmlutils.js"></script>
32
+ <script language="JavaScript" type="text/javascript" src="xpath.js"></script>
33
+ <script language="JavaScript" type="text/javascript" src="user-extensions.js"></script>
34
+ <script language="JavaScript" type="text/javascript">
35
+ function openDomViewer() {
36
+ var autFrame = document.getElementById('myiframe');
37
+ var autFrameDocument = getIframeDocument(autFrame);
38
+ var domViewer = window.open('domviewer.html');
39
+ domViewer.rootDocument = autFrameDocument;
40
+ return false;
41
+ }
42
+ </script>
43
+ <script>
44
+ passColor = "#cfffcf";
45
+ failColor = "#ffcfcf";
46
+ errorColor = "#ffffff";
47
+ workingColor = "#DEE7EC";
48
+ doneColor = "#FFFFCC";
49
+
50
+ slowMode = false;
51
+
52
+ var cmd1 = document.createElement("div");
53
+ var cmd2 = document.createElement("div");
54
+ var cmd3 = document.createElement("div");
55
+ var cmd4 = document.createElement("div");
56
+
57
+ var postResult = "OK";
58
+
59
+
60
+ function runTest() {
61
+ tableParser = new TableParser();
62
+ var testAppFrame = document.getElementById('myiframe');
63
+ selenium = Selenium.createForFrame(testAppFrame);
64
+
65
+ commandFactory = new CommandHandlerFactory();
66
+ commandFactory.registerAll(selenium);
67
+
68
+ testLoop = new TestLoop(commandFactory);
69
+
70
+ testLoop.firstCommand = startup;
71
+ testLoop.nextCommand = nextCommand;
72
+ testLoop.commandStarted = commandStarted;
73
+ testLoop.commandComplete = commandComplete;
74
+ testLoop.commandError = commandError;
75
+ testLoop.testComplete = function() {window.status = "Selenium Tests Complete, for this Test"};
76
+
77
+ testLoop.start();
78
+ }
79
+
80
+ function startup() {
81
+
82
+ var xmlHttp = XmlHttp.create();
83
+
84
+ document.getElementById("commandList").appendChild(cmd4);
85
+ document.getElementById("commandList").appendChild(cmd3);
86
+ document.getElementById("commandList").appendChild(cmd2);
87
+ document.getElementById("commandList").appendChild(cmd1);
88
+
89
+ try {
90
+ xmlHttp.open("GET", "driver?seleniumStart=true", false);
91
+ xmlHttp.send(null);
92
+ } catch(e) {
93
+ return null;
94
+ }
95
+ return extractCommand(xmlHttp);
96
+ }
97
+
98
+ function nextCommand() {
99
+
100
+ var xmlHttp = XmlHttp.create();
101
+
102
+ try {
103
+ xmlHttp.open("GET", "driver?commandResult=" + postResult, false);
104
+ xmlHttp.send(null);
105
+ } catch(e) {
106
+ return null;
107
+ }
108
+ return extractCommand(xmlHttp);
109
+ }
110
+
111
+ function extractCommand(xmlHttp) {
112
+
113
+ if (slowMode) {
114
+ delay(2000);
115
+ }
116
+ var command;
117
+ try {
118
+ command = xmlHttp.responseText;
119
+ } catch (e) {
120
+ alert('could not get responseText: ' + e.message);
121
+ }
122
+
123
+
124
+ if (command.substr(0,'|testComplete'.length)=='|testComplete') {
125
+ return null;
126
+ }
127
+ return tableParser.createCommandFromWikiRow(command);
128
+ }
129
+
130
+ function commandStarted(command) {
131
+ commandNode = document.createElement("div");
132
+ innerHTML = command.command + '(';
133
+ if (command.target != null && command.target != "") {
134
+ innerHTML += command.target;
135
+ if (command.value != null && command.value != "") {
136
+ innerHTML += ', ' + command.value;
137
+ }
138
+ }
139
+ innerHTML += ")";
140
+ commandNode.innerHTML = innerHTML;
141
+ commandNode.style.backgroundColor = workingColor;
142
+ document.getElementById("commandList").removeChild(cmd1);
143
+ document.getElementById("commandList").removeChild(cmd2);
144
+ document.getElementById("commandList").removeChild(cmd3);
145
+ document.getElementById("commandList").removeChild(cmd4);
146
+ cmd4 = cmd3;
147
+ cmd3 = cmd2;
148
+ cmd2 = cmd1;
149
+ cmd1 = commandNode;
150
+ document.getElementById("commandList").appendChild(cmd4);
151
+ document.getElementById("commandList").appendChild(cmd3);
152
+ document.getElementById("commandList").appendChild(cmd2);
153
+ document.getElementById("commandList").appendChild(cmd1);
154
+ }
155
+
156
+ function commandComplete(result) {
157
+ if (result.failed) {
158
+ postResult = result.failureMessage;
159
+ commandNode.title = result.failureMessage;
160
+ commandNode.style.backgroundColor = failColor;
161
+ } else if (result.passed) {
162
+ postResult = "PASSED";
163
+ commandNode.style.backgroundColor = passColor;
164
+ } else {
165
+ postResult = result.result;
166
+ commandNode.style.backgroundColor = doneColor;
167
+ }
168
+ }
169
+
170
+ function commandError(message) {
171
+ postResult = "ERROR"
172
+ commandNode.style.backgroundColor = errorColor;
173
+ commandNode.title = message;
174
+ }
175
+
176
+ function slowClicked() {
177
+ slowMode = !slowMode;
178
+ }
179
+
180
+
181
+ function delay(millis) {
182
+ startMillis = new Date();
183
+ while (true) {
184
+ milli = new Date();
185
+ if (milli-startMillis > millis) {
186
+ break;
187
+ }
188
+ }
189
+ }
190
+
191
+ function getIframeDocument(iframe) {
192
+ if (iframe.contentDocument) {
193
+ return iframe.contentDocument;
194
+ }
195
+ else {
196
+ return iframe.contentWindow.document;
197
+ }
198
+ }
199
+
200
+ </script>
201
+ </head>
202
+
203
+ <body onLoad="runTest()">
204
+
205
+ <table border="1" style="height: 100%;">
206
+ <tr>
207
+ <td width="50%" height="30%">
208
+ <table>
209
+ <tr>
210
+ <td>
211
+ <img src="selenium-logo.png">
212
+ </td>
213
+ <td>
214
+ <h1><a href="http://selenium.thoughtworks.com" >Selenium</a> Functional Testing for Web Apps</h1>
215
+ Open Source From <a href="http://www.thoughtworks.com">ThoughtWorks, Inc</a> and Friends
216
+ <form action="">
217
+ <br/>Slow Mode:<INPUT TYPE="CHECKBOX" NAME="FASTMODE" VALUE="YES" onmouseup="slowClicked()">
218
+
219
+ <fieldset>
220
+ <legend>Tools</legend>
221
+
222
+ <button type="button" id="domViewer1" onclick="openDomViewer();">
223
+ View DOM
224
+ </button>
225
+ <button type="button" onclick="LOG.show();">
226
+ Show Log
227
+ </button>
228
+ </fieldset>
229
+
230
+ </form>
231
+
232
+ </td>
233
+ </tr>
234
+ </table>
235
+ <form action="">
236
+ <label id="context" name="context"></label>
237
+ </form>
238
+ </td>
239
+ <td width="50%" height="30%">
240
+ <b>Last Four Commands</b><br/>
241
+ <div id="commandList"></div>
242
+ </td>
243
+ </tr>
244
+ <tr>
245
+ <td colspan="2" height="70%">
246
+ <iframe name="myiframe" id="myiframe" src="" height="100%" width="100%"></iframe>
247
+ </td>
248
+ </tr>
249
+ </table>
250
+
251
+ </body>
252
+ </html>
253
+
@@ -0,0 +1,61 @@
1
+ <html>
2
+
3
+ <head>
4
+ <title>Selenium Log Console</title>
5
+ <link id="cssLink" rel="stylesheet" href="selenium.css" />
6
+
7
+ </head>
8
+ <body id="logging-console">
9
+
10
+ <script language="JavaScript">
11
+
12
+ var logLevels = {
13
+ debug: 0,
14
+ info: 1,
15
+ warn: 2,
16
+ error: 3
17
+ };
18
+
19
+ function getThresholdLevel() {
20
+ var buttons = document.getElementById('logLevelChooser').level;
21
+ for (var i = 0; i < buttons.length; i++) {
22
+ if (buttons[i].checked) {
23
+ return buttons[i].value;
24
+ }
25
+ }
26
+ }
27
+
28
+ function append(message, logLevel) {
29
+ if (logLevels[logLevel] < logLevels[getThresholdLevel()]) {
30
+ return;
31
+ }
32
+ var log = document.getElementById('log');
33
+ var newEntry = document.createElement('li');
34
+ newEntry.className = logLevel;
35
+ newEntry.appendChild(document.createTextNode(message));
36
+ log.appendChild(newEntry);
37
+ if (newEntry.scrollIntoView) {
38
+ newEntry.scrollIntoView();
39
+ }
40
+ }
41
+
42
+ </script>
43
+
44
+ <div id="banner">
45
+ <form id="logLevelChooser">
46
+ <input id="level-error" type="radio" name="level"
47
+ value="error" /><label for="level-error">Error</label>
48
+ <input id="level-warn" type="radio" name="level"
49
+ value="warn" /><label for="level-warn">Warn</label>
50
+ <input id="level-info" type="radio" name="level" checked="yes"
51
+ value="info" /><label for="level-info">Info</label>
52
+ <input id="level-debug" type="radio" name="level"
53
+ value="debug" /><label for="level-debug">Debug</label>
54
+ </form>
55
+ <h1>Selenium Log Console</h1>
56
+ </div>
57
+
58
+ <ul id="log"></ul>
59
+
60
+ </body>
61
+ </html>