selenium-webdriver 0.0.17 → 0.0.18

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.
Files changed (77) hide show
  1. data/chrome/prebuilt/Win32/Release/npchromedriver.dll +0 -0
  2. data/chrome/prebuilt/x64/Release/npchromedriver.dll +0 -0
  3. data/chrome/src/extension/background.js +64 -48
  4. data/chrome/src/extension/content_script.js +253 -132
  5. data/chrome/src/extension/manifest-nonwin.json +1 -1
  6. data/chrome/src/extension/manifest-win.json +1 -1
  7. data/chrome/src/extension/utils.js +8 -8
  8. data/chrome/src/rb/lib/selenium/webdriver/chrome.rb +9 -0
  9. data/chrome/src/rb/lib/selenium/webdriver/chrome/bridge.rb +38 -280
  10. data/chrome/src/rb/lib/selenium/webdriver/chrome/command_executor.rb +119 -117
  11. data/chrome/src/rb/lib/selenium/webdriver/chrome/launcher.rb +36 -26
  12. data/common/src/js/abstractcommandprocessor.js +9 -11
  13. data/common/src/js/command.js +159 -83
  14. data/common/src/js/core/RemoteRunner.html +2 -2
  15. data/common/src/js/core/TestRunner-splash.html +3 -3
  16. data/common/src/js/core/TestRunner.html +5 -17
  17. data/common/src/js/core/scripts/htmlutils.js +4208 -2506
  18. data/common/src/js/core/scripts/selenium-api.js +2 -2
  19. data/common/src/js/core/scripts/selenium-browserbot.js +66 -58
  20. data/common/src/js/core/scripts/selenium-version.js +1 -1
  21. data/common/src/js/localcommandprocessor.js +5 -19
  22. data/common/src/js/testcase.js +2 -0
  23. data/common/src/js/webdriver.js +63 -93
  24. data/common/src/js/webelement.js +40 -42
  25. data/common/src/rb/lib/selenium/webdriver.rb +23 -14
  26. data/common/src/rb/lib/selenium/webdriver/bridge_helper.rb +8 -35
  27. data/common/src/rb/lib/selenium/webdriver/child_process.rb +2 -0
  28. data/common/src/rb/lib/selenium/webdriver/core_ext/dir.rb +1 -0
  29. data/common/src/rb/lib/selenium/webdriver/core_ext/string.rb +5 -0
  30. data/common/src/rb/lib/selenium/webdriver/driver.rb +20 -15
  31. data/common/src/rb/lib/selenium/webdriver/driver_extensions/takes_screenshot.rb +7 -2
  32. data/common/src/rb/lib/selenium/webdriver/element.rb +11 -2
  33. data/common/src/rb/lib/selenium/webdriver/error.rb +9 -5
  34. data/common/src/rb/lib/selenium/webdriver/keys.rb +1 -2
  35. data/common/src/rb/lib/selenium/webdriver/navigation.rb +16 -0
  36. data/common/src/rb/lib/selenium/webdriver/options.rb +32 -0
  37. data/common/src/rb/lib/selenium/webdriver/platform.rb +17 -1
  38. data/firefox/prebuilt/Win32/Release/webdriver-firefox.dll +0 -0
  39. data/firefox/src/extension/components/dispatcher.js +492 -0
  40. data/firefox/src/extension/components/driver-component.js +4 -1
  41. data/firefox/src/extension/components/errorcode.js +70 -0
  42. data/firefox/src/extension/components/firefoxDriver.js +173 -154
  43. data/firefox/src/extension/components/nsCommandProcessor.js +171 -132
  44. data/firefox/src/extension/components/promptService.js +5 -5
  45. data/firefox/src/extension/components/request.js +219 -0
  46. data/firefox/src/extension/components/response.js +276 -0
  47. data/firefox/src/extension/components/session.js +281 -0
  48. data/firefox/src/extension/components/sessionstore.js +226 -0
  49. data/firefox/src/extension/components/socketListener.js +350 -100
  50. data/firefox/src/extension/components/utils.js +166 -98
  51. data/firefox/src/extension/components/webdriverserver.js +9 -5
  52. data/firefox/src/extension/components/wrappedElement.js +189 -166
  53. data/firefox/src/extension/install.rdf +1 -1
  54. data/firefox/src/rb/lib/selenium/webdriver/firefox.rb +2 -0
  55. data/firefox/src/rb/lib/selenium/webdriver/firefox/binary.rb +39 -33
  56. data/firefox/src/rb/lib/selenium/webdriver/firefox/bridge.rb +7 -421
  57. data/firefox/src/rb/lib/selenium/webdriver/firefox/extension_connection.rb +7 -64
  58. data/firefox/src/rb/lib/selenium/webdriver/firefox/launcher.rb +2 -3
  59. data/firefox/src/rb/lib/selenium/webdriver/firefox/profile.rb +54 -10
  60. data/firefox/src/rb/lib/selenium/webdriver/firefox/profiles_ini.rb +2 -0
  61. data/firefox/src/rb/lib/selenium/webdriver/firefox/util.rb +6 -0
  62. data/jobbie/prebuilt/Win32/Release/InternetExplorerDriver.dll +0 -0
  63. data/jobbie/prebuilt/x64/Release/InternetExplorerDriver.dll +0 -0
  64. data/jobbie/src/rb/lib/selenium/webdriver/ie.rb +2 -0
  65. data/jobbie/src/rb/lib/selenium/webdriver/ie/bridge.rb +38 -13
  66. data/jobbie/src/rb/lib/selenium/webdriver/ie/lib.rb +9 -2
  67. data/jobbie/src/rb/lib/selenium/webdriver/ie/util.rb +5 -0
  68. data/remote/client/src/rb/lib/selenium/webdriver/remote.rb +2 -0
  69. data/remote/client/src/rb/lib/selenium/webdriver/remote/bridge.rb +42 -38
  70. data/remote/client/src/rb/lib/selenium/webdriver/remote/commands.rb +56 -47
  71. data/remote/client/src/rb/lib/selenium/webdriver/remote/default_http_client.rb +26 -26
  72. data/remote/client/src/rb/lib/selenium/webdriver/remote/patron_http_client.rb +58 -0
  73. data/remote/client/src/rb/lib/selenium/webdriver/remote/response.rb +10 -12
  74. data/remote/client/src/rb/lib/selenium/webdriver/remote/server_error.rb +2 -17
  75. metadata +44 -23
  76. data/common/src/js/context.js +0 -58
  77. data/firefox/src/extension/components/context.js +0 -37
@@ -950,8 +950,8 @@ Selenium.prototype.doOpen = function(url, ignoreResponseCode) {
950
950
  * @param ignoreResponseCode (optional) turn off ajax head request functionality
951
951
  *
952
952
  */
953
- if (ignoreResponseCode == null) {
954
- this.browserbot.ignoreResponseCode = false;
953
+ if (ignoreResponseCode == null || ignoreResponseCode.length == 0) {
954
+ this.browserbot.ignoreResponseCode = true;
955
955
  } else if (ignoreResponseCode.toLowerCase() == "true") {
956
956
  this.browserbot.ignoreResponseCode = true;
957
957
  } else {
@@ -100,9 +100,11 @@ var BrowserBot = function(topLevelApplicationWindow) {
100
100
  };
101
101
 
102
102
  this.isNewPageLoaded = function() {
103
+ var e;
104
+
103
105
  if (this.pageLoadError) {
104
106
  LOG.error("isNewPageLoaded found an old pageLoadError");
105
- var e = this.pageLoadError;
107
+ e = this.pageLoadError;
106
108
  this.pageLoadError = null;
107
109
  throw e;
108
110
  }
@@ -114,7 +116,7 @@ var BrowserBot = function(topLevelApplicationWindow) {
114
116
  if (!((self.xhrResponseCode >= 200 && self.xhrResponseCode <= 399) || self.xhrResponseCode == 0)) {
115
117
  // TODO: for IE status like: 12002, 12007, ... provide corresponding statusText messages also.
116
118
  LOG.error("XHR failed with message " + self.xhrStatusText);
117
- var e = "XHR ERROR: URL = " + self.xhrOpenLocation + " Response_Code = " + self.xhrResponseCode + " Error_Message = " + self.xhrStatusText
119
+ e = "XHR ERROR: URL = " + self.xhrOpenLocation + " Response_Code = " + self.xhrResponseCode + " Error_Message = " + self.xhrStatusText;
118
120
  self.abortXhr = false;
119
121
  self.isXhrSent = false;
120
122
  self.isXhrDone = false;
@@ -209,13 +211,13 @@ BrowserBot.prototype.relayToRC = function(name) {
209
211
  var object = eval(name);
210
212
  var s = 'state:' + serializeObject(name, object) + "\n";
211
213
  sendToRC(s,"state=true");
212
- }
214
+ };
213
215
 
214
216
  BrowserBot.prototype.resetPopups = function() {
215
217
  this.recordedAlerts = [];
216
218
  this.recordedConfirmations = [];
217
219
  this.recordedPrompts = [];
218
- }
220
+ };
219
221
 
220
222
  BrowserBot.prototype.getNextAlert = function() {
221
223
  var t = this.recordedAlerts.shift();
@@ -257,8 +259,9 @@ BrowserBot.prototype.triggerMouseEvent = function(element, eventType, canBubble,
257
259
  var screenY = 0;
258
260
 
259
261
  canBubble = (typeof(canBubble) == undefined) ? true : canBubble;
262
+ var evt;
260
263
  if (element.fireEvent && element.ownerDocument && element.ownerDocument.createEventObject) { //IE
261
- var evt = createEventObject(element, this.controlKeyDown, this.altKeyDown, this.shiftKeyDown, this.metaKeyDown);
264
+ evt = createEventObject(element, this.controlKeyDown, this.altKeyDown, this.shiftKeyDown, this.metaKeyDown);
262
265
  evt.detail = 0;
263
266
  evt.button = button ? button : 1; // default will be the left mouse click ( http://www.javascriptkit.com/jsref/event.shtml )
264
267
  evt.relatedTarget = null;
@@ -290,7 +293,7 @@ BrowserBot.prototype.triggerMouseEvent = function(element, eventType, canBubble,
290
293
  }
291
294
  }
292
295
  else {
293
- var evt = document.createEvent('MouseEvents');
296
+ evt = document.createEvent('MouseEvents');
294
297
  if (evt.initMouseEvent)
295
298
  {
296
299
  // see http://developer.mozilla.org/en/docs/DOM:event.button and
@@ -314,7 +317,7 @@ BrowserBot.prototype.triggerMouseEvent = function(element, eventType, canBubble,
314
317
  }
315
318
  element.dispatchEvent(evt);
316
319
  }
317
- }
320
+ };
318
321
 
319
322
  BrowserBot.prototype._windowClosed = function(win) {
320
323
  var c = win.closed;
@@ -390,7 +393,7 @@ BrowserBot.prototype._selectTopWindow = function() {
390
393
  this.currentWindow = this.topWindow;
391
394
  this.topFrame = this.topWindow;
392
395
  this.isSubFrameSelected = false;
393
- }
396
+ };
394
397
 
395
398
  BrowserBot.prototype._selectWindowByWindowId = function(windowId) {
396
399
  try {
@@ -406,7 +409,7 @@ BrowserBot.prototype._selectWindowByName = function(target) {
406
409
  this.topFrame = this.currentWindow;
407
410
  this.currentWindowName = target;
408
411
  this.isSubFrameSelected = false;
409
- }
412
+ };
410
413
 
411
414
  BrowserBot.prototype._selectWindowByTitle = function(target) {
412
415
  var windowName = this.getWindowNameByTitle(target);
@@ -415,7 +418,7 @@ BrowserBot.prototype._selectWindowByTitle = function(target) {
415
418
  } else {
416
419
  this._selectWindowByName(windowName);
417
420
  }
418
- }
421
+ };
419
422
 
420
423
  BrowserBot.prototype._selectFirstNonTopWindow = function() {
421
424
  var names = this.getNonTopWindowNames();
@@ -425,9 +428,11 @@ BrowserBot.prototype._selectFirstNonTopWindow = function() {
425
428
  };
426
429
 
427
430
  BrowserBot.prototype.selectFrame = function(target) {
431
+ var frame;
432
+
428
433
  if (target.indexOf("index=") == 0) {
429
434
  target = target.substr(6);
430
- var frame = this.getCurrentWindow().frames[target];
435
+ frame = this.getCurrentWindow().frames[target];
431
436
  if (frame == null) {
432
437
  throw new SeleniumError("Not found: frames["+target+"]");
433
438
  }
@@ -444,7 +449,7 @@ BrowserBot.prototype.selectFrame = function(target) {
444
449
  this.currentWindow = this.topFrame;
445
450
  this.isSubFrameSelected = false;
446
451
  } else {
447
- var frame = this.findElement(target);
452
+ frame = this.findElement(target);
448
453
  if (frame == null) {
449
454
  throw new SeleniumError("Not found: " + target);
450
455
  }
@@ -559,7 +564,7 @@ BrowserBot.prototype.abortXhrRequest = function() {
559
564
  this.xhr.abort();
560
565
  }
561
566
  }
562
- }
567
+ };
563
568
 
564
569
  BrowserBot.prototype.onXhrStateChange = function(method) {
565
570
  LOG.info("onXhrStateChange(): xhr.readyState = " + this.xhr.readyState + " method = " + method + " time = " + new Date().getTime());
@@ -615,7 +620,7 @@ BrowserBot.prototype.checkedOpen = function(target) {
615
620
  this.xhr.open("HEAD", url, true);
616
621
  this.xhr.send("");
617
622
  this.isXhrSent = true;
618
- }
623
+ };
619
624
 
620
625
  BrowserBot.prototype.openLocation = function(target) {
621
626
  // We're moving to a new page - clear the current one
@@ -790,7 +795,7 @@ BrowserBot.prototype._isHTASubFrame = function(win) {
790
795
  if (!browserVersion.isHTA) return false;
791
796
  // DGF this is wrong! what if "win" isn't the selected window?
792
797
  return this.isSubFrameSelected;
793
- }
798
+ };
794
799
 
795
800
  BrowserBot.prototype._getFrameElement = function(win) {
796
801
  var frameElement = null;
@@ -826,7 +831,7 @@ BrowserBot.prototype._getFrameElement = function(win) {
826
831
  LOG.debug("frameElement.name="+frameElement.name);
827
832
  }
828
833
  return frameElement;
829
- }
834
+ };
830
835
 
831
836
  BrowserBot.prototype._getFrameElementByName = function(name, doc, win) {
832
837
  var frames;
@@ -849,7 +854,7 @@ BrowserBot.prototype._getFrameElementByName = function(name, doc, win) {
849
854
  // DGF weird; we only call this function when we know the doc contains the frame
850
855
  LOG.warn("_getFrameElementByName couldn't find a frame or iframe; checking every element for the name " + name);
851
856
  return BrowserBot.prototype.locateElementByName(win.name, win.parent.document);
852
- }
857
+ };
853
858
 
854
859
 
855
860
  /**
@@ -908,7 +913,7 @@ BrowserBot.prototype.pollForLoad = function(loadFunction, windowObject, original
908
913
  BrowserBot.prototype._isSamePage = function(windowObject, originalDocument, originalLocation, originalHref, marker) {
909
914
  var currentDocument = windowObject.document;
910
915
  var currentLocation = windowObject.location;
911
- var currentHref = currentLocation.href
916
+ var currentHref = currentLocation.href;
912
917
 
913
918
  var sameDoc = this._isSameDocument(originalDocument, currentDocument);
914
919
 
@@ -940,7 +945,7 @@ BrowserBot.prototype._isSamePage = function(windowObject, originalDocument, orig
940
945
  LOG.debug("_isSamePage: sameHref: " + sameHref);
941
946
  LOG.debug("_isSamePage: markedLoc: " + markedLoc);
942
947
 
943
- return sameDoc && sameLoc && sameHref && markedLoc
948
+ return sameDoc && sameLoc && sameHref && markedLoc;
944
949
  };
945
950
 
946
951
  BrowserBot.prototype._isSameDocument = function(originalDocument, currentDocument) {
@@ -1078,7 +1083,7 @@ BrowserBot.prototype.getWindowByName = function(windowName, doNotModify) {
1078
1083
  }
1079
1084
  }
1080
1085
  if (!targetWindow) {
1081
- throw new SeleniumError("Window does not exist. If this looks like a Selenium bug, make sure to read http://selenium-core.openqa.org/reference.html#openWindow for potential workarounds.");
1086
+ throw new SeleniumError("Window does not exist. If this looks like a Selenium bug, make sure to read http://seleniumhq.org/docs/04_selenese_commands.html#alerts-popups-and-multiple-windows for potential workarounds.");
1082
1087
  }
1083
1088
  if (browserVersion.isHTA) {
1084
1089
  try {
@@ -1204,11 +1209,11 @@ BrowserBot.prototype.highlight = function (element, force) {
1204
1209
  } catch (e) {} // DGF element highlighting is low-priority and possibly dangerous
1205
1210
  }
1206
1211
  return element;
1207
- }
1212
+ };
1208
1213
 
1209
1214
  BrowserBot.prototype.setShouldHighlightElement = function (shouldHighlight) {
1210
1215
  this.shouldHighlightLocatedElement = shouldHighlight;
1211
- }
1216
+ };
1212
1217
 
1213
1218
  /*****************************************************************/
1214
1219
  /* BROWSER-SPECIFIC FUNCTIONS ONLY AFTER THIS LINE */
@@ -1254,11 +1259,11 @@ BrowserBot.prototype._registerAllLocatorFunctions = function() {
1254
1259
  }
1255
1260
  return this.locateElementByIdentifier(locator, inDocument, inWindow);
1256
1261
  };
1257
- }
1262
+ };
1258
1263
 
1259
1264
  BrowserBot.prototype.getDocument = function() {
1260
1265
  return this.getCurrentWindow().document;
1261
- }
1266
+ };
1262
1267
 
1263
1268
  BrowserBot.prototype.getTitle = function() {
1264
1269
  var t = this.getDocument().title;
@@ -1266,7 +1271,7 @@ BrowserBot.prototype.getTitle = function() {
1266
1271
  t = t.trim();
1267
1272
  }
1268
1273
  return t;
1269
- }
1274
+ };
1270
1275
 
1271
1276
  BrowserBot.prototype.getCookieByName = function(cookieName, doc) {
1272
1277
  if (!doc) doc = this.getDocument();
@@ -1282,7 +1287,7 @@ BrowserBot.prototype.getCookieByName = function(cookieName, doc) {
1282
1287
  }
1283
1288
  }
1284
1289
  return null;
1285
- }
1290
+ };
1286
1291
 
1287
1292
  BrowserBot.prototype.getAllCookieNames = function(doc) {
1288
1293
  if (!doc) doc = this.getDocument();
@@ -1297,7 +1302,7 @@ BrowserBot.prototype.getAllCookieNames = function(doc) {
1297
1302
  cookieNames.push(ckName);
1298
1303
  }
1299
1304
  return cookieNames;
1300
- }
1305
+ };
1301
1306
 
1302
1307
  BrowserBot.prototype.deleteCookie = function(cookieName, domain, path, doc) {
1303
1308
  if (!doc) doc = this.getDocument();
@@ -1312,13 +1317,13 @@ BrowserBot.prototype.deleteCookie = function(cookieName, domain, path, doc) {
1312
1317
  cookie += "expires=" + new Date(expireDateInMilliseconds).toGMTString();
1313
1318
  LOG.debug("Setting cookie to: " + cookie);
1314
1319
  doc.cookie = cookie;
1315
- }
1320
+ };
1316
1321
 
1317
1322
  /** Try to delete cookie, return false if it didn't work */
1318
1323
  BrowserBot.prototype._maybeDeleteCookie = function(cookieName, domain, path, doc) {
1319
1324
  this.deleteCookie(cookieName, domain, path, doc);
1320
1325
  return (!this.getCookieByName(cookieName, doc));
1321
- }
1326
+ };
1322
1327
 
1323
1328
 
1324
1329
  BrowserBot.prototype._recursivelyDeleteCookieDomains = function(cookieName, domain, path, doc) {
@@ -1333,7 +1338,7 @@ BrowserBot.prototype._recursivelyDeleteCookieDomains = function(cookieName, doma
1333
1338
  // No more dots; try just not passing in a domain at all
1334
1339
  return this._maybeDeleteCookie(cookieName, null, path, doc);
1335
1340
  }
1336
- }
1341
+ };
1337
1342
 
1338
1343
  BrowserBot.prototype._recursivelyDeleteCookie = function(cookieName, domain, path, doc) {
1339
1344
  var slashIndex = path.lastIndexOf("/");
@@ -1346,7 +1351,7 @@ BrowserBot.prototype._recursivelyDeleteCookie = function(cookieName, domain, pat
1346
1351
  if (deleted) return true;
1347
1352
  }
1348
1353
  return this._recursivelyDeleteCookieDomains(cookieName, domain, path, doc);
1349
- }
1354
+ };
1350
1355
 
1351
1356
  BrowserBot.prototype.recursivelyDeleteCookie = function(cookieName, domain, path, win) {
1352
1357
  if (!win) win = this.getCurrentWindow();
@@ -1363,7 +1368,7 @@ BrowserBot.prototype.recursivelyDeleteCookie = function(cookieName, domain, path
1363
1368
  deleted = this._recursivelyDeleteCookieDomains(cookieName, "." + domain, null, doc);
1364
1369
  if (deleted) return;
1365
1370
  throw new SeleniumError("Couldn't delete cookie " + cookieName);
1366
- }
1371
+ };
1367
1372
 
1368
1373
  /*
1369
1374
  * Finds an element recursively in frames and nested frames
@@ -1412,7 +1417,7 @@ BrowserBot.prototype.findElement = function(locator, win) {
1412
1417
  var element = this.findElementOrNull(locator, win);
1413
1418
  if (element == null) throw new SeleniumError("Element " + locator + " not found");
1414
1419
  return element;
1415
- }
1420
+ };
1416
1421
 
1417
1422
  /**
1418
1423
  * In non-IE browsers, getElementById() does not search by name. Instead, we
@@ -1498,6 +1503,7 @@ BrowserBot.prototype.locateElementByDomTraversal = function(domTraversal, docume
1498
1503
 
1499
1504
  return element;
1500
1505
  };
1506
+
1501
1507
  BrowserBot.prototype.locateElementByDomTraversal.prefix = "dom";
1502
1508
 
1503
1509
  /**
@@ -1517,7 +1523,7 @@ BrowserBot.prototype._namespaceResolver = function(prefix) {
1517
1523
  } else {
1518
1524
  throw new Error("Unknown namespace: " + prefix + ".");
1519
1525
  }
1520
- }
1526
+ };
1521
1527
 
1522
1528
  /**
1523
1529
  * Returns the number of xpath results.
@@ -1541,6 +1547,7 @@ BrowserBot.prototype.locateElementByLinkText = function(linkText, inDocument, in
1541
1547
  }
1542
1548
  return null;
1543
1549
  };
1550
+
1544
1551
  BrowserBot.prototype.locateElementByLinkText.prefix = "link";
1545
1552
 
1546
1553
  /**
@@ -1642,7 +1649,7 @@ BrowserBot.prototype.replaceText = function(element, stringValue) {
1642
1649
  if (getTagName(element) == "body") {
1643
1650
  if (element.ownerDocument && element.ownerDocument.designMode) {
1644
1651
  var designMode = new String(element.ownerDocument.designMode).toLowerCase();
1645
- if (designMode = "on") {
1652
+ if (designMode == "on") {
1646
1653
  // this must be a rich text control!
1647
1654
  element.innerHTML = actualValue;
1648
1655
  }
@@ -1677,7 +1684,7 @@ BrowserBot.prototype.submit = function(formElement) {
1677
1684
  // pause for up to 2s while this command runs
1678
1685
  var terminationCondition = function () {
1679
1686
  return !win[marker];
1680
- }
1687
+ };
1681
1688
  return Selenium.decorateFunctionWithTimeout(terminationCondition, 2000);
1682
1689
  } else {
1683
1690
  actuallySubmit = formElement.onsubmit();
@@ -1691,7 +1698,7 @@ BrowserBot.prototype.submit = function(formElement) {
1691
1698
  } else {
1692
1699
  formElement.submit();
1693
1700
  }
1694
- }
1701
+ };
1695
1702
 
1696
1703
  BrowserBot.prototype.clickElement = function(element, clientX, clientY) {
1697
1704
  this._fireEventOnElement("click", element, clientX, clientY);
@@ -1718,7 +1725,7 @@ BrowserBot.prototype._modifyElementTarget = function(element) {
1718
1725
  }
1719
1726
  }
1720
1727
  }
1721
- }
1728
+ };
1722
1729
 
1723
1730
 
1724
1731
  BrowserBot.prototype._handleClickingImagesInsideLinks = function(targetWindow, element) {
@@ -1730,7 +1737,7 @@ BrowserBot.prototype._handleClickingImagesInsideLinks = function(targetWindow, e
1730
1737
  }
1731
1738
  itrElement = itrElement.parentNode;
1732
1739
  }
1733
- }
1740
+ };
1734
1741
 
1735
1742
  BrowserBot.prototype._getTargetWindow = function(element) {
1736
1743
  var targetWindow = element.ownerDocument.defaultView;
@@ -1738,7 +1745,7 @@ BrowserBot.prototype._getTargetWindow = function(element) {
1738
1745
  targetWindow = this._getFrameFromGlobal(element.target);
1739
1746
  }
1740
1747
  return targetWindow;
1741
- }
1748
+ };
1742
1749
 
1743
1750
  BrowserBot.prototype._getFrameFromGlobal = function(target) {
1744
1751
 
@@ -1760,7 +1767,7 @@ BrowserBot.prototype._getFrameFromGlobal = function(target) {
1760
1767
  var win = this.getWindowByName(target);
1761
1768
  if (win) return win;
1762
1769
  return this.getCurrentWindow().open('', target);
1763
- }
1770
+ };
1764
1771
 
1765
1772
 
1766
1773
  BrowserBot.prototype.bodyText = function() {
@@ -1810,7 +1817,7 @@ BrowserBot.prototype.getAllLinks = function() {
1810
1817
 
1811
1818
  function isDefined(value) {
1812
1819
  return typeof(value) != undefined;
1813
- }
1820
+ };
1814
1821
 
1815
1822
  BrowserBot.prototype.goBack = function() {
1816
1823
  this.getCurrentWindow().history.back();
@@ -1908,10 +1915,10 @@ BrowserBot.prototype.selectElements = function(filterExpr, elements, defaultFilt
1908
1915
  BrowserBot.prototype.locateElementByClass = function(locator, document) {
1909
1916
  return elementFindFirstMatchingChild(document,
1910
1917
  function(element) {
1911
- return element.className == locator
1918
+ return element.className == locator;
1912
1919
  }
1913
1920
  );
1914
- }
1921
+ };
1915
1922
 
1916
1923
  /**
1917
1924
  * Find an element by alt
@@ -1919,10 +1926,10 @@ BrowserBot.prototype.locateElementByClass = function(locator, document) {
1919
1926
  BrowserBot.prototype.locateElementByAlt = function(locator, document) {
1920
1927
  return elementFindFirstMatchingChild(document,
1921
1928
  function(element) {
1922
- return element.alt == locator
1929
+ return element.alt == locator;
1923
1930
  }
1924
1931
  );
1925
- }
1932
+ };
1926
1933
 
1927
1934
  /**
1928
1935
  * Find an element by css selector
@@ -1932,7 +1939,7 @@ BrowserBot.prototype.locateElementByCss = function(locator, document) {
1932
1939
  if (elements.length != 0)
1933
1940
  return elements[0];
1934
1941
  return null;
1935
- }
1942
+ };
1936
1943
 
1937
1944
  /**
1938
1945
  * This function is responsible for mapping a UI specifier string to an element
@@ -1964,7 +1971,7 @@ BrowserBot.prototype.locateElementByUIElement = function(locator, inDocument) {
1964
1971
  }
1965
1972
 
1966
1973
  return locatedElement;
1967
- }
1974
+ };
1968
1975
 
1969
1976
  BrowserBot.prototype.locateElementByUIElement.prefix = 'ui';
1970
1977
 
@@ -2003,12 +2010,12 @@ BrowserBot.prototype.locateElementByUIElement.is_fuzzy_match = function(node, ta
2003
2010
 
2004
2011
  function MozillaBrowserBot(frame) {
2005
2012
  BrowserBot.call(this, frame);
2006
- }
2013
+ };
2007
2014
  objectExtend(MozillaBrowserBot.prototype, BrowserBot.prototype);
2008
2015
 
2009
2016
  function KonquerorBrowserBot(frame) {
2010
2017
  BrowserBot.call(this, frame);
2011
- }
2018
+ };
2012
2019
  objectExtend(KonquerorBrowserBot.prototype, BrowserBot.prototype);
2013
2020
 
2014
2021
  KonquerorBrowserBot.prototype.setIFrameLocation = function(iframe, location) {
@@ -2027,7 +2034,7 @@ KonquerorBrowserBot.prototype.setOpenLocation = function(win, loc) {
2027
2034
  if ("about:blank" != win.location.href) {
2028
2035
  var startLoc = parseUrl(win.location.href);
2029
2036
  startLoc.hash = null;
2030
- var startUrl = reassembleLocation(startLoc);
2037
+ startUrl = reassembleLocation(startLoc);
2031
2038
  }
2032
2039
  LOG.debug("startUrl="+startUrl);
2033
2040
  LOG.debug("win.location.href="+win.location.href);
@@ -2051,7 +2058,7 @@ KonquerorBrowserBot.prototype._isSameDocument = function(originalDocument, curre
2051
2058
  // originalDocument and currentDocument are different objects
2052
2059
  // while their location are same.
2053
2060
  if (originalDocument) {
2054
- return originalDocument.location == currentDocument.location
2061
+ return originalDocument.location == currentDocument.location;
2055
2062
  } else {
2056
2063
  return originalDocument === currentDocument;
2057
2064
  }
@@ -2068,7 +2075,7 @@ SafariBrowserBot.prototype.setOpenLocation = KonquerorBrowserBot.prototype.setOp
2068
2075
 
2069
2076
  function OperaBrowserBot(frame) {
2070
2077
  BrowserBot.call(this, frame);
2071
- }
2078
+ };
2072
2079
  objectExtend(OperaBrowserBot.prototype, BrowserBot.prototype);
2073
2080
  OperaBrowserBot.prototype.setIFrameLocation = function(iframe, location) {
2074
2081
  if (iframe.src == location) {
@@ -2076,11 +2083,11 @@ OperaBrowserBot.prototype.setIFrameLocation = function(iframe, location) {
2076
2083
  } else {
2077
2084
  iframe.src = location;
2078
2085
  }
2079
- }
2086
+ };
2080
2087
 
2081
2088
  function IEBrowserBot(frame) {
2082
2089
  BrowserBot.call(this, frame);
2083
- }
2090
+ };
2084
2091
  objectExtend(IEBrowserBot.prototype, BrowserBot.prototype);
2085
2092
 
2086
2093
  IEBrowserBot.prototype._handleClosedSubFrame = function(testWindow, doNotModify) {
@@ -2165,9 +2172,10 @@ IEBrowserBot.prototype.pollForLoad = function(loadFunction, windowObject, origin
2165
2172
  LOG.debug("IEBrowserBot.pollForLoad: " + marker);
2166
2173
  if (!this.permDeniedCount[marker]) this.permDeniedCount[marker] = 0;
2167
2174
  BrowserBot.prototype.pollForLoad.call(this, loadFunction, windowObject, originalDocument, originalLocation, originalHref, marker);
2175
+ var self;
2168
2176
  if (this.pageLoadError) {
2169
2177
  if (this.pageUnloading) {
2170
- var self = this;
2178
+ self = this;
2171
2179
  LOG.debug("pollForLoad UNLOADING (" + marker + "): caught exception while firing events on unloading page: " + this.pageLoadError.message);
2172
2180
  this.reschedulePoller(loadFunction, windowObject, originalDocument, originalLocation, originalHref, marker);
2173
2181
  this.pageLoadError = null;
@@ -2193,7 +2201,7 @@ IEBrowserBot.prototype.pollForLoad = function(loadFunction, windowObject, origin
2193
2201
  }
2194
2202
  }
2195
2203
 
2196
- var self = this;
2204
+ self = this;
2197
2205
  LOG.debug("pollForLoad (" + marker + "): " + this.pageLoadError.message + " (" + this.permDeniedCount[marker] + "), waiting to see if it goes away");
2198
2206
  this.reschedulePoller(loadFunction, windowObject, originalDocument, originalLocation, originalHref, marker);
2199
2207
  this.pageLoadError = null;
@@ -2391,7 +2399,7 @@ SafariBrowserBot.prototype.refresh = function() {
2391
2399
  win.location.hash = "";
2392
2400
  var actuallyReload = function() {
2393
2401
  win.location.reload(true);
2394
- }
2402
+ };
2395
2403
  window.setTimeout(actuallyReload, 1);
2396
2404
  } else {
2397
2405
  win.location.reload(true);