| <!DOCTYPE html> |
| <html> |
| <head> |
| <meta charset="utf-8"> |
| <title>interactions_test</title> |
| <link rel="stylesheet" href="/filez/_main/third_party/js/qunit/qunit.css"> |
| <script src="/filez/_main/third_party/js/qunit/qunit.js"></script> |
| <script src="/filez/_main/third_party/js/qunit/qunit_test_runner.js"></script> |
| <script src="../../test_bootstrap.js"></script> |
| <script src="../../../atoms/inject/deps.js"></script> |
| <script> |
| goog.require('bot.Keyboard'); |
| goog.require('bot.Mouse'); |
| goog.require('bot.color'); |
| goog.require('bot.dom'); |
| goog.require('bot.inject.cache'); |
| goog.require('bot.json'); |
| goog.require('bot.response'); |
| goog.require('bot.userAgent'); |
| goog.require('goog.array'); |
| goog.require('webdriver.Key'); |
| goog.require('webdriver.atoms.inject.action'); |
| </script> |
| <style> |
| #click-box { |
| position: absolute; |
| width: 75px; |
| height: 75px; |
| top: 50px; |
| left: 50px; |
| } |
| </style> |
| </head> |
| <body> |
| <div id="qunit"></div> |
| <div id="qunit-fixture"></div> |
| <input id="focus-sync"> |
| <input id="text-input"> |
| <div id="click-box"></div> |
| <script> |
| var clickBox = document.getElementById('click-box'); |
| clickBox.style.background = 'red'; |
| clickBox.onclick = function(e) { |
| e = e || window.event; |
| clickBox.style.background = 'blue'; |
| if (e.clientX > 100) { |
| clickBox.style.background = 'cyan'; |
| } |
| if (e.clientY > 100) { |
| clickBox.style.background = 'yellow'; |
| } |
| }; |
| clickBox.oncontextmenu = function() { |
| clickBox.style.background = 'green'; |
| return false; |
| }; |
| |
| |
| function resetFocus() { |
| var sink = document.getElementById('focus-sync'); |
| focusElement(sink); |
| } |
| |
| |
| function focusElement(el) { |
| el.focus(); |
| QUnit.assert.strictEqual(bot.dom.getActiveElement(document), el); |
| } |
| |
| |
| QUnit.test('sendKeysToActiveElement', function(assert) { |
| resetFocus(); |
| |
| var input = document.getElementById('text-input'); |
| focusElement(input); |
| |
| var state = doType('foo'); |
| assert.strictEqual(input.value, 'foo'); |
| |
| resetFocus(); |
| |
| state['pressed'].push(bot.Keyboard.Keys.SHIFT); |
| state = doType('more', state); |
| assert.strictEqual(input.value, 'foo'); |
| |
| focusElement(input); |
| doType(['bar', webdriver.Key.SHIFT, 'baz'], state); |
| |
| // IE<10 does not preserve cursor position after changing focus. |
| if (bot.userAgent.IE_DOC_PRE10) { |
| assert.strictEqual(input.value, 'BARbazfoo'); |
| } else { |
| assert.strictEqual(input.value, 'fooBARbaz'); |
| } |
| |
| function doType(keys, opt_state) { |
| var res = webdriver.atoms.inject.action.sendKeysToActiveElement( |
| keys, opt_state); |
| res = bot.json.parse(res); |
| bot.response.checkResponse(res); |
| return res['value']; |
| } |
| }); |
| |
| QUnit.test('mouseClick', function(assert) { |
| // Reset box color first |
| clickBox.style.background = 'red'; |
| assert.strictEqual(getColor(), 'rgba(255, 0, 0, 1)', 'initial state is wrong'); |
| |
| var state = doClick(bot.Mouse.Button.LEFT, { |
| clientXY: {x: 60, y: 60} // Click over the clickBox. |
| }); |
| assert.strictEqual(getColor(), 'rgba(0, 0, 255, 1)'); |
| assert.ok(!!state['element']); |
| assert.strictEqual( |
| bot.inject.cache.getElement(state['element']['ELEMENT']), |
| clickBox); |
| |
| state = doClick(bot.Mouse.Button.RIGHT, state); |
| assert.strictEqual(getColor(), 'rgba(0, 128, 0, 1)'); |
| |
| state.clientXY.x += 41; |
| assert.strictEqual(state.clientXY.x, 101); |
| doClick(bot.Mouse.Button.LEFT, state); |
| assert.strictEqual(getColor(), 'rgba(0, 255, 255, 1)'); |
| |
| state.clientXY.y += 41; |
| assert.strictEqual(state.clientXY.y, 101); |
| doClick(bot.Mouse.Button.LEFT, state); |
| assert.strictEqual(getColor(), 'rgba(255, 255, 0, 1)'); |
| |
| state.clientXY = {x: 50, y: 50}; |
| doClick(bot.Mouse.Button.LEFT, state); |
| assert.strictEqual(getColor(), 'rgba(0, 0, 255, 1)'); |
| |
| function doClick(button, state) { |
| var res = webdriver.atoms.inject.action.mouseClick(button, state); |
| res = bot.json.parse(res); |
| bot.response.checkResponse(res); |
| return res['value']; |
| } |
| |
| function getColor() { |
| var value = bot.dom.getEffectiveStyle(clickBox, 'backgroundColor'); |
| return bot.color.standardizeColor('backgroundColor', value); |
| } |
| }); |
| </script> |
| </body> |
| </html> |