rubinium 0.1.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/CHANGES +7 -0
- data/MIT-LICENSE +21 -0
- data/README +137 -0
- data/Rakefile +139 -0
- data/TODO +7 -0
- data/doc/examples/rtc_site_live.rb +12 -0
- data/doc/examples/rts_main.rb +9 -0
- data/doc/examples/rts_shared_code.rb +25 -0
- data/lib/rubinium.rb +9 -0
- data/lib/rubinium/string.rb +3 -0
- data/lib/rubinium/test_base.rb +80 -0
- data/lib/rubinium/test_suite.rb +53 -0
- data/lib/rubinium/validator.rb +16 -0
- data/test/selenium_tests/test_click.rb +22 -0
- data/test/selenium_tests/test_open.rb +11 -0
- data/test/tc_file_creation.rb +60 -0
- data/test/ts_rubinium.rb +1 -0
- data/vendor/selenium-0.6.0/install-readme.txt +9 -0
- data/vendor/selenium-0.6.0/selenium/SeleneseRunner.html +253 -0
- data/vendor/selenium-0.6.0/selenium/SeleniumLog.html +61 -0
- data/vendor/selenium-0.6.0/selenium/TestRunner-splash.html +55 -0
- data/vendor/selenium-0.6.0/selenium/TestRunner.hta +146 -0
- data/vendor/selenium-0.6.0/selenium/TestRunner.html +146 -0
- data/vendor/selenium-0.6.0/selenium/devtests/TestClickInFrame.html +58 -0
- data/vendor/selenium-0.6.0/selenium/devtests/TestOpenInFrame.html +48 -0
- data/vendor/selenium-0.6.0/selenium/devtests/TestOpenInNewWindow.html +78 -0
- data/vendor/selenium-0.6.0/selenium/devtests/TestOpenMeta.html +43 -0
- data/vendor/selenium-0.6.0/selenium/devtests/TestSuite.html +39 -0
- data/vendor/selenium-0.6.0/selenium/devtests/meta/page.html +5 -0
- data/vendor/selenium-0.6.0/selenium/dom-images/butmin.gif +0 -0
- data/vendor/selenium-0.6.0/selenium/dom-images/butplus.gif +0 -0
- data/vendor/selenium-0.6.0/selenium/dom-styles/default.css +298 -0
- data/vendor/selenium-0.6.0/selenium/domviewer.html +16 -0
- data/vendor/selenium-0.6.0/selenium/html-xpath/carnation.jpg +0 -0
- data/vendor/selenium-0.6.0/selenium/html-xpath/example.html +75 -0
- data/vendor/selenium-0.6.0/selenium/html-xpath/html-xpath-patched.js +657 -0
- data/vendor/selenium-0.6.0/selenium/html-xpath/html-xpath.js +610 -0
- data/vendor/selenium-0.6.0/selenium/html-xpath/license.txt +504 -0
- data/vendor/selenium-0.6.0/selenium/html-xpath/rainbow.jpg +0 -0
- data/vendor/selenium-0.6.0/selenium/htmlutils.js +283 -0
- data/vendor/selenium-0.6.0/selenium/index.html +60 -0
- data/vendor/selenium-0.6.0/selenium/jsmock/mock-tests.html +205 -0
- data/vendor/selenium-0.6.0/selenium/jsmock/mock.js +124 -0
- data/vendor/selenium-0.6.0/selenium/selenium-api.js +683 -0
- data/vendor/selenium-0.6.0/selenium/selenium-browserbot.js +930 -0
- data/vendor/selenium-0.6.0/selenium/selenium-commandhandlers.js +286 -0
- data/vendor/selenium-0.6.0/selenium/selenium-domviewer.js +188 -0
- data/vendor/selenium-0.6.0/selenium/selenium-executionloop.js +250 -0
- data/vendor/selenium-0.6.0/selenium/selenium-fitrunner.js +597 -0
- data/vendor/selenium-0.6.0/selenium/selenium-logging.js +88 -0
- data/vendor/selenium-0.6.0/selenium/selenium-logo.png +0 -0
- data/vendor/selenium-0.6.0/selenium/selenium-tableparser.js +50 -0
- data/vendor/selenium-0.6.0/selenium/selenium.css +211 -0
- data/vendor/selenium-0.6.0/selenium/tests/ErrorCheckingTestSuite.html +36 -0
- data/vendor/selenium-0.6.0/selenium/tests/GoogleTestSearch.html +69 -0
- data/vendor/selenium-0.6.0/selenium/tests/GoogleTestSuite.html +32 -0
- data/vendor/selenium-0.6.0/selenium/tests/JsUnitSuite.html +38 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestClick.html +128 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestClickJavascriptHref.html +115 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestCommandError.html +79 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestConfirmations.html +77 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestErrorChecking.html +71 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestFailingAssert.html +59 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestFailingVerifications.html +198 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestFocusOnBlur.html +53 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestGoBack.html +81 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestImplicitLocators.html +81 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestJavascriptParameters.html +91 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestLocators.html +161 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestModalDialog.html +58 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestModalDialogDialog.html +48 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestOpen.html +66 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestPatternMatching.html +127 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestPause.html +78 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestPrompting.html +82 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestProxy.html +62 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestSelect.html +111 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestSelectWindow.html +106 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestStore.html +165 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestSuite-InternetExplorer.html +79 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestSuite-Konqueror.html +75 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestSuite-Safari.html +75 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestSuite.html +75 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestType.html +79 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestUserExtensions.html +81 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestVerifications.html +164 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestVerifyAlerts.html +80 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestVerifyAlertsFailures.html +108 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestVerifyConfirmationFailures.html +86 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestVerifyEditable.html +70 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestVerifyEditableFailures.html +95 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestVisibility.html +91 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestVisibilityFailures.html +131 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestWait.html +112 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestWaitFor.html +63 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestWaitInPopupWindow.html +94 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestXPathLocators.html +98 -0
- data/vendor/selenium-0.6.0/selenium/tests/browserbot/alert-handling-tests.html +79 -0
- data/vendor/selenium-0.6.0/selenium/tests/browserbot/assert-tests.html +113 -0
- data/vendor/selenium-0.6.0/selenium/tests/browserbot/browserbot-tests.html +123 -0
- data/vendor/selenium-0.6.0/selenium/tests/browserbot/command-factory-tests.html +290 -0
- data/vendor/selenium-0.6.0/selenium/tests/browserbot/command-handler-tests.html +115 -0
- data/vendor/selenium-0.6.0/selenium/tests/browserbot/confirm-handling-tests.html +97 -0
- data/vendor/selenium-0.6.0/selenium/tests/browserbot/error-checking-command-tests.html +198 -0
- data/vendor/selenium-0.6.0/selenium/tests/browserbot/event-bubble-tests.html +106 -0
- data/vendor/selenium-0.6.0/selenium/tests/browserbot/optionlocator-tests.html +180 -0
- data/vendor/selenium-0.6.0/selenium/tests/browserbot/pagebot-accessor-tests.html +65 -0
- data/vendor/selenium-0.6.0/selenium/tests/browserbot/pagebot-action-tests.html +200 -0
- data/vendor/selenium-0.6.0/selenium/tests/browserbot/pagebot-attribute-tests.html +98 -0
- data/vendor/selenium-0.6.0/selenium/tests/browserbot/pagebot-locator-tests-include.html +33 -0
- data/vendor/selenium-0.6.0/selenium/tests/browserbot/pagebot-locator-tests.html +258 -0
- data/vendor/selenium-0.6.0/selenium/tests/browserbot/pagebot-property-tests.html +49 -0
- data/vendor/selenium-0.6.0/selenium/tests/browserbot/pattern-matcher-tests.html +66 -0
- data/vendor/selenium-0.6.0/selenium/tests/browserbot/selenium-api-tests.html +412 -0
- data/vendor/selenium-0.6.0/selenium/tests/browserbot/selenium-parameter-tests.html +98 -0
- data/vendor/selenium-0.6.0/selenium/tests/browserbot/suite.html +52 -0
- data/vendor/selenium-0.6.0/selenium/tests/browserbot/testloop-handle-error-tests.html +74 -0
- data/vendor/selenium-0.6.0/selenium/tests/events/TestButtonEvents.html +72 -0
- data/vendor/selenium-0.6.0/selenium/tests/events/TestCheckboxEvents.html +107 -0
- data/vendor/selenium-0.6.0/selenium/tests/events/TestFireEvents.html +75 -0
- data/vendor/selenium-0.6.0/selenium/tests/events/TestLinkEvents.html +43 -0
- data/vendor/selenium-0.6.0/selenium/tests/events/TestRadioEvents.html +149 -0
- data/vendor/selenium-0.6.0/selenium/tests/events/TestSelectEvents.html +122 -0
- data/vendor/selenium-0.6.0/selenium/tests/events/TestTextEvents.html +87 -0
- data/vendor/selenium-0.6.0/selenium/tests/events/readme.txt +26 -0
- data/vendor/selenium-0.6.0/selenium/tests/html/banner.gif +0 -0
- data/vendor/selenium-0.6.0/selenium/tests/html/test_async_event.html +36 -0
- data/vendor/selenium-0.6.0/selenium/tests/html/test_click_javascript_page.html +34 -0
- data/vendor/selenium-0.6.0/selenium/tests/html/test_click_page1.html +31 -0
- data/vendor/selenium-0.6.0/selenium/tests/html/test_click_page2.html +30 -0
- data/vendor/selenium-0.6.0/selenium/tests/html/test_confirm.html +34 -0
- data/vendor/selenium-0.6.0/selenium/tests/html/test_dummy_page.html +26 -0
- data/vendor/selenium-0.6.0/selenium/tests/html/test_editable.html +36 -0
- data/vendor/selenium-0.6.0/selenium/tests/html/test_focus_on_blur.html +33 -0
- data/vendor/selenium-0.6.0/selenium/tests/html/test_form_events.html +98 -0
- data/vendor/selenium-0.6.0/selenium/tests/html/test_framed_page.html +7 -0
- data/vendor/selenium-0.6.0/selenium/tests/html/test_just_text.html +22 -0
- data/vendor/selenium-0.6.0/selenium/tests/html/test_locators.html +34 -0
- data/vendor/selenium-0.6.0/selenium/tests/html/test_modal_dialog.html +29 -0
- data/vendor/selenium-0.6.0/selenium/tests/html/test_modal_dialog_dialog.html +35 -0
- data/vendor/selenium-0.6.0/selenium/tests/html/test_open.html +23 -0
- data/vendor/selenium-0.6.0/selenium/tests/html/test_prompt.html +34 -0
- data/vendor/selenium-0.6.0/selenium/tests/html/test_reload_onchange_page.html +32 -0
- data/vendor/selenium-0.6.0/selenium/tests/html/test_select.html +35 -0
- data/vendor/selenium-0.6.0/selenium/tests/html/test_select_window.html +29 -0
- data/vendor/selenium-0.6.0/selenium/tests/html/test_select_window_popup.html +28 -0
- data/vendor/selenium-0.6.0/selenium/tests/html/test_slowloading_page.html +27 -0
- data/vendor/selenium-0.6.0/selenium/tests/html/test_store_value.html +23 -0
- data/vendor/selenium-0.6.0/selenium/tests/html/test_type_page1.html +37 -0
- data/vendor/selenium-0.6.0/selenium/tests/html/test_type_page2.html +61 -0
- data/vendor/selenium-0.6.0/selenium/tests/html/test_verifications.html +42 -0
- data/vendor/selenium-0.6.0/selenium/tests/html/test_verify_alert.html +46 -0
- data/vendor/selenium-0.6.0/selenium/tests/html/test_visibility.html +53 -0
- data/vendor/selenium-0.6.0/selenium/tests/readme.txt +1 -0
- data/vendor/selenium-0.6.0/selenium/tests/tableparser/tableparser-tests.html +122 -0
- data/vendor/selenium-0.6.0/selenium/tests/tinyWebServer.py +70 -0
- data/vendor/selenium-0.6.0/selenium/user-extensions.js.sample +62 -0
- data/vendor/selenium-0.6.0/selenium/version.txt +1 -0
- data/vendor/selenium-0.6.0/selenium/xmlextras.js +153 -0
- data/vendor/selenium-0.6.0/selenium/xpath.js +3910 -0
- metadata +216 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
|
2
|
+
|
|
3
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
|
4
|
+
<head>
|
|
5
|
+
<title>DOM Viewer</title>
|
|
6
|
+
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
|
7
|
+
<link rel="stylesheet" type="text/css" href="dom-styles/default.css"/>
|
|
8
|
+
<script type="text/javascript" src="selenium-domviewer.js"></script>
|
|
9
|
+
</head>
|
|
10
|
+
<body onload="loadDomViewer();">
|
|
11
|
+
<h3>DOM Viewer</h3>
|
|
12
|
+
<p> This page is generated using JavaScript. If you see this text, your
|
|
13
|
+
browser doesn't support JavaScript.</p>
|
|
14
|
+
</body>
|
|
15
|
+
|
|
16
|
+
</html>
|
|
Binary file
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
<html>
|
|
2
|
+
<head>
|
|
3
|
+
<title>DOM Level 3 XPath Example</title>
|
|
4
|
+
<script language="javascript" type="text/javascript" src="html-xpath.js"></script>
|
|
5
|
+
</head>
|
|
6
|
+
<body>
|
|
7
|
+
<div class="Test">
|
|
8
|
+
Test Node <span class="Number">1</span>
|
|
9
|
+
</div>
|
|
10
|
+
|
|
11
|
+
<span id="TestingGround">
|
|
12
|
+
<div class="SomeOtherClass">
|
|
13
|
+
<div class="Test" id="ContextNodeTest">
|
|
14
|
+
Test Node <span class="Number">2</span>
|
|
15
|
+
<p>Test Node <span class="Number">3</span>: Unclosed Paragraph tag
|
|
16
|
+
<div class="Test">
|
|
17
|
+
Test Node <span class="Number">4</span>: Nesting
|
|
18
|
+
</div>
|
|
19
|
+
<img src="rainbow.jpg" alt="Something I found in my backyard" width="100" height="200" alt="Test image" someOtherAttribute="someOtherValue" />
|
|
20
|
+
<img src="carnation.jpg" alt="Carnation" width="99" height="74">
|
|
21
|
+
</div>
|
|
22
|
+
</div>
|
|
23
|
+
</span>
|
|
24
|
+
|
|
25
|
+
<script language="javascript">
|
|
26
|
+
|
|
27
|
+
function showIterator(title, result)
|
|
28
|
+
{
|
|
29
|
+
var s = title;
|
|
30
|
+
var item;
|
|
31
|
+
while(item = result.iterateNext())
|
|
32
|
+
{
|
|
33
|
+
s += "<div class=\"XPathResultItem\">" + (item.nodeType == 1 ? item.innerHTML.replace(/</g, "<").replace(/>/g, ">") : item.nodeValue) + "</div>";
|
|
34
|
+
}
|
|
35
|
+
document.write(s);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// Evaluate 1
|
|
39
|
+
var result = document.evaluate("//div[@class='Test']", document, null, XPathResult.STRING_TYPE, null);
|
|
40
|
+
document.write("<h1>\"//div[@class='Test']\" as String</h1>" + result.getStringValue());
|
|
41
|
+
|
|
42
|
+
// Evaluate 2
|
|
43
|
+
document.evaluate("//img[@width < 100]/@height", document, null, XPathResult.NUMBER_TYPE, result);
|
|
44
|
+
document.write("<h1>\"//img[@width < 100]/@height\" as Number</h1>" + result.getNumberValue());
|
|
45
|
+
|
|
46
|
+
// Evaluate 3
|
|
47
|
+
showIterator
|
|
48
|
+
(
|
|
49
|
+
"<h1>\"//div[@class='Test']\" in context of document</h1>",
|
|
50
|
+
document.evaluate("//div[@class='Test']", document, null, XPathResult.ANY_TYPE, result)
|
|
51
|
+
);
|
|
52
|
+
|
|
53
|
+
// Evaluate 4
|
|
54
|
+
showIterator
|
|
55
|
+
(
|
|
56
|
+
"<h1>\"div[@class='Test']\" in context of a specific node (id=\"ContextNodeTest\")</h1>",
|
|
57
|
+
document.evaluate("div[@class='Test']", document.getElementById("ContextNodeTest"), null, XPathResult.ANY_TYPE, result)
|
|
58
|
+
);
|
|
59
|
+
|
|
60
|
+
// Evaluate 5
|
|
61
|
+
showIterator
|
|
62
|
+
(
|
|
63
|
+
"<h1>\"//div/@class\": Retrieve Attribute Values</h1>",
|
|
64
|
+
document.evaluate("//div/@class", document, null, 0, result)
|
|
65
|
+
);
|
|
66
|
+
|
|
67
|
+
// Evaluate 6
|
|
68
|
+
var result = document.evaluate("count(//span[@class='Number'])", document, null, XPathResult.NUMBER_TYPE, null);
|
|
69
|
+
document.write("<h1>\"count(//span[@class='Number'])\" as Number</h1>" + result.getNumberValue());
|
|
70
|
+
|
|
71
|
+
</script>
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
</body>
|
|
75
|
+
</html>
|
|
@@ -0,0 +1,657 @@
|
|
|
1
|
+
/*
|
|
2
|
+
html-xpath, an implementation of DOM Level 3 XPath for Internet Explorer 5+
|
|
3
|
+
Copyright (C) 2004 Dimitri Glazkov
|
|
4
|
+
|
|
5
|
+
This library is free software; you can redistribute it and/or
|
|
6
|
+
modify it under the terms of the GNU Lesser General Public
|
|
7
|
+
License as published by the Free Software Foundation; either
|
|
8
|
+
version 2.1 of the License, or (at your option) any later version.
|
|
9
|
+
|
|
10
|
+
This library is distributed in the hope that it will be useful,
|
|
11
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
13
|
+
Lesser General Public License for more details.
|
|
14
|
+
|
|
15
|
+
You should have received a copy of the GNU Lesser General Public
|
|
16
|
+
License along with this library; if not, write to the Free Software
|
|
17
|
+
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
/** SELENIUM:PATCH TO ALLOW USE WITH DOCUMENTS FROM OTHER WINDOWS: 2004-11-24
|
|
21
|
+
TODO resubmit this to http://sf.net/projects/html-xpath */
|
|
22
|
+
function addXPathSupport(document) {
|
|
23
|
+
/** END SELENIUM:PATCH */
|
|
24
|
+
|
|
25
|
+
var isIe = /MSIE [56789]/.test(navigator.userAgent) && (navigator.platform == "Win32");
|
|
26
|
+
|
|
27
|
+
// Mozilla has support by default, we don't have an implementation for the rest
|
|
28
|
+
if (isIe)
|
|
29
|
+
{
|
|
30
|
+
// release number
|
|
31
|
+
document.DomL3XPathRelease = "0.0.3.0";
|
|
32
|
+
|
|
33
|
+
// XPathException
|
|
34
|
+
// An Error object will be thrown, this is just a handler to instantiate that object
|
|
35
|
+
var XPathException = new _XPathExceptionHandler();
|
|
36
|
+
function _XPathExceptionHandler()
|
|
37
|
+
{
|
|
38
|
+
this.INVALID_EXPRESSION_ERR = 51;
|
|
39
|
+
this.TYPE_ERR = 52;
|
|
40
|
+
this.NOT_IMPLEMENTED_ERR = -1;
|
|
41
|
+
this.RUNTIME_ERR = -2;
|
|
42
|
+
|
|
43
|
+
this.ThrowNotImplemented = function(message)
|
|
44
|
+
{
|
|
45
|
+
ThrowError(this.NOT_IMPLEMENTED_ERR, "This functionality is not implemented.", message);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
this.ThrowInvalidExpression = function(message)
|
|
49
|
+
{
|
|
50
|
+
ThrowError(this.INVALID_EXPRESSION_ERR, "Invalid expression", message);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
this.ThrowType = function(message)
|
|
54
|
+
{
|
|
55
|
+
ThrowError(this.TYPE_ERR, "Type error", message);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
this.Throw = function(message)
|
|
59
|
+
{
|
|
60
|
+
ThrowError(this.RUNTIME_ERR, "Run-time error", message);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function ThrowError(code, description, message)
|
|
64
|
+
{
|
|
65
|
+
var error = new Error(code, "DOM-L3-XPath " + document.DomL3XPathRelease + ": " + description + (message ? ", \"" + message + "\"": ""));
|
|
66
|
+
error.code = code;
|
|
67
|
+
error.name = "XPathException";
|
|
68
|
+
throw error;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// DOMException
|
|
73
|
+
// An Error object will be thrown, this is just a handler to instantiate that object
|
|
74
|
+
var DOMException = new _DOMExceptionHandler();
|
|
75
|
+
function _DOMExceptionHandler()
|
|
76
|
+
{
|
|
77
|
+
this.ThrowInvalidState = function(message)
|
|
78
|
+
{
|
|
79
|
+
ThrowError(13, "The state of the object is no longer valid", message);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
function ThrowError(code, description, message)
|
|
83
|
+
{
|
|
84
|
+
var error = new Error(code, "DOM : " + description + (message ? ", \"" + message + "\"": ""));
|
|
85
|
+
error.code = code;
|
|
86
|
+
error.name = "DOMException";
|
|
87
|
+
throw error;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// XPathEvaluator
|
|
92
|
+
// implemented as document object methods
|
|
93
|
+
|
|
94
|
+
// XPathExpression createExpression(String expression, XPathNSResolver resolver)
|
|
95
|
+
document.createExpression = function
|
|
96
|
+
(
|
|
97
|
+
expression, // String
|
|
98
|
+
resolver // XPathNSResolver
|
|
99
|
+
)
|
|
100
|
+
{
|
|
101
|
+
// returns XPathExpression object
|
|
102
|
+
return new XPathExpression(expression, resolver);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// XPathNSResolver createNSResolver(nodeResolver)
|
|
106
|
+
document.createNSResolver = function
|
|
107
|
+
(
|
|
108
|
+
nodeResolver // Node
|
|
109
|
+
)
|
|
110
|
+
{
|
|
111
|
+
// returns XPathNSResolver
|
|
112
|
+
return new XPathNSResolver(nodeResolver);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// XPathResult evaluate(String expresison, Node contextNode, XPathNSResolver resolver, Number type, XPathResult result)
|
|
116
|
+
document.evaluate = function
|
|
117
|
+
(
|
|
118
|
+
expression, // String
|
|
119
|
+
contextNode, // Node
|
|
120
|
+
resolver, // XPathNSResolver
|
|
121
|
+
type, // Number
|
|
122
|
+
result // XPathResult
|
|
123
|
+
)
|
|
124
|
+
// can raise XPathException, DOMException
|
|
125
|
+
{
|
|
126
|
+
// return XPathResult
|
|
127
|
+
return document.createExpression(expression, resolver).evaluate(contextNode, type, result);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
// XPathExpression
|
|
131
|
+
function XPathExpression
|
|
132
|
+
(
|
|
133
|
+
expression, // String
|
|
134
|
+
resolver // XPathNSResolver
|
|
135
|
+
)
|
|
136
|
+
{
|
|
137
|
+
this.expressionString = expression;
|
|
138
|
+
this.resolver = resolver;
|
|
139
|
+
|
|
140
|
+
// XPathResult evaluate(Node contextNode, Number type, XPathResult result)
|
|
141
|
+
this.evaluate = function
|
|
142
|
+
(
|
|
143
|
+
contextNode, // Node
|
|
144
|
+
type, // Number
|
|
145
|
+
result // XPathResult
|
|
146
|
+
)
|
|
147
|
+
// raises XPathException, DOMException
|
|
148
|
+
{
|
|
149
|
+
// return XPathResult
|
|
150
|
+
return (result && result.constructor == XPathResult ? result.initialize(this, contextNode, resolver, type) : new XPathResult(this, contextNode, resolver, type));
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
this.toString = function()
|
|
154
|
+
{
|
|
155
|
+
return "[XPathExpression]";
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
// XPathNSResolver
|
|
160
|
+
function XPathNSResolver(node)
|
|
161
|
+
{
|
|
162
|
+
this.node = node;
|
|
163
|
+
|
|
164
|
+
// String lookupNamespaceURI(String prefix)
|
|
165
|
+
this.lookupNamespaceURI = function
|
|
166
|
+
(
|
|
167
|
+
prefix // String
|
|
168
|
+
)
|
|
169
|
+
{
|
|
170
|
+
XPathException.ThrowNotImplemented();
|
|
171
|
+
// return String
|
|
172
|
+
return null;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
this.toString = function()
|
|
176
|
+
{
|
|
177
|
+
return "[XPathNSResolver]";
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
// XPathResult
|
|
182
|
+
XPathResult.ANY_TYPE = 0;
|
|
183
|
+
XPathResult.NUMBER_TYPE = 1;
|
|
184
|
+
XPathResult.STRING_TYPE = 2;
|
|
185
|
+
XPathResult.BOOLEAN_TYPE = 3;
|
|
186
|
+
XPathResult.UNORDERED_NODE_ITERATOR_TYPE = 4;
|
|
187
|
+
XPathResult.ORDERED_NODE_ITERATOR_TYPE = 5;
|
|
188
|
+
XPathResult.UNORDERED_SNAPSHOT_TYPE = 6;
|
|
189
|
+
XPathResult.ORDERED_SNAPSHOT_TYPE = 7;
|
|
190
|
+
XPathResult.ANY_UNORDERED_NODE_TYPE = 8;
|
|
191
|
+
XPathResult.FIRST_ORDERED_NODE_TYPE = 9;
|
|
192
|
+
|
|
193
|
+
function XPathResult
|
|
194
|
+
(
|
|
195
|
+
expression, // XPathExpression
|
|
196
|
+
contextNode, // Node
|
|
197
|
+
resolver, // XPathNSResolver
|
|
198
|
+
type // Number
|
|
199
|
+
)
|
|
200
|
+
{
|
|
201
|
+
this.initialize = function(expression, contextNode, resolver, type)
|
|
202
|
+
{
|
|
203
|
+
this._domResult = null;
|
|
204
|
+
this._expression = expression;
|
|
205
|
+
this._contextNode = contextNode;
|
|
206
|
+
this._resolver = resolver;
|
|
207
|
+
if (type)
|
|
208
|
+
{
|
|
209
|
+
this.resultType = type;
|
|
210
|
+
this._isIterator = (type == XPathResult.UNORDERED_NODE_ITERATOR_TYPE ||
|
|
211
|
+
type == XPathResult.ORDERED_NODE_ITERATOR_TYPE ||
|
|
212
|
+
type == XPathResult.ANY_TYPE);
|
|
213
|
+
this._isSnapshot = (type == XPathResult.UNORDERED_SNAPSHOT_TYPE || type == XPathResult.ORDERED_SNAPSHOT_TYPE);
|
|
214
|
+
this._isNodeSet = type > XPathResult.BOOLEAN_TYPE;
|
|
215
|
+
}
|
|
216
|
+
else
|
|
217
|
+
{
|
|
218
|
+
this.resultType = XPathResult.ANY_TYPE;
|
|
219
|
+
this._isIterator = true;
|
|
220
|
+
this._isSnapshot = false;
|
|
221
|
+
this._isNodeSet = true;
|
|
222
|
+
}
|
|
223
|
+
return this;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
this.initialize(expression, contextNode, resolver, type);
|
|
227
|
+
|
|
228
|
+
this.getInvalidIteratorState = function()
|
|
229
|
+
{
|
|
230
|
+
return documentChangeDetected() || !this._isIterator;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
this.getSnapshotLength = function()
|
|
234
|
+
// raises XPathException
|
|
235
|
+
{
|
|
236
|
+
if (!this._isSnapshot)
|
|
237
|
+
{
|
|
238
|
+
XPathException.ThrowType("Snapshot is not an expected result type");
|
|
239
|
+
}
|
|
240
|
+
activateResult(this);
|
|
241
|
+
// return Number
|
|
242
|
+
return this._domResult.length;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
// Node iterateNext()
|
|
246
|
+
this.iterateNext = function()
|
|
247
|
+
// raises XPathException, DOMException
|
|
248
|
+
{
|
|
249
|
+
if (!this._isIterator)
|
|
250
|
+
{
|
|
251
|
+
XPathException.ThrowType("Iterator is not an expected result type");
|
|
252
|
+
}
|
|
253
|
+
activateResult(this);
|
|
254
|
+
if (documentChangeDetected())
|
|
255
|
+
{
|
|
256
|
+
DOMException.ThrowInvalidState("iterateNext");
|
|
257
|
+
}
|
|
258
|
+
// return Node
|
|
259
|
+
return getNextNode(this);
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
// Node snapshotItem(Number index)
|
|
263
|
+
this.snapshotItem = function(index)
|
|
264
|
+
// raises XPathException
|
|
265
|
+
{
|
|
266
|
+
if (!this._isSnapshot)
|
|
267
|
+
{
|
|
268
|
+
XPathException.ThrowType("Snapshot is not an expected result type");
|
|
269
|
+
}
|
|
270
|
+
// return Node
|
|
271
|
+
return getItemNode(this, index);
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
this.toString = function()
|
|
275
|
+
{
|
|
276
|
+
return "[XPathResult]";
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
// returns string value of the result, if result type is STRING_TYPE
|
|
280
|
+
// otherwise throws an XPathException
|
|
281
|
+
this.getStringValue = function()
|
|
282
|
+
{
|
|
283
|
+
if (this.resultType != XPathResult.STRING_TYPE)
|
|
284
|
+
{
|
|
285
|
+
XPathException.ThrowType("The expression can not be converted to return String");
|
|
286
|
+
}
|
|
287
|
+
return getNodeText(this);
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
// returns number value of the result, if the result is NUMBER_TYPE
|
|
291
|
+
// otherwise throws an XPathException
|
|
292
|
+
this.getNumberValue = function()
|
|
293
|
+
{
|
|
294
|
+
if (this.resultType != XPathResult.NUMBER_TYPE)
|
|
295
|
+
{
|
|
296
|
+
XPathException.ThrowType("The expression can not be converted to return Number");
|
|
297
|
+
}
|
|
298
|
+
var number = parseInt(getNodeText(this));
|
|
299
|
+
if (isNaN(number))
|
|
300
|
+
{
|
|
301
|
+
XPathException.ThrowType("The result can not be converted to Number");
|
|
302
|
+
}
|
|
303
|
+
return number;
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
// returns boolean value of the result, if the result is BOOLEAN_TYPE
|
|
307
|
+
// otherwise throws an XPathException
|
|
308
|
+
this.getBooleanValue = function()
|
|
309
|
+
{
|
|
310
|
+
if (this.resultType != XPathResult.BOOLEAN_TYPE)
|
|
311
|
+
{
|
|
312
|
+
XPathException.ThrowType("The expression can not be converted to return Boolean");
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
var
|
|
316
|
+
text = getNodeText(this);
|
|
317
|
+
bool = (text ? text.toLowerCase() : null);
|
|
318
|
+
if (bool == "false" || bool == "true")
|
|
319
|
+
{
|
|
320
|
+
return bool;
|
|
321
|
+
}
|
|
322
|
+
XPathException.ThrowType("The result can not be converted to Boolean");
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
// returns single node, if the result is ANY_UNORDERED_NODE_TYPE or FIRST_ORDERED_NODE_TYPE
|
|
326
|
+
// otherwise throws an XPathException
|
|
327
|
+
this.getSingleNodeValue = function()
|
|
328
|
+
{
|
|
329
|
+
if (this.resultType != XPathResult.ANY_UNORDERED_NODE_TYPE &&
|
|
330
|
+
this.resultType != XPathResult.FIRST_ORDERED_NODE_TYPE)
|
|
331
|
+
{
|
|
332
|
+
XPathException.ThrowType("The expression can not be converted to return single Node value");
|
|
333
|
+
}
|
|
334
|
+
return getSingleNode(this);
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
function documentChangeDetected()
|
|
338
|
+
{
|
|
339
|
+
return document._XPathMsxmlDocumentHelper.documentChangeDetected();
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
function getNodeText(result)
|
|
343
|
+
{
|
|
344
|
+
activateResult(result);
|
|
345
|
+
return result._textResult;
|
|
346
|
+
// return ((node = getSingleNode(result)) ? (node.nodeType == 1 ? node.innerText : node.nodeValue) : null);
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
function findNode(result, current)
|
|
350
|
+
{
|
|
351
|
+
switch(current.nodeType)
|
|
352
|
+
{
|
|
353
|
+
case 1: // NODE_ELEMENT
|
|
354
|
+
var id = current.attributes.getNamedItem("id");
|
|
355
|
+
if (id)
|
|
356
|
+
{
|
|
357
|
+
return document.getElementById(id.value);
|
|
358
|
+
}
|
|
359
|
+
XPathException.Throw("unable to locate element in XML tree");
|
|
360
|
+
case 2: // NODE_ATTRIBUTE
|
|
361
|
+
var id = current.selectSingleNode("..").attributes.getNamedItem("id");
|
|
362
|
+
if (id)
|
|
363
|
+
{
|
|
364
|
+
var node = document.getElementById(id.text);
|
|
365
|
+
if (node)
|
|
366
|
+
{
|
|
367
|
+
return node.attributes.getNamedItem(current.nodeName);
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
XPathException.Throw("unable to locate attribute in XML tree");
|
|
371
|
+
case 3: // NODE_TEXT
|
|
372
|
+
var id = current.selectSingleNode("..").attributes.getNamedItem("id");
|
|
373
|
+
if (id)
|
|
374
|
+
{
|
|
375
|
+
var node = document.getElementById(id.value);
|
|
376
|
+
if (node)
|
|
377
|
+
{
|
|
378
|
+
for(child in node.childNodes)
|
|
379
|
+
{
|
|
380
|
+
if (child.nodeType == 3 && child.nodeValue == current.nodeValue)
|
|
381
|
+
{
|
|
382
|
+
return child;
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
XPathException.Throw("unable to locate text in XML tree");
|
|
388
|
+
}
|
|
389
|
+
XPathException.Throw("unknown node type");
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
function activateResult(result)
|
|
393
|
+
{
|
|
394
|
+
if (!result._domResult)
|
|
395
|
+
{
|
|
396
|
+
try
|
|
397
|
+
{
|
|
398
|
+
var expression = result._expression.expressionString;
|
|
399
|
+
|
|
400
|
+
// adjust expression if contextNode is not a document
|
|
401
|
+
if (result._contextNode != document && expression.indexOf("//") != 0)
|
|
402
|
+
{
|
|
403
|
+
|
|
404
|
+
expression = "//*[@id = '" + result._contextNode.id + "']" +
|
|
405
|
+
(expression.indexOf("/") == 0 ? "" : "/") + expression;
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
if (result._isNodeSet)
|
|
409
|
+
{
|
|
410
|
+
result._domResult = document._XPathMsxmlDocumentHelper.getDom().selectNodes(expression);
|
|
411
|
+
}
|
|
412
|
+
else
|
|
413
|
+
{
|
|
414
|
+
result._domResult = true;
|
|
415
|
+
result._textResult = document._XPathMsxmlDocumentHelper.getTextResult(expression);
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
}
|
|
419
|
+
catch(error)
|
|
420
|
+
{
|
|
421
|
+
alert(error.description);
|
|
422
|
+
XPathException.ThrowInvalidExpression(error.description);
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
function getSingleNode(result)
|
|
428
|
+
{
|
|
429
|
+
var node = getItemNode(result, 0);
|
|
430
|
+
result._domResult = null;
|
|
431
|
+
return node;
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
function getItemNode(result, index)
|
|
435
|
+
{
|
|
436
|
+
activateResult(result);
|
|
437
|
+
var current = result._domResult.item(index);
|
|
438
|
+
return (current ? findNode(result, current) : null);
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
function getNextNode(result)
|
|
442
|
+
{
|
|
443
|
+
var current = result._domResult.nextNode;
|
|
444
|
+
if (current)
|
|
445
|
+
{
|
|
446
|
+
return findNode(result, current);
|
|
447
|
+
}
|
|
448
|
+
result._domResult = null;
|
|
449
|
+
return null;
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
document.reloadDom = function()
|
|
454
|
+
{
|
|
455
|
+
document._XPathMsxmlDocumentHelper.reset();
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
document._XPathMsxmlDocumentHelper = new _XPathMsxmlDocumentHelper();
|
|
459
|
+
function _XPathMsxmlDocumentHelper()
|
|
460
|
+
{
|
|
461
|
+
this.getDom = function()
|
|
462
|
+
{
|
|
463
|
+
activateDom(this);
|
|
464
|
+
return this.dom;
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
this.getXml = function()
|
|
468
|
+
{
|
|
469
|
+
activateDom(this);
|
|
470
|
+
return this.dom.xml;
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
this.getTextResult = function(expression)
|
|
474
|
+
{
|
|
475
|
+
expression = expression.replace(/</g, "<").replace(/>/g, ">").replace(/"/g, "\"");
|
|
476
|
+
var xslText = "<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">" +
|
|
477
|
+
"<xsl:output method=\"text\"/><xsl:template match=\"*\"><xsl:value-of select=\"" + expression + "\"/>" +
|
|
478
|
+
"</xsl:template></xsl:stylesheet>";
|
|
479
|
+
var xsl = new ActiveXObject("Msxml2.DOMDocument");
|
|
480
|
+
xsl.loadXML(xslText);
|
|
481
|
+
try
|
|
482
|
+
{
|
|
483
|
+
var result = this.getDom().transformNode(xsl);
|
|
484
|
+
}
|
|
485
|
+
catch(error)
|
|
486
|
+
{
|
|
487
|
+
alert("Error: " + error.description);
|
|
488
|
+
}
|
|
489
|
+
return result;
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
this.reset = function()
|
|
493
|
+
{
|
|
494
|
+
this.dom = null;
|
|
495
|
+
}
|
|
496
|
+
|
|
497
|
+
function onPropertyChangeEventHandler()
|
|
498
|
+
{
|
|
499
|
+
document._propertyChangeDetected = true;
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
this.documentChangeDetected = function()
|
|
503
|
+
{
|
|
504
|
+
return (document.ignoreDocumentChanges ? false : this._currentElementCount != document.all.length || document._propertyChangeDetected);
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
function activateDom(helper)
|
|
508
|
+
{
|
|
509
|
+
if (!helper.dom)
|
|
510
|
+
{
|
|
511
|
+
var dom = new ActiveXObject("Msxml2.DOMDocument");
|
|
512
|
+
/** SELENIUM:PATCH TO ALLOW PROVIDE FULL XPATH SUPPORT */
|
|
513
|
+
dom.setProperty("SelectionLanguage", "XPath");
|
|
514
|
+
/** END SELENIUM:PATCH */
|
|
515
|
+
dom.async = false;
|
|
516
|
+
dom.resolveExternals = false;
|
|
517
|
+
loadDocument(dom, helper);
|
|
518
|
+
helper.dom = dom;
|
|
519
|
+
helper._currentElementCount = document.all.length;
|
|
520
|
+
document._propertyChangeDetected = false;
|
|
521
|
+
}
|
|
522
|
+
else
|
|
523
|
+
{
|
|
524
|
+
if (helper.documentChangeDetected())
|
|
525
|
+
{
|
|
526
|
+
var dom = helper.dom;
|
|
527
|
+
dom.load("");
|
|
528
|
+
loadDocument(dom, helper);
|
|
529
|
+
helper._currentElementCount = document.all.length;
|
|
530
|
+
document._propertyChangeDetected = false;
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
}
|
|
534
|
+
|
|
535
|
+
function loadDocument(dom, helper)
|
|
536
|
+
{
|
|
537
|
+
return loadNode(dom, dom, document.body, helper);
|
|
538
|
+
}
|
|
539
|
+
|
|
540
|
+
|
|
541
|
+
/** SELENIUM:PATCH for loadNode() - see SEL-68 */
|
|
542
|
+
function loadNode(dom, domParentNode, node, helper)
|
|
543
|
+
{
|
|
544
|
+
// Bad node scenarios
|
|
545
|
+
// 1. If the node contains a /, it's broken HTML
|
|
546
|
+
// 2. If the node doesn't have a name (typically from broken HTML), the node can't be loaded
|
|
547
|
+
// 3. Node types we can't deal with
|
|
548
|
+
//
|
|
549
|
+
// In all scenarios, we just skip the node. We won't be able to
|
|
550
|
+
// query on these nodes, but they're broken anyway.
|
|
551
|
+
if (node.nodeName.indexOf("/") > -1
|
|
552
|
+
|| node.nodeName == ""
|
|
553
|
+
|| node.nodeName == "#document"
|
|
554
|
+
|| node.nodeName == "#document-fragment"
|
|
555
|
+
|| node.nodeName == "#cdata-section"
|
|
556
|
+
|| node.nodeName == "#xml-declaration"
|
|
557
|
+
|| node.nodeName == "#whitespace"
|
|
558
|
+
|| node.nodeName == "#significat-whitespace"
|
|
559
|
+
)
|
|
560
|
+
{
|
|
561
|
+
return;
|
|
562
|
+
}
|
|
563
|
+
|
|
564
|
+
// #comment is a <!-- comment -->, which must be created with createComment()
|
|
565
|
+
if (node.nodeName == "#comment")
|
|
566
|
+
{
|
|
567
|
+
try
|
|
568
|
+
{
|
|
569
|
+
domParentNode.appendChild(dom.createComment(node.nodeValue));
|
|
570
|
+
}
|
|
571
|
+
catch (ex)
|
|
572
|
+
{
|
|
573
|
+
// it's just a comment, we don't care
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
else if (node.nodeType == 3)
|
|
577
|
+
{
|
|
578
|
+
domParentNode.appendChild(dom.createTextNode(node.nodeValue));
|
|
579
|
+
}
|
|
580
|
+
else
|
|
581
|
+
{
|
|
582
|
+
var domNode = dom.createElement(node.nodeName.toLowerCase());
|
|
583
|
+
if (!node.id)
|
|
584
|
+
{
|
|
585
|
+
node.id = node.uniqueID;
|
|
586
|
+
}
|
|
587
|
+
domParentNode.appendChild(domNode);
|
|
588
|
+
loadAttributes(dom, domNode, node);
|
|
589
|
+
var length = node.childNodes.length;
|
|
590
|
+
for(var i = 0; i < length; i ++ )
|
|
591
|
+
{
|
|
592
|
+
loadNode(dom, domNode, node.childNodes[i], helper);
|
|
593
|
+
}
|
|
594
|
+
node.attachEvent("onpropertychange", onPropertyChangeEventHandler);
|
|
595
|
+
}
|
|
596
|
+
}
|
|
597
|
+
/** END SELENIUM:PATCH */
|
|
598
|
+
|
|
599
|
+
function loadAttributes(dom, domParentNode, node)
|
|
600
|
+
{
|
|
601
|
+
for (var i = 0; i < node.attributes.length; i ++ )
|
|
602
|
+
{
|
|
603
|
+
var attribute = node.attributes[i];
|
|
604
|
+
var attributeValue = attribute.nodeValue;
|
|
605
|
+
if (attributeValue && attribute.specified)
|
|
606
|
+
{
|
|
607
|
+
var domAttribute = dom.createAttribute(attribute.nodeName);
|
|
608
|
+
domAttribute.value = attributeValue;
|
|
609
|
+
domParentNode.setAttributeNode(domAttribute);
|
|
610
|
+
}
|
|
611
|
+
}
|
|
612
|
+
}
|
|
613
|
+
|
|
614
|
+
}
|
|
615
|
+
}
|
|
616
|
+
else
|
|
617
|
+
{
|
|
618
|
+
document.reloadDom = function() {}
|
|
619
|
+
XPathResult.prototype.getStringValue = function()
|
|
620
|
+
{
|
|
621
|
+
return this.stringValue;
|
|
622
|
+
}
|
|
623
|
+
|
|
624
|
+
XPathResult.prototype.getNumberValue = function()
|
|
625
|
+
{
|
|
626
|
+
return this.numberValue;
|
|
627
|
+
}
|
|
628
|
+
|
|
629
|
+
XPathResult.prototype.getBooleanValue = function()
|
|
630
|
+
{
|
|
631
|
+
return this.booleanValue;
|
|
632
|
+
}
|
|
633
|
+
|
|
634
|
+
XPathResult.prototype.getSingleNodeValue = function()
|
|
635
|
+
{
|
|
636
|
+
return this.singleNodeValue;
|
|
637
|
+
}
|
|
638
|
+
|
|
639
|
+
XPathResult.prototype.getInvalidIteratorState = function()
|
|
640
|
+
{
|
|
641
|
+
return this.invalidIteratorState;
|
|
642
|
+
}
|
|
643
|
+
|
|
644
|
+
XPathResult.prototype.getSnapshotLength = function()
|
|
645
|
+
{
|
|
646
|
+
return this.snapshotLength;
|
|
647
|
+
}
|
|
648
|
+
|
|
649
|
+
XPathResult.prototype.getResultType = function()
|
|
650
|
+
{
|
|
651
|
+
return this.resultType;
|
|
652
|
+
}
|
|
653
|
+
}
|
|
654
|
+
/** SELENIUM:PATCH TO ALLOW USE WITH CONTAINED DOCUMENTS */
|
|
655
|
+
}
|
|
656
|
+
/** END SELENIUM:PATCH */
|
|
657
|
+
|