selenium-webdriver 3.6.0 → 4.0.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/CHANGES.md +181 -0
  2. package/README.md +25 -27
  3. package/chrome.js +113 -127
  4. package/edge.js +42 -117
  5. package/example/chrome_android.js +8 -8
  6. package/example/chrome_mobile_emulation.js +8 -8
  7. package/example/firefox_channels.js +22 -18
  8. package/example/google_search_test.js +39 -26
  9. package/example/logging.js +39 -6
  10. package/firefox.js +769 -0
  11. package/http/index.js +41 -4
  12. package/http/util.js +11 -6
  13. package/ie.js +56 -97
  14. package/index.js +178 -114
  15. package/jasmine.json +11 -0
  16. package/lib/actions.js +68 -63
  17. package/lib/by.js +1 -1
  18. package/lib/capabilities.js +255 -192
  19. package/lib/command.js +26 -50
  20. package/lib/error.js +85 -44
  21. package/lib/http.js +133 -110
  22. package/lib/input.js +1044 -8
  23. package/lib/promise.js +222 -3323
  24. package/lib/proxy.js +134 -39
  25. package/lib/test/bootstrap_jasmine.js +28 -0
  26. package/lib/test/data/actions/click.html +24 -0
  27. package/lib/test/data/actions/drag.html +77 -0
  28. package/lib/test/data/actions/record_click.html +21 -0
  29. package/lib/test/data/chrome/download.html +2 -0
  30. package/lib/test/data/inputs.html +42 -0
  31. package/lib/test/data/selectPage.html +12 -0
  32. package/lib/test/data/simpleTest.html +5 -0
  33. package/lib/test/data/upload_invisible.html +45 -0
  34. package/lib/test/fileserver.js +23 -19
  35. package/lib/test/index.js +30 -212
  36. package/lib/test/resources.js +0 -1
  37. package/lib/webdriver.js +675 -936
  38. package/net/index.js +21 -25
  39. package/net/portprober.js +51 -68
  40. package/package.json +5 -3
  41. package/remote/index.js +5 -19
  42. package/safari.js +41 -128
  43. package/test/actions_test.js +173 -18
  44. package/test/{session_test.js → builder_test.js} +44 -37
  45. package/test/chrome/devtools_test.js +93 -0
  46. package/test/chrome/options_test.js +48 -154
  47. package/test/chrome/service_test.js +7 -7
  48. package/test/cookie_test.js +77 -63
  49. package/test/element_finding_test.js +206 -201
  50. package/test/execute_script_test.js +115 -114
  51. package/test/fingerprint_test.js +16 -15
  52. package/test/firefox_test.js +251 -0
  53. package/test/http/http_test.js +0 -1
  54. package/test/http/util_test.js +2 -2
  55. package/test/io/zip_test.js +6 -7
  56. package/test/lib/error_test.js +34 -7
  57. package/test/lib/http_test.js +8 -128
  58. package/test/lib/input_test.js +1379 -0
  59. package/test/lib/promise_test.js +473 -908
  60. package/test/lib/webdriver_test.js +296 -868
  61. package/test/logging_test.js +37 -43
  62. package/test/page_loading_test.js +71 -81
  63. package/test/proxy_test.js +64 -72
  64. package/test/rect_test.js +14 -25
  65. package/test/remote_test.js +10 -29
  66. package/test/safari_test.js +7 -71
  67. package/test/stale_element_test.js +20 -23
  68. package/test/tag_name_test.js +10 -9
  69. package/test/upload_test.js +27 -35
  70. package/test/window_test.js +72 -85
  71. package/testing/index.js +386 -314
  72. package/.npmignore +0 -2
  73. package/example/async_await_test.js +0 -69
  74. package/example/google_search_generator.js +0 -47
  75. package/example/parallel_flows.js +0 -51
  76. package/firefox/binary.js +0 -347
  77. package/firefox/extension.js +0 -224
  78. package/firefox/index.js +0 -576
  79. package/firefox/profile.js +0 -311
  80. package/lib/events.js +0 -210
  81. package/lib/test/data/firefox/jetpack-sample.xpi +0 -0
  82. package/lib/test/data/firefox/sample.xpi +0 -0
  83. package/lib/test/promise.js +0 -79
  84. package/opera.js +0 -405
  85. package/phantomjs.js +0 -282
  86. package/test/firefox/extension_test.js +0 -120
  87. package/test/firefox/firefox_test.js +0 -244
  88. package/test/firefox/profile_test.js +0 -140
  89. package/test/lib/events_test.js +0 -177
  90. package/test/lib/promise_aplus_test.js +0 -78
  91. package/test/lib/promise_error_test.js +0 -884
  92. package/test/lib/promise_flow_test.js +0 -2288
  93. package/test/lib/promise_generator_test.js +0 -310
  94. package/test/phantomjs/execute_phantomjs_test.js +0 -59
  95. package/test/testing/assert_test.js +0 -373
  96. package/test/testing/index_test.js +0 -224
  97. package/testing/assert.js +0 -378
@@ -17,16 +17,14 @@
17
17
 
18
18
  'use strict';
19
19
 
20
- var assert = require('assert'),
21
- fs = require('fs'),
22
- path = require('path');
20
+ const assert = require('assert');
21
+ const fs = require('fs');
22
+ const path = require('path');
23
23
 
24
- var promise = require('../').promise,
25
- io = require('../io'),
26
- cmd = require('../lib/command'),
27
- remote = require('../remote');
28
-
29
- const {enablePromiseManager} = require('../lib/test/promise');
24
+ const io = require('../io');
25
+ const cmd = require('../lib/command');
26
+ const remote = require('../remote');
27
+ const {CancellationError} = require('../http/util');
30
28
 
31
29
  describe('DriverService', function() {
32
30
  describe('start()', function() {
@@ -44,28 +42,11 @@ describe('DriverService', function() {
44
42
  });
45
43
 
46
44
  it('fails if child-process dies', function() {
47
- this.timeout(1000);
48
45
  return service.start(500).then(expectFailure, verifyFailure);
49
46
  });
50
47
 
51
- enablePromiseManager(function() {
52
- describe(
53
- 'failures propagate through control flow if child-process dies',
54
- function() {
55
- it('', function() {
56
- this.timeout(1000);
57
-
58
- return promise.controlFlow().execute(function() {
59
- promise.controlFlow().execute(function() {
60
- return service.start(500);
61
- });
62
- }).then(expectFailure, verifyFailure);
63
- });
64
- });
65
- });
66
-
67
48
  function verifyFailure(e) {
68
- assert.ok(!(e instanceof promise.CancellationError));
49
+ assert.ok(!(e instanceof CancellationError));
69
50
  assert.equal('Server terminated early with status 1', e.message);
70
51
  }
71
52
 
@@ -77,7 +58,7 @@ describe('DriverService', function() {
77
58
 
78
59
  describe('FileDetector', function() {
79
60
  class ExplodingDriver {
80
- schedule() {
61
+ execute() {
81
62
  throw Error('unexpected call');
82
63
  }
83
64
  }
@@ -104,7 +85,7 @@ describe('FileDetector', function() {
104
85
  return (new remote.FileDetector)
105
86
  .handleFile(
106
87
  new (class FakeDriver {
107
- schedule(command) {
88
+ execute(command) {
108
89
  assert.equal(command.getName(), cmd.Name.UPLOAD_FILE);
109
90
  assert.equal(typeof command.getParameters()['file'], 'string');
110
91
  return Promise.resolve('success!');
@@ -17,75 +17,12 @@
17
17
 
18
18
  'use strict';
19
19
 
20
- const webdriver = require('..'),
21
- proxy = require('../proxy'),
22
- safari = require('../safari'),
23
- assert = require('../testing/assert'),
24
- test = require('../lib/test');
20
+ const assert = require('assert');
25
21
 
22
+ const safari = require('../safari');
23
+ const test = require('../lib/test');
24
+ const webdriver = require('..');
26
25
 
27
- describe('safari.Options', function() {
28
- describe('fromCapabilities', function() {
29
- it('returns a new Options instance if none were defined', function() {
30
- let options = safari.Options.fromCapabilities(
31
- new webdriver.Capabilities());
32
- assert(options).instanceOf(safari.Options);
33
- });
34
-
35
- it('returns the options instance if present', function() {
36
- let options = new safari.Options().setCleanSession(true),
37
- caps = options.toCapabilities();
38
- assert(safari.Options.fromCapabilities(caps)).equalTo(options);
39
- });
40
-
41
- it('extracts supported WebDriver capabilities', function() {
42
- let proxyPrefs = proxy.direct(),
43
- logPrefs = {},
44
- caps = webdriver.Capabilities.chrome()
45
- .set(webdriver.Capability.PROXY, proxyPrefs)
46
- .set(webdriver.Capability.LOGGING_PREFS, logPrefs);
47
-
48
- let options = safari.Options.fromCapabilities(caps);
49
- assert(options.proxy_).equalTo(proxyPrefs);
50
- assert(options.logPrefs_).equalTo(logPrefs);
51
- });
52
- });
53
-
54
- describe('toCapabilities', function() {
55
- let options;
56
-
57
- before(function() {
58
- options = new safari.Options()
59
- .setCleanSession(true);
60
- });
61
-
62
- it('returns a new capabilities object if one is not provided', function() {
63
- let caps = options.toCapabilities();
64
- assert(caps).instanceOf(webdriver.Capabilities);
65
- assert(caps.get('browserName')).equalTo('safari');
66
- assert(caps.get('safari.options')).equalTo(options);
67
- });
68
-
69
- it('adds to input capabilities object', function() {
70
- let caps = webdriver.Capabilities.safari();
71
- assert(options.toCapabilities(caps)).equalTo(caps);
72
- assert(caps.get('safari.options')).equalTo(options);
73
- });
74
-
75
- it('sets generic driver capabilities', function() {
76
- let proxyPrefs = proxy.direct(),
77
- loggingPrefs = {};
78
-
79
- options
80
- .setLoggingPrefs(loggingPrefs)
81
- .setProxy(proxyPrefs);
82
-
83
- let caps = options.toCapabilities();
84
- assert(caps.get('proxy')).equalTo(proxyPrefs);
85
- assert(caps.get('loggingPrefs')).equalTo(loggingPrefs);
86
- });
87
- });
88
- });
89
26
 
90
27
  test.suite(function(env) {
91
28
  describe('safaridriver', function() {
@@ -97,12 +34,11 @@ test.suite(function(env) {
97
34
  }
98
35
  });
99
36
 
100
- it('can start safaridriver', function() {
37
+ it('can start safaridriver', async function() {
101
38
  service = new safari.ServiceBuilder().build();
102
39
 
103
- return service.start().then(function(url) {
104
- assert(url).matches(/127\.0\.0\.1/);
105
- });
40
+ let url = await service.start();
41
+ assert(/127\.0\.0\.1/.test(url), `unexpected url: ${url}`);
106
42
  });
107
43
  });
108
44
  }, {browsers: ['safari']});
@@ -17,47 +17,44 @@
17
17
 
18
18
  'use strict';
19
19
 
20
- var fail = require('assert').fail;
20
+ const assert = require('assert');
21
+ const {fail} = require('assert');
21
22
 
22
- var Browser = require('..').Browser,
23
- By = require('..').By,
24
- error = require('..').error,
25
- until = require('..').until,
26
- assert = require('../testing/assert'),
27
- test = require('../lib/test'),
28
- Pages = test.Pages;
23
+ const test = require('../lib/test');
24
+ const {Browser, By, error, until} = require('..');
25
+ const Pages = test.Pages;
29
26
 
30
27
 
31
28
  test.suite(function(env) {
32
29
  var driver;
33
- test.before(function*() { driver = yield env.builder().build(); });
34
- test.after(function() { return driver.quit(); });
30
+ before(async function() { driver = await env.builder().build(); });
31
+ after(function() { return driver.quit(); });
35
32
 
36
33
  // Element never goes stale in Safari.
37
34
  test.ignore(env.browsers(Browser.SAFARI)).
38
35
  it(
39
36
  'dynamically removing elements from the DOM trigger a ' +
40
37
  'StaleElementReferenceError',
41
- function*() {
42
- yield driver.get(Pages.javascriptPage);
38
+ async function() {
39
+ await driver.get(Pages.javascriptPage);
43
40
 
44
- var toBeDeleted = yield driver.findElement(By.id('deleted'));
45
- yield assert(toBeDeleted.getTagName()).isEqualTo('p');
41
+ var toBeDeleted = await driver.findElement(By.id('deleted'));
42
+ assert.equal(await toBeDeleted.getTagName(), 'p');
46
43
 
47
- yield driver.findElement(By.id('delete')).click();
48
- yield driver.wait(until.stalenessOf(toBeDeleted), 5000);
44
+ await driver.findElement(By.id('delete')).click();
45
+ await driver.wait(until.stalenessOf(toBeDeleted), 5000);
49
46
  });
50
47
 
51
- test.it('an element found in a different frame is stale', function*() {
52
- yield driver.get(Pages.missedJsReferencePage);
48
+ it('an element found in a different frame is stale', async function() {
49
+ await driver.get(Pages.missedJsReferencePage);
53
50
 
54
- var frame = yield driver.findElement(By.css('iframe[name="inner"]'));
55
- yield driver.switchTo().frame(frame);
51
+ var frame = await driver.findElement(By.css('iframe[name="inner"]'));
52
+ await driver.switchTo().frame(frame);
56
53
 
57
- var el = yield driver.findElement(By.id('oneline'));
58
- yield driver.switchTo().defaultContent();
54
+ var el = await driver.findElement(By.id('oneline'));
55
+ await driver.switchTo().defaultContent();
59
56
  return el.getText().then(fail, function(e) {
60
- assert(e).instanceOf(error.StaleElementReferenceError);
57
+ assert.ok(e instanceof error.StaleElementReferenceError);
61
58
  });
62
59
  });
63
60
  });
@@ -17,20 +17,21 @@
17
17
 
18
18
  'use strict';
19
19
 
20
- var By = require('..').By,
21
- assert = require('../testing/assert'),
22
- test = require('../lib/test');
20
+ const assert = require('assert');
21
+
22
+ const test = require('../lib/test');
23
+ const {By} = require('..');
23
24
 
24
25
 
25
26
  test.suite(function(env) {
26
27
  var driver;
27
- test.after(function() { return driver.quit(); });
28
+ after(function() { return driver.quit(); });
28
29
 
29
- test.it('should return lower case tag name', function*() {
30
- driver = yield env.builder().build();
31
- yield driver.get(test.Pages.formPage);
30
+ it('should return lower case tag name', async function() {
31
+ driver = await env.builder().build();
32
+ await driver.get(test.Pages.formPage);
32
33
 
33
- let el = yield driver.findElement(By.id('cheese'));
34
- return assert(el.getTagName()).equalTo('input');
34
+ let el = await driver.findElement(By.id('cheese'));
35
+ assert.equal(await el.getTagName(), 'input');
35
36
  });
36
37
  });
@@ -17,23 +17,22 @@
17
17
 
18
18
  'use strict';
19
19
 
20
- var fs = require('fs');
20
+ const assert = require('assert');
21
+ const fs = require('fs');
21
22
 
22
- var Browser = require('..').Browser,
23
- By = require('..').By,
24
- until = require('..').until,
25
- io = require('../io'),
26
- remote = require('../remote'),
27
- assert = require('../testing/assert'),
28
- test = require('../lib/test'),
29
- Pages = test.Pages;
23
+ const io = require('../io');
24
+ const remote = require('../remote');
25
+ const test = require('../lib/test');
26
+ const {Browser, By, until} = require('..');
27
+
28
+ const Pages = test.Pages;
30
29
 
31
30
  test.suite(function(env) {
32
31
  var LOREM_IPSUM_TEXT = 'lorem ipsum dolor sit amet';
33
32
  var FILE_HTML = '<!DOCTYPE html><div>' + LOREM_IPSUM_TEXT + '</div>';
34
33
 
35
34
  var fp;
36
- test.before(function() {
35
+ before(function() {
37
36
  return fp = io.tmpFile().then(function(fp) {
38
37
  fs.writeFileSync(fp, FILE_HTML);
39
38
  return fp;
@@ -41,46 +40,39 @@ test.suite(function(env) {
41
40
  })
42
41
 
43
42
  var driver;
44
- test.before(function*() {
45
- driver = yield env.builder().build();
43
+ before(async function() {
44
+ driver = await env.builder().build();
46
45
  });
47
46
 
48
- test.after(function() {
47
+ after(function() {
49
48
  if (driver) {
50
49
  return driver.quit();
51
50
  }
52
51
  });
53
52
 
54
- test.ignore(env.browsers(
55
- Browser.IPAD,
56
- Browser.IPHONE,
57
- // Uploads broken in PhantomJS 2.0.
58
- // See https://github.com/ariya/phantomjs/issues/12506
59
- Browser.PHANTOM_JS,
60
- Browser.SAFARI)).
61
- it('can upload files', function*() {
53
+ test.ignore(env.browsers(Browser.SAFARI)).
54
+ it('can upload files', async function() {
62
55
  driver.setFileDetector(new remote.FileDetector);
63
56
 
64
- yield driver.get(Pages.uploadPage);
57
+ await driver.get(Pages.uploadPage);
65
58
 
66
- var fp = yield driver.call(function() {
67
- return io.tmpFile().then(function(fp) {
68
- fs.writeFileSync(fp, FILE_HTML);
69
- return fp;
70
- });
59
+ var fp = await io.tmpFile().then(function(fp) {
60
+ fs.writeFileSync(fp, FILE_HTML);
61
+ return fp;
71
62
  });
72
63
 
73
- yield driver.findElement(By.id('upload')).sendKeys(fp);
74
- yield driver.findElement(By.id('go')).click();
64
+ await driver.findElement(By.id('upload')).sendKeys(fp);
65
+ await driver.findElement(By.id('go')).click();
75
66
 
76
67
  // Uploading files across a network may take a while, even if they're small.
77
- var label = yield driver.findElement(By.id('upload_label'));
78
- yield driver.wait(until.elementIsNotVisible(label),
68
+ var label = await driver.findElement(By.id('upload_label'));
69
+ await driver.wait(until.elementIsNotVisible(label),
79
70
  10 * 1000, 'File took longer than 10 seconds to upload!');
80
71
 
81
- var frame = yield driver.findElement(By.id('upload_target'));
82
- yield driver.switchTo().frame(frame);
83
- yield assert(driver.findElement(By.css('body')).getText())
84
- .equalTo(LOREM_IPSUM_TEXT);
72
+ var frame = await driver.findElement(By.id('upload_target'));
73
+ await driver.switchTo().frame(frame);
74
+ assert.equal(
75
+ await driver.findElement(By.css('body')).getText(),
76
+ LOREM_IPSUM_TEXT);
85
77
  });
86
78
  });
@@ -17,128 +17,115 @@
17
17
 
18
18
  'use strict';
19
19
 
20
- var Browser = require('..').Browser,
21
- By = require('..').By,
22
- assert = require('../testing/assert'),
23
- test = require('../lib/test');
20
+ const assert = require('assert');
21
+
22
+ const test = require('../lib/test');
23
+ const {Browser, By} = require('..');
24
24
 
25
25
 
26
26
  test.suite(function(env) {
27
27
  var driver;
28
28
 
29
- test.before(function*() { driver = yield env.builder().build(); });
30
- test.after(function() { return driver.quit(); });
29
+ before(async function() { driver = await env.builder().build(); });
30
+ after(function() { return driver.quit(); });
31
31
 
32
- test.beforeEach(function() {
32
+ beforeEach(function() {
33
33
  return driver.switchTo().defaultContent();
34
34
  });
35
35
 
36
- test.it('can set size of the current window', function*() {
37
- yield driver.get(test.Pages.echoPage);
38
- yield changeSizeBy(-20, -20);
36
+ it('can set size of the current window', async function() {
37
+ await driver.get(test.Pages.echoPage);
38
+ await changeSizeBy(-20, -20);
39
39
  });
40
40
 
41
- test.it('can set size of the current window from frame', function*() {
42
- yield driver.get(test.Pages.framesetPage);
41
+ it('can set size of the current window from frame', async function() {
42
+ await driver.get(test.Pages.framesetPage);
43
43
 
44
- var frame = yield driver.findElement({css: 'frame[name="fourth"]'});
45
- yield driver.switchTo().frame(frame);
46
- yield changeSizeBy(-20, -20);
44
+ var frame = await driver.findElement({css: 'frame[name="fourth"]'});
45
+ await driver.switchTo().frame(frame);
46
+ await changeSizeBy(-20, -20);
47
47
  });
48
48
 
49
- test.it('can set size of the current window from iframe', function*() {
50
- yield driver.get(test.Pages.iframePage);
49
+ it('can set size of the current window from iframe', async function() {
50
+ await driver.get(test.Pages.iframePage);
51
51
 
52
- var frame = yield driver.findElement({css: 'iframe[name="iframe1-name"]'});
53
- yield driver.switchTo().frame(frame);
54
- yield changeSizeBy(-20, -20);
52
+ var frame = await driver.findElement({css: 'iframe[name="iframe1-name"]'});
53
+ await driver.switchTo().frame(frame);
54
+ await changeSizeBy(-20, -20);
55
55
  });
56
56
 
57
- test.it('can switch to a new window', function*() {
58
- yield driver.get(test.Pages.xhtmlTestPage);
57
+ it('can switch to a new window', async function() {
58
+ await driver.get(test.Pages.xhtmlTestPage);
59
59
 
60
- let handle = yield driver.getWindowHandle();
61
- let originalHandles = yield driver.getAllWindowHandles();
60
+ let handle = await driver.getWindowHandle();
61
+ let originalHandles = await driver.getAllWindowHandles();
62
62
 
63
- yield driver.findElement(By.linkText("Open new window")).click();
64
- yield driver.wait(forNewWindowToBeOpened(originalHandles), 2000);
65
- yield assert(driver.getTitle()).equalTo("XHTML Test Page");
63
+ await driver.findElement(By.linkText("Open new window")).click();
64
+ await driver.wait(forNewWindowToBeOpened(originalHandles), 2000);
65
+ assert.equal(await driver.getTitle(), "XHTML Test Page");
66
66
 
67
- let newHandle = yield getNewWindowHandle(originalHandles);
67
+ let newHandle = await getNewWindowHandle(originalHandles);
68
68
 
69
- yield driver.switchTo().window(newHandle);
70
- yield assert(driver.getTitle()).equalTo("We Arrive Here");
69
+ await driver.switchTo().window(newHandle);
70
+ assert.equal(await driver.getTitle(), "We Arrive Here");
71
71
  });
72
72
 
73
- test.it('can set the window position of the current window', function*() {
74
- let position = yield driver.manage().window().getPosition();
75
-
76
- yield driver.manage().window().setSize(640, 480);
77
- yield driver.manage().window().setPosition(position.x + 10, position.y + 10);
78
-
79
- // For phantomjs, setPosition is a no-op and the "window" stays at (0, 0)
80
- if (env.currentBrowser() === Browser.PHANTOM_JS) {
81
- position = yield driver.manage().window().getPosition();
82
- assert(position.x).equalTo(0);
83
- assert(position.y).equalTo(0);
84
- } else {
85
- var dx = position.x + 10;
86
- var dy = position.y + 10;
87
- return driver.wait(forPositionToBe(dx, dy), 1000);
88
- }
73
+ it('can set the window position of the current window', async function() {
74
+ let {x, y} = await driver.manage().window().getRect();
75
+ let newX = x + 10;
76
+ let newY = y + 10;
77
+
78
+ await driver.manage().window().setRect({
79
+ x: newX,
80
+ y: newY,
81
+ width: 640,
82
+ height: 480
83
+ });
84
+
85
+ return driver.wait(forPositionToBe(newX, newY), 1000);
89
86
  });
90
87
 
91
- test.it('can set the window position from a frame', function*() {
92
- yield driver.get(test.Pages.iframePage);
88
+ it('can set the window position from a frame', async function() {
89
+ await driver.get(test.Pages.iframePage);
93
90
 
94
- let frame = yield driver.findElement(By.name('iframe1-name'));
95
- yield driver.switchTo().frame(frame);
91
+ let frame = await driver.findElement(By.name('iframe1-name'));
92
+ await driver.switchTo().frame(frame);
96
93
 
97
- let position = yield driver.manage().window().getPosition();
98
- yield driver.manage().window().setSize(640, 480);
99
- yield driver.manage().window().setPosition(position.x + 10, position.y + 10);
94
+ let {x, y} = await driver.manage().window().getRect();
95
+ x += 10;
96
+ y += 10;
100
97
 
101
- // For phantomjs, setPosition is a no-op and the "window" stays at (0, 0)
102
- if (env.currentBrowser() === Browser.PHANTOM_JS) {
103
- return driver.manage().window().getPosition().then(function(position) {
104
- assert(position.x).equalTo(0);
105
- assert(position.y).equalTo(0);
106
- });
107
- } else {
108
- var dx = position.x + 10;
109
- var dy = position.y + 10;
110
- return driver.wait(forPositionToBe(dx, dy), 1000);
111
- }
98
+ await driver.manage().window().setRect({width: 640, height: 480, x, y});
99
+ return driver.wait(forPositionToBe(x, y), 1000);
112
100
  });
113
101
 
114
- function changeSizeBy(dx, dy) {
115
- return driver.manage().window().getSize().then(function(size) {
116
- return driver.manage().window()
117
- .setSize(size.width + dx, size.height + dy)
118
- .then(_ => {
119
- return driver.wait(
120
- forSizeToBe(size.width + dx, size.height + dy), 1000);
121
- });
122
- });
102
+ async function changeSizeBy(dx, dy) {
103
+ let {width, height} = await driver.manage().window().getRect();
104
+ width += dx;
105
+ height += dy;
106
+
107
+ let rect = await driver.manage().window().setRect({width, height});
108
+ if (rect.width === width && rect.height === height) {
109
+ return;
110
+ }
111
+ return driver.wait(forSizeToBe(width, height), 1000);
123
112
  }
124
113
 
125
114
  function forSizeToBe(w, h) {
126
- return function() {
127
- return driver.manage().window().getSize().then(function(size) {
128
- return size.width === w && size.height === h;
129
- });
115
+ return async function() {
116
+ let {width, height} = await driver.manage().window().getRect();
117
+ return width === w && height === h;
130
118
  };
131
119
  }
132
120
 
133
121
  function forPositionToBe(x, y) {
134
- return function() {
135
- return driver.manage().window().getPosition().then(function(position) {
136
- return position.x === x &&
137
- // On OSX, the window height may be bumped down 22px for the top
138
- // status bar.
139
- // On Linux, Opera's window position will be off by 28px.
140
- (position.y >= y && position.y <= (y + 28));
141
- });
122
+ return async function() {
123
+ let position = await driver.manage().window().getRect();
124
+ return position.x === x &&
125
+ // On OSX, the window height may be bumped down 22px for the top
126
+ // status bar.
127
+ // On Linux, Opera's window position will be off by 28px.
128
+ (position.y >= y && position.y <= (y + 28));
142
129
  };
143
130
  }
144
131