/* * By default, Selenium looks for a file called "user-extensions.js", and loads and javascript * code found in that file. This file is a sample of what that file could look like. * * user-extensions.js provides a convenient location for adding extensions to Selenium, like * new actions, checks and locator-strategies. * By default, this file does not exist. Users can create this file and place their extension code * in this common location, removing the need to modify the Selenium sources, and hopefully assisting * with the upgrade process. * * You can find contributed extensions at http://wiki.openqa.org/display/SEL/Contributed%20User-Extensions */ // The following examples try to give an indication of how Selenium can be extended with javascript. // All do* methods on the Selenium prototype are added as actions. // Eg add a typeRepeated action to Selenium, which types the text twice into a text box. // The typeTwiceAndWait command will be available automatically Selenium.prototype.doTypeRepeated = function(locator, text) { // All locator-strategies are automatically handled by "findElement" var element = this.page().findElement(locator); // Create the text to type var valueToType = text + text; // Replace the element text with the new text this.page().replaceText(element, valueToType); }; // All assert* methods on the Selenium prototype are added as checks. // Eg add a assertValueRepeated check, that makes sure that the element value // consists of the supplied text repeated. // The verify version will be available automatically. Selenium.prototype.assertValueRepeated = function(locator, text) { // All locator-strategies are automatically handled by "findElement" var element = this.page().findElement(locator); // Create the text to verify var expectedValue = text + text; // Get the actual element value var actualValue = element.value; // Make sure the actual value matches the expected Assert.matches(expectedValue, actualValue); }; // All get* methods on the Selenium prototype result in // store, assert, assertNot, verify, verifyNot, waitFor, and waitForNot commands. // E.g. add a getTextLength method that returns the length of the text // of a specified element. // Will result in support for storeTextLength, assertTextLength, etc. Selenium.prototype.getTextLength = function(locator) { return this.getText(locator).length; }; // All locateElementBy* methods are added as locator-strategies. // Eg add a "valuerepeated=" locator, that finds the first element with the supplied value, repeated. // The "inDocument" is a the document you are searching. PageBot.prototype.locateElementByValueRepeated = function(text, inDocument) { // Create the text to search for var expectedValue = text + text; // Loop through all elements, looking for ones that have a value === our expected value var allElements = inDocument.getElementsByTagName("*"); for (var i = 0; i < allElements.length; i++) { var testElement = allElements[i]; if (testElement.value && testElement.value === expectedValue) { return testElement; } } return null; };