selenium-webdriver 3.3.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 (117) hide show
  1. package/CHANGES.md +273 -0
  2. package/NOTICE +1 -1
  3. package/README.md +28 -36
  4. package/chrome.js +221 -146
  5. package/edge.js +43 -118
  6. package/example/chrome_android.js +8 -9
  7. package/example/chrome_mobile_emulation.js +9 -10
  8. package/example/firefox_channels.js +23 -19
  9. package/example/google_search.js +3 -3
  10. package/example/google_search_test.js +39 -27
  11. package/example/headless.js +55 -0
  12. package/example/logging.js +40 -7
  13. package/firefox.js +769 -0
  14. package/http/index.js +41 -4
  15. package/http/util.js +11 -6
  16. package/ie.js +57 -98
  17. package/index.js +182 -115
  18. package/io/index.js +59 -0
  19. package/io/zip.js +214 -0
  20. package/jasmine.json +11 -0
  21. package/lib/actions.js +68 -63
  22. package/lib/atoms/get-attribute.js +9 -0
  23. package/lib/atoms/is-displayed.js +73 -78
  24. package/lib/by.js +9 -1
  25. package/lib/capabilities.js +303 -201
  26. package/lib/command.js +28 -50
  27. package/lib/error.js +113 -42
  28. package/lib/http.js +167 -135
  29. package/lib/input.js +1044 -8
  30. package/lib/promise.js +222 -3331
  31. package/lib/proxy.js +134 -39
  32. package/lib/test/bootstrap_jasmine.js +28 -0
  33. package/lib/test/data/actions/click.html +24 -0
  34. package/lib/test/data/actions/drag.html +77 -0
  35. package/lib/test/data/actions/record_click.html +21 -0
  36. package/lib/test/data/chrome/download.html +2 -0
  37. package/lib/test/data/click_tests/disabled_element.html +12 -0
  38. package/lib/test/data/content-editable.html +10 -0
  39. package/lib/test/data/firefox/webextension.xpi +0 -0
  40. package/lib/test/data/inputs.html +42 -0
  41. package/lib/test/data/key_logger.html +34 -0
  42. package/lib/test/data/nestedElements.html +10 -1
  43. package/lib/test/data/scrolling_tests/page_with_partially_hidden_element.html +14 -0
  44. package/lib/test/data/selectPage.html +12 -0
  45. package/lib/test/data/simpleTest.html +5 -0
  46. package/lib/test/data/single_text_input.html +12 -0
  47. package/lib/test/data/upload_invisible.html +45 -0
  48. package/lib/test/fileserver.js +23 -19
  49. package/lib/test/index.js +30 -244
  50. package/lib/test/resources.js +0 -1
  51. package/lib/webdriver.js +770 -939
  52. package/net/index.js +21 -25
  53. package/net/portprober.js +51 -68
  54. package/package.json +6 -4
  55. package/remote/index.js +18 -30
  56. package/safari.js +42 -129
  57. package/test/actions_test.js +173 -18
  58. package/test/builder_test.js +106 -0
  59. package/test/chrome/devtools_test.js +93 -0
  60. package/test/chrome/options_test.js +48 -154
  61. package/test/chrome/service_test.js +7 -7
  62. package/test/cookie_test.js +77 -63
  63. package/test/element_finding_test.js +206 -201
  64. package/test/execute_script_test.js +115 -114
  65. package/test/fingerprint_test.js +16 -15
  66. package/test/firefox_test.js +251 -0
  67. package/test/http/http_test.js +18 -1
  68. package/test/http/util_test.js +2 -2
  69. package/test/{io_test.js → io/io_test.js} +40 -1
  70. package/test/io/zip_test.js +127 -0
  71. package/test/lib/by_test.js +21 -0
  72. package/test/lib/error_test.js +55 -8
  73. package/test/lib/http_test.js +18 -130
  74. package/test/lib/input_test.js +1379 -0
  75. package/test/lib/promise_test.js +473 -908
  76. package/test/lib/webdriver_test.js +357 -825
  77. package/test/logging_test.js +37 -43
  78. package/test/page_loading_test.js +70 -86
  79. package/test/proxy_test.js +64 -72
  80. package/test/rect_test.js +14 -25
  81. package/test/remote_test.js +13 -32
  82. package/test/safari_test.js +7 -71
  83. package/test/stale_element_test.js +20 -23
  84. package/test/tag_name_test.js +10 -9
  85. package/test/upload_test.js +27 -35
  86. package/test/window_test.js +72 -85
  87. package/testing/index.js +386 -315
  88. package/.npmignore +0 -2
  89. package/example/async_await_test.js +0 -68
  90. package/example/google_search_generator.js +0 -50
  91. package/example/parallel_flows.js +0 -54
  92. package/firefox/binary.js +0 -344
  93. package/firefox/extension.js +0 -187
  94. package/firefox/index.js +0 -722
  95. package/firefox/profile.js +0 -430
  96. package/lib/atoms/getAttribute.js +0 -12
  97. package/lib/events.js +0 -210
  98. package/lib/firefox/webdriver.json +0 -70
  99. package/lib/firefox/webdriver.xpi +0 -0
  100. package/lib/test/data/firefox/jetpack-sample.xpi +0 -0
  101. package/lib/test/data/firefox/sample.xpi +0 -0
  102. package/lib/test/promise.js +0 -79
  103. package/opera.js +0 -405
  104. package/phantomjs.js +0 -282
  105. package/test/firefox/extension_test.js +0 -96
  106. package/test/firefox/firefox_test.js +0 -226
  107. package/test/firefox/profile_test.js +0 -185
  108. package/test/lib/events_test.js +0 -177
  109. package/test/lib/promise_aplus_test.js +0 -78
  110. package/test/lib/promise_error_test.js +0 -884
  111. package/test/lib/promise_flow_test.js +0 -2288
  112. package/test/lib/promise_generator_test.js +0 -310
  113. package/test/phantomjs/execute_phantomjs_test.js +0 -59
  114. package/test/session_test.js +0 -54
  115. package/test/testing/assert_test.js +0 -373
  116. package/test/testing/index_test.js +0 -224
  117. 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,13 +58,13 @@ 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
  }
84
65
 
85
66
  it('returns the original path if the file does not exist', function() {
86
- return io.tmpDir(dir => {
67
+ return io.tmpDir().then(dir => {
87
68
  let theFile = path.join(dir, 'not-there');
88
69
  return (new remote.FileDetector)
89
70
  .handleFile(new ExplodingDriver, theFile)
@@ -92,7 +73,7 @@ describe('FileDetector', function() {
92
73
  });
93
74
 
94
75
  it('returns the original path if it is a directory', function() {
95
- return io.tmpDir(dir => {
76
+ return io.tmpDir().then(dir => {
96
77
  return (new remote.FileDetector)
97
78
  .handleFile(new ExplodingDriver, dir)
98
79
  .then(f => assert.equal(f, dir));
@@ -100,11 +81,11 @@ describe('FileDetector', function() {
100
81
  });
101
82
 
102
83
  it('attempts to upload valid files', function() {
103
- return io.tmpFile(theFile => {
84
+ return io.tmpFile().then(theFile => {
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