2016-11-03 01:33:53 +01:00
|
|
|
// 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;
|
|
|
|
|
2016-11-16 01:59:39 +01:00
|
|
|
test.before(function*() { driver = yield env.builder().build(); });
|
|
|
|
test.after(function() { return driver.quit(); });
|
2016-11-03 01:33:53 +01:00
|
|
|
|
|
|
|
test.beforeEach(function() {
|
2016-11-16 01:59:39 +01:00
|
|
|
return driver.switchTo().defaultContent();
|
2016-11-03 01:33:53 +01:00
|
|
|
});
|
|
|
|
|
2016-11-16 01:59:39 +01:00
|
|
|
test.it('can set size of the current window', function*() {
|
|
|
|
yield driver.get(test.Pages.echoPage);
|
|
|
|
yield changeSizeBy(-20, -20);
|
2016-11-03 01:33:53 +01:00
|
|
|
});
|
|
|
|
|
2016-11-16 01:59:39 +01:00
|
|
|
test.it('can set size of the current window from frame', function*() {
|
|
|
|
yield driver.get(test.Pages.framesetPage);
|
2016-11-03 01:33:53 +01:00
|
|
|
|
2016-11-16 01:59:39 +01:00
|
|
|
var frame = yield driver.findElement({css: 'frame[name="fourth"]'});
|
|
|
|
yield driver.switchTo().frame(frame);
|
|
|
|
yield changeSizeBy(-20, -20);
|
2016-11-03 01:33:53 +01:00
|
|
|
});
|
|
|
|
|
2016-11-16 01:59:39 +01:00
|
|
|
test.it('can set size of the current window from iframe', function*() {
|
|
|
|
yield driver.get(test.Pages.iframePage);
|
2016-11-03 01:33:53 +01:00
|
|
|
|
2016-11-16 01:59:39 +01:00
|
|
|
var frame = yield driver.findElement({css: 'iframe[name="iframe1-name"]'});
|
|
|
|
yield driver.switchTo().frame(frame);
|
|
|
|
yield changeSizeBy(-20, -20);
|
2016-11-03 01:33:53 +01:00
|
|
|
});
|
|
|
|
|
2016-11-16 01:59:39 +01:00
|
|
|
test.it('can switch to a new window', function*() {
|
|
|
|
yield driver.get(test.Pages.xhtmlTestPage);
|
2016-11-03 01:33:53 +01:00
|
|
|
|
2016-11-16 01:59:39 +01:00
|
|
|
let handle = yield driver.getWindowHandle();
|
|
|
|
let originalHandles = yield driver.getAllWindowHandles();
|
2016-11-03 01:33:53 +01:00
|
|
|
|
2016-11-16 01:59:39 +01:00
|
|
|
yield driver.findElement(By.linkText("Open new window")).click();
|
|
|
|
yield driver.wait(forNewWindowToBeOpened(originalHandles), 2000);
|
|
|
|
yield assert(driver.getTitle()).equalTo("XHTML Test Page");
|
2016-11-03 01:33:53 +01:00
|
|
|
|
2016-11-16 01:59:39 +01:00
|
|
|
let newHandle = yield getNewWindowHandle(originalHandles);
|
2016-11-03 01:33:53 +01:00
|
|
|
|
2016-11-16 01:59:39 +01:00
|
|
|
yield driver.switchTo().window(newHandle);
|
|
|
|
yield assert(driver.getTitle()).equalTo("We Arrive Here");
|
2016-11-03 01:33:53 +01:00
|
|
|
});
|
|
|
|
|
2016-11-16 01:59:39 +01:00
|
|
|
test.it('can set the window position of the current window', function*() {
|
|
|
|
let position = yield driver.manage().window().getPosition();
|
|
|
|
|
|
|
|
yield driver.manage().window().setSize(640, 480);
|
|
|
|
yield 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) {
|
|
|
|
position = yield driver.manage().window().getPosition();
|
|
|
|
assert(position.x).equalTo(0);
|
|
|
|
assert(position.y).equalTo(0);
|
|
|
|
} else {
|
|
|
|
var dx = position.x + 10;
|
|
|
|
var dy = position.y + 10;
|
|
|
|
return driver.wait(forPositionToBe(dx, dy), 1000);
|
|
|
|
}
|
2016-11-03 01:33:53 +01:00
|
|
|
});
|
|
|
|
|
2016-11-16 01:59:39 +01:00
|
|
|
test.it('can set the window position from a frame', function*() {
|
|
|
|
yield driver.get(test.Pages.iframePage);
|
|
|
|
|
|
|
|
let frame = yield driver.findElement(By.name('iframe1-name'));
|
|
|
|
yield driver.switchTo().frame(frame);
|
|
|
|
|
|
|
|
let position = yield driver.manage().window().getPosition();
|
|
|
|
yield driver.manage().window().setSize(640, 480);
|
|
|
|
yield 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) {
|
|
|
|
return 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;
|
|
|
|
return driver.wait(forPositionToBe(dx, dy), 1000);
|
|
|
|
}
|
2016-11-03 01:33:53 +01:00
|
|
|
});
|
|
|
|
|
|
|
|
function changeSizeBy(dx, dy) {
|
2016-11-16 01:59:39 +01:00
|
|
|
return driver.manage().window().getSize().then(function(size) {
|
|
|
|
return driver.manage().window()
|
|
|
|
.setSize(size.width + dx, size.height + dy)
|
|
|
|
.then(_ => {
|
|
|
|
return driver.wait(
|
|
|
|
forSizeToBe(size.width + dx, size.height + dy), 1000);
|
|
|
|
});
|
2016-11-03 01:33:53 +01:00
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
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];
|
|
|
|
});
|
|
|
|
}
|
|
|
|
});
|