/**************************************************************************** ** ** Copyright (C) 2016 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the QtWebEngine module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:GPL-EXCEPT$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3 as published by the Free Software ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT ** included in the packaging of this file. Please review the following ** information to ensure the GNU General Public License requirements will ** be met: https://www.gnu.org/licenses/gpl-3.0.html. ** ** $QT_END_LICENSE$ ** ****************************************************************************/ import QtQuick 2.0 import QtTest 1.0 import QtWebEngine 1.4 TestWebEngineView { id: webEngineView width: 350 height: 480 TestCase { name: "WebEngineViewKeyboardEvents" when: windowShown function isElementChecked(element) { var elementChecked; runJavaScript("document.getElementById('" + element + "').checked", function(result) { elementChecked = result; }); tryVerify(function() { return elementChecked != undefined; }); return elementChecked; } function verifyElementChecked(element, expected) { tryVerify(function() { return expected == isElementChecked(element); }, 5000, "Element \"" + element + "\" is " + (expected ? "" : "not") + " checked"); } function getElementValue(element) { var elementValue; runJavaScript("document.getElementById('" + element + "').value", function(result) { elementValue = result; }); tryVerify(function() { return elementValue != undefined; }); return elementValue; } function compareElementValue(element, expected) { tryVerify(function() { return expected == getElementValue(element); }, 5000, "Value of element \"" + element + "\" is \"" + expected + "\""); } function test_keyboardEvents() { webEngineView.url = Qt.resolvedUrl("keyboardEvents.html"); verify(webEngineView.waitForLoadSucceeded()); var elements = [ "first_div", "second_div", "text_input", "radio1", "checkbox1", "checkbox2", "number_input", "range_input", "search_input", "submit_button", "combobox", "first_hyperlink", "second_hyperlink" ]; // Iterate over the elements of the test page with the Tab key. This tests whether any // element blocks the in-page navigation by Tab. for (var i = 0; i < elements.length; ++i) { verifyElementHasFocus(elements[i]) keyPress(Qt.Key_Tab); } // Move back to the radio buttons with the Shift+Tab key combination for (var i = 0; i < 10; ++i) keyPress(Qt.Key_Tab, Qt.ShiftModifier); verifyElementHasFocus("radio2"); // Test the Space key by checking a radio button verifyElementChecked("radio2", false); keyClick(Qt.Key_Space); verifyElementChecked("radio2", true); // Test the Left key by switching the radio button verifyElementChecked("radio1", false); keyPress(Qt.Key_Left); verifyElementHasFocus("radio1"); verifyElementChecked("radio1", true); // Test the Space key by unchecking a checkbox setFocusToElement("checkbox1"); verifyElementChecked("checkbox1", true); keyClick(Qt.Key_Space); verifyElementChecked("checkbox1", false); // Test the Up and Down keys by changing the value of a spinbox setFocusToElement("number_input"); compareElementValue("number_input", 5); keyPress(Qt.Key_Up); compareElementValue("number_input", 6); keyPress(Qt.Key_Down); compareElementValue("number_input", 5); // Test the Left, Right, Home, PageUp, End and PageDown keys by changing the value of a slider setFocusToElement("range_input"); compareElementValue("range_input", 5); keyPress(Qt.Key_Left); compareElementValue("range_input", 4); keyPress(Qt.Key_Right); compareElementValue("range_input", 5); keyPress(Qt.Key_Home); compareElementValue("range_input", 0); keyPress(Qt.Key_PageUp); compareElementValue("range_input", 1); keyPress(Qt.Key_End); compareElementValue("range_input", 10); keyPress(Qt.Key_PageDown); compareElementValue("range_input", 9); // Test the Escape key by removing the content of a search field setFocusToElement("search_input"); compareElementValue("search_input", "test"); keyPress(Qt.Key_Escape); compareElementValue("search_input", ""); // Test the alpha keys by changing the values in a combobox setFocusToElement("combobox"); compareElementValue("combobox", "a"); keyPress(Qt.Key_B); compareElementValue("combobox", "b"); // Must wait with the second key press to simulate selection of another element wait(1100); // blink::typeAheadTimeout + 0.1s keyPress(Qt.Key_C); compareElementValue("combobox", "c"); // Test the Enter key by loading a page with a hyperlink setFocusToElement("first_hyperlink"); keyPress(Qt.Key_Enter); verify(webEngineView.waitForLoadSucceeded()); } } }