diff options
Diffstat (limited to 'node_modules/selenium-webdriver/test/window_test.js')
-rw-r--r-- | node_modules/selenium-webdriver/test/window_test.js | 175 |
1 files changed, 175 insertions, 0 deletions
diff --git a/node_modules/selenium-webdriver/test/window_test.js b/node_modules/selenium-webdriver/test/window_test.js new file mode 100644 index 000000000..6213d19ac --- /dev/null +++ b/node_modules/selenium-webdriver/test/window_test.js @@ -0,0 +1,175 @@ +// 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'; + +var Browser = require('..').Browser, + By = require('..').By, + assert = require('../testing/assert'), + test = require('../lib/test'); + + +test.suite(function(env) { + var driver; + + test.before(function() { driver = env.builder().build(); }); + test.after(function() { driver.quit(); }); + + test.beforeEach(function() { + driver.switchTo().defaultContent(); + }); + + test.it('can set size of the current window', function() { + driver.get(test.Pages.echoPage); + changeSizeBy(-20, -20); + }); + + test.it('can set size of the current window from frame', function() { + driver.get(test.Pages.framesetPage); + + var frame = driver.findElement({css: 'frame[name="fourth"]'}); + driver.switchTo().frame(frame); + changeSizeBy(-20, -20); + }); + + test.it('can set size of the current window from iframe', function() { + driver.get(test.Pages.iframePage); + + var frame = driver.findElement({css: 'iframe[name="iframe1-name"]'}); + driver.switchTo().frame(frame); + changeSizeBy(-20, -20); + }); + + test.it('can switch to a new window', function() { + driver.get(test.Pages.xhtmlTestPage); + + driver.getWindowHandle().then(function(handle) { + driver.getAllWindowHandles().then(function(originalHandles) { + driver.findElement(By.linkText("Open new window")).click(); + + driver.wait(forNewWindowToBeOpened(originalHandles), 2000); + + assert(driver.getTitle()).equalTo("XHTML Test Page"); + + getNewWindowHandle(originalHandles).then(function(newHandle) { + driver.switchTo().window(newHandle); + + assert(driver.getTitle()).equalTo("We Arrive Here") + }); + }); + }); + }); + + // See https://github.com/mozilla/geckodriver/issues/113 + test.ignore(env.browsers(Browser.FIREFOX)). + it('can set the window position of the current window', function() { + driver.manage().window().getPosition().then(function(position) { + driver.manage().window().setSize(640, 480); + driver.manage().window().setPosition(position.x + 10, position.y + 10); + + // For phantomjs, setPosition is a no-op and the "window" stays at (0, 0) + if (env.currentBrowser() === Browser.PHANTOM_JS) { + driver.manage().window().getPosition().then(function(position) { + assert(position.x).equalTo(0); + assert(position.y).equalTo(0); + }); + } else { + var dx = position.x + 10; + var dy = position.y + 10; + // On OSX, Safari position's the window relative to below the menubar + // at the top of the screen, which is 23 pixels tall. + if (env.currentBrowser() === Browser.SAFARI && + process.platform === 'darwin') { + dy += 23; + } + } + }); + }); + + // See https://github.com/mozilla/geckodriver/issues/113 + test.ignore(env.browsers(Browser.FIREFOX)). + it('can set the window position from a frame', function() { + driver.get(test.Pages.iframePage); + driver.switchTo().frame('iframe1-name'); + driver.manage().window().getPosition().then(function(position) { + driver.manage().window().setSize(640, 480); + driver.manage().window().setPosition(position.x + 10, position.y + 10); + + // For phantomjs, setPosition is a no-op and the "window" stays at (0, 0) + if (env.currentBrowser() === Browser.PHANTOM_JS) { + driver.manage().window().getPosition().then(function(position) { + assert(position.x).equalTo(0); + assert(position.y).equalTo(0); + }); + } else { + var dx = position.x + 10; + var dy = position.y + 10; + // On OSX, Safari position's the window relative to below the menubar + // at the top of the screen, which is 23 pixels tall. + if (env.currentBrowser() === Browser.SAFARI && + process.platform === 'darwin') { + dy += 23; + } + driver.wait(forPositionToBe(dx, dy), 1000); + } + }); + }); + + function changeSizeBy(dx, dy) { + driver.manage().window().getSize().then(function(size) { + driver.manage().window().setSize(size.width + dx, size.height + dy); + driver.wait(forSizeToBe(size.width + dx, size.height + dy), 1000); + }); + } + + function forSizeToBe(w, h) { + return function() { + return driver.manage().window().getSize().then(function(size) { + return size.width === w && size.height === h; + }); + }; + } + + function forPositionToBe(x, y) { + return function() { + return driver.manage().window().getPosition().then(function(position) { + return position.x === x && + // On OSX, the window height may be bumped down 22px for the top + // status bar. + // On Linux, Opera's window position will be off by 28px. + (position.y >= y && position.y <= (y + 28)); + }); + }; + } + + function forNewWindowToBeOpened(originalHandles) { + return function() { + return driver.getAllWindowHandles().then(function(currentHandles) { + return currentHandles.length > originalHandles.length; + }); + }; + } + + function getNewWindowHandle(originalHandles) { + // Note: this assumes there's just one new window. + return driver.getAllWindowHandles().then(function(currentHandles) { + return currentHandles.filter(function(i) { + return originalHandles.indexOf(i) < 0; + })[0]; + }); + } +}); |