172 lines
5.0 KiB
JavaScript
172 lines
5.0 KiB
JavaScript
// Licensed to the Software Freedom Conservancy (SFC) under one
|
|
// or more contributor license agreements. See the NOTICE file
|
|
// distributed with this work for additional information
|
|
// regarding copyright ownership. The SFC licenses this file
|
|
// to you under the Apache License, Version 2.0 (the
|
|
// "License"); you may not use this file except in compliance
|
|
// with the License. You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing,
|
|
// software distributed under the License is distributed on an
|
|
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
// KIND, either express or implied. See the License for the
|
|
// specific language governing permissions and limitations
|
|
// under the License.
|
|
|
|
'use strict';
|
|
|
|
/**
|
|
* @fileoverview Defines types related to user input with the WebDriver API.
|
|
*/
|
|
|
|
|
|
/**
|
|
* Enumeration of the buttons used in the advanced interactions API.
|
|
* @enum {number}
|
|
*/
|
|
const Button = {
|
|
LEFT: 0,
|
|
MIDDLE: 1,
|
|
RIGHT: 2
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
* Representations of pressable keys that aren't text. These are stored in
|
|
* the Unicode PUA (Private Use Area) code points, 0xE000-0xF8FF. Refer to
|
|
* http://www.google.com.au/search?&q=unicode+pua&btnG=Search
|
|
*
|
|
* @enum {string}
|
|
*/
|
|
const Key = {
|
|
NULL: '\uE000',
|
|
CANCEL: '\uE001', // ^break
|
|
HELP: '\uE002',
|
|
BACK_SPACE: '\uE003',
|
|
TAB: '\uE004',
|
|
CLEAR: '\uE005',
|
|
RETURN: '\uE006',
|
|
ENTER: '\uE007',
|
|
SHIFT: '\uE008',
|
|
CONTROL: '\uE009',
|
|
ALT: '\uE00A',
|
|
PAUSE: '\uE00B',
|
|
ESCAPE: '\uE00C',
|
|
SPACE: '\uE00D',
|
|
PAGE_UP: '\uE00E',
|
|
PAGE_DOWN: '\uE00F',
|
|
END: '\uE010',
|
|
HOME: '\uE011',
|
|
ARROW_LEFT: '\uE012',
|
|
LEFT: '\uE012',
|
|
ARROW_UP: '\uE013',
|
|
UP: '\uE013',
|
|
ARROW_RIGHT: '\uE014',
|
|
RIGHT: '\uE014',
|
|
ARROW_DOWN: '\uE015',
|
|
DOWN: '\uE015',
|
|
INSERT: '\uE016',
|
|
DELETE: '\uE017',
|
|
SEMICOLON: '\uE018',
|
|
EQUALS: '\uE019',
|
|
|
|
NUMPAD0: '\uE01A', // number pad keys
|
|
NUMPAD1: '\uE01B',
|
|
NUMPAD2: '\uE01C',
|
|
NUMPAD3: '\uE01D',
|
|
NUMPAD4: '\uE01E',
|
|
NUMPAD5: '\uE01F',
|
|
NUMPAD6: '\uE020',
|
|
NUMPAD7: '\uE021',
|
|
NUMPAD8: '\uE022',
|
|
NUMPAD9: '\uE023',
|
|
MULTIPLY: '\uE024',
|
|
ADD: '\uE025',
|
|
SEPARATOR: '\uE026',
|
|
SUBTRACT: '\uE027',
|
|
DECIMAL: '\uE028',
|
|
DIVIDE: '\uE029',
|
|
|
|
F1: '\uE031', // function keys
|
|
F2: '\uE032',
|
|
F3: '\uE033',
|
|
F4: '\uE034',
|
|
F5: '\uE035',
|
|
F6: '\uE036',
|
|
F7: '\uE037',
|
|
F8: '\uE038',
|
|
F9: '\uE039',
|
|
F10: '\uE03A',
|
|
F11: '\uE03B',
|
|
F12: '\uE03C',
|
|
|
|
COMMAND: '\uE03D', // Apple command key
|
|
META: '\uE03D' // alias for Windows key
|
|
};
|
|
|
|
|
|
/**
|
|
* Simulate pressing many keys at once in a "chord". Takes a sequence of
|
|
* {@linkplain Key keys} or strings, appends each of the values to a string,
|
|
* adds the chord termination key ({@link Key.NULL}) and returns the resulting
|
|
* string.
|
|
*
|
|
* Note: when the low-level webdriver key handlers see Keys.NULL, active
|
|
* modifier keys (CTRL/ALT/SHIFT/etc) release via a keyup event.
|
|
*
|
|
* @param {...string} var_args The key sequence to concatenate.
|
|
* @return {string} The null-terminated key sequence.
|
|
*/
|
|
Key.chord = function(var_args) {
|
|
return Array.prototype.slice.call(arguments, 0).join('') + Key.NULL;
|
|
};
|
|
|
|
|
|
/**
|
|
* Used with {@link ./webelement.WebElement#sendKeys WebElement#sendKeys} on
|
|
* file input elements (`<input type="file">`) to detect when the entered key
|
|
* sequence defines the path to a file.
|
|
*
|
|
* By default, {@linkplain ./webelement.WebElement WebElement's} will enter all
|
|
* key sequences exactly as entered. You may set a
|
|
* {@linkplain ./webdriver.WebDriver#setFileDetector file detector} on the
|
|
* parent WebDriver instance to define custom behavior for handling file
|
|
* elements. Of particular note is the
|
|
* {@link selenium-webdriver/remote.FileDetector}, which should be used when
|
|
* running against a remote
|
|
* [Selenium Server](http://docs.seleniumhq.org/download/).
|
|
*/
|
|
class FileDetector {
|
|
|
|
/**
|
|
* Handles the file specified by the given path, preparing it for use with
|
|
* the current browser. If the path does not refer to a valid file, it will
|
|
* be returned unchanged, otherwisee a path suitable for use with the current
|
|
* browser will be returned.
|
|
*
|
|
* This default implementation is a no-op. Subtypes may override this function
|
|
* for custom tailored file handling.
|
|
*
|
|
* @param {!./webdriver.WebDriver} driver The driver for the current browser.
|
|
* @param {string} path The path to process.
|
|
* @return {!Promise<string>} A promise for the processed file path.
|
|
* @package
|
|
*/
|
|
handleFile(driver, path) {
|
|
return Promise.resolve(path);
|
|
}
|
|
}
|
|
|
|
|
|
// PUBLIC API
|
|
|
|
|
|
module.exports = {
|
|
Button: Button,
|
|
Key: Key,
|
|
FileDetector: FileDetector
|
|
};
|