blob: 721a2dbb24b4ad39ef48dfcd15e54fbfb975f459 [file] [log] [blame]
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
/**
* @fileoverview JS utilities automatically injected by GTalk PyAuto tests.
*/
/**
* Key codes to use with KeyboardEvent.
*/
$KEYS = {
ENTER: 13,
ESC: 27
};
/**
* The first Chrome extension view with a URL containing the query.
*/
$VIEW = function(query) {
var views = chrome.extension.getViews();
for (var i = 0; i < views.length; i++) {
var url = views[i].location.href;
if (url && url.indexOf(query) >= 0) {
return views[i];
}
}
return null;
};
/**
* The body element of the given window.
*/
$BODY = function(opt_window) {
return (opt_window || window).document.body;
};
/**
* Find the ancestor of the given element with a particular tag name.
*/
$FindByTagName = function(element, tag, index) {
var tagElements = element.getElementsByTagName(tag);
if (index < tagElements.length) {
return tagElements[index];
}
return null;
};
/**
* Find the first ancestor of the given element containing the given text.
*/
$FindByText = function(baseElement, text) {
var allElements = baseElement.getElementsByTagName('*');
for (var i = 0; i < allElements.length; i++) {
var element = allElements[i];
if (element.innerText && element.innerText.indexOf(text) >= 0) {
var child = $FindByText(element, text);
return child != null ? child : element;
}
}
return null;
};
/**
* Simulate a click on a given element.
*/
$Click = function(element) {
var mouseEvent = element.ownerDocument.createEvent('MouseEvent');
mouseEvent.initMouseEvent('click', true, true, window,
1, 0, 0, 0, 0, false, false, false, false, 0, null);
element.dispatchEvent(mouseEvent);
return true;
};
/**
* Simulate typing text on a given element.
*/
$Type = function(element, text) {
var keyEvent = element.ownerDocument.createEvent('TextEvent');
keyEvent.initTextEvent('textInput', true, true, window, text);
element.dispatchEvent(keyEvent);
return true;
};
/**
* Simulate pressing a certain key on a given element.
*/
$Press = function(baseElement, keycode, opt_ctrlKey, opt_shiftKey,
opt_altKey, opt_metaKey) {
var sendKeyEvent = function(element, eventType) {
// Unfortuantely, using the typical KeyboardEvent and initKeyboardEvent
// fails in Chrome due to a webkit bug:
// https://bugs.webkit.org/show_bug.cgi?id=16735
// We employ a workaround of synthesizing a raw 'Event' suggested here:
// http://code.google.com/p/selenium/issues/detail?id=567
var keyEvent = element.ownerDocument.createEvent('Events');
keyEvent.ctrlKey = Boolean(opt_ctrlKey);
keyEvent.shiftKey = Boolean(opt_shiftKey);
keyEvent.altKey = Boolean(opt_altKey);
keyEvent.metaKey = Boolean(opt_metaKey);
keyEvent.initEvent(eventType, true, true);
keyEvent.keyCode = keycode;
element.dispatchEvent(keyEvent);
}
sendKeyEvent(baseElement, 'keydown');
sendKeyEvent(baseElement, 'keypress');
sendKeyEvent(baseElement, 'keyup');
return true;
};