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,64 +17,58 @@
17
17
 
18
18
  'use strict';
19
19
 
20
- var Browser = require('..').Browser,
21
- By = require('..').By,
22
- logging = require('..').logging,
23
- assert = require('../testing/assert'),
24
- test = require('../lib/test');
20
+ const assert = require('assert');
21
+
22
+ const test = require('../lib/test');
23
+ const {Browser, By, logging} = require('..');
25
24
 
26
25
  test.suite(function(env) {
27
- // Logging API has numerous issues with PhantomJS:
28
- // - does not support adjusting log levels for type "browser".
29
- // - does not return proper log level for "browser" messages.
30
- // - does not delete logs after retrieval
31
26
  // Logging API is not supported in IE.
32
27
  // Logging API not supported in Marionette.
33
28
  // Tests depend on opening data URLs, which is broken in Safari (issue 7586)
34
- test.ignore(env.browsers(
35
- Browser.PHANTOM_JS, Browser.IE, Browser.SAFARI, Browser.FIREFOX)).
29
+ test.ignore(env.browsers(Browser.IE, Browser.SAFARI, Browser.FIREFOX)).
36
30
  describe('logging', function() {
37
31
  var driver;
38
32
 
39
- test.beforeEach(function() {
33
+ beforeEach(function() {
40
34
  driver = null;
41
35
  });
42
36
 
43
- test.afterEach(function*() {
37
+ afterEach(async function() {
44
38
  if (driver) {
45
39
  return driver.quit();
46
40
  }
47
41
  });
48
42
 
49
- test.it('can be disabled', function*() {
43
+ it('can be disabled', async function() {
50
44
  var prefs = new logging.Preferences();
51
45
  prefs.setLevel(logging.Type.BROWSER, logging.Level.OFF);
52
46
 
53
- driver = yield env.builder()
47
+ driver = await env.builder()
54
48
  .setLoggingPrefs(prefs)
55
49
  .build();
56
50
 
57
- yield driver.get(dataUrl(
51
+ await driver.get(dataUrl(
58
52
  '<!DOCTYPE html><script>',
59
53
  'console.info("hello");',
60
54
  'console.warn("this is a warning");',
61
55
  'console.error("and this is an error");',
62
56
  '</script>'));
63
57
  return driver.manage().logs().get(logging.Type.BROWSER)
64
- .then(entries => assert(entries.length).equalTo(0));
58
+ .then(entries => assert.equal(entries.length, 0));
65
59
  });
66
60
 
67
61
  // Firefox does not capture JS error console log messages.
68
62
  test.ignore(env.browsers(Browser.FIREFOX, 'legacy-firefox')).
69
- it('can be turned down', function*() {
63
+ it('can be turned down', async function() {
70
64
  var prefs = new logging.Preferences();
71
65
  prefs.setLevel(logging.Type.BROWSER, logging.Level.SEVERE);
72
66
 
73
- driver = yield env.builder()
67
+ driver = await env.builder()
74
68
  .setLoggingPrefs(prefs)
75
69
  .build();
76
70
 
77
- yield driver.get(dataUrl(
71
+ await driver.get(dataUrl(
78
72
  '<!DOCTYPE html><script>',
79
73
  'console.info("hello");',
80
74
  'console.warn("this is a warning");',
@@ -82,23 +76,23 @@ test.suite(function(env) {
82
76
  '</script>'));
83
77
  return driver.manage().logs().get(logging.Type.BROWSER)
84
78
  .then(function(entries) {
85
- assert(entries.length).equalTo(1);
86
- assert(entries[0].level.name).equalTo('SEVERE');
87
- assert(entries[0].message).matches(/.*\"?and this is an error\"?/);
79
+ assert.equal(entries.length, 1);
80
+ assert.equal(entries[0].level.name, 'SEVERE');
81
+ assert.ok(/.*\"?and this is an error\"?/.test(entries[0].message));
88
82
  });
89
83
  });
90
84
 
91
85
  // Firefox does not capture JS error console log messages.
92
86
  test.ignore(env.browsers(Browser.FIREFOX, 'legacy-firefox')).
93
- it('can be made verbose', function*() {
87
+ it('can be made verbose', async function() {
94
88
  var prefs = new logging.Preferences();
95
89
  prefs.setLevel(logging.Type.BROWSER, logging.Level.DEBUG);
96
90
 
97
- driver = yield env.builder()
91
+ driver = await env.builder()
98
92
  .setLoggingPrefs(prefs)
99
93
  .build();
100
94
 
101
- yield driver.get(dataUrl(
95
+ await driver.get(dataUrl(
102
96
  '<!DOCTYPE html><script>',
103
97
  'console.debug("hello");',
104
98
  'console.warn("this is a warning");',
@@ -106,57 +100,57 @@ test.suite(function(env) {
106
100
  '</script>'));
107
101
  return driver.manage().logs().get(logging.Type.BROWSER)
108
102
  .then(function(entries) {
109
- assert(entries.length).equalTo(3);
110
- assert(entries[0].level.name).equalTo('DEBUG');
111
- assert(entries[0].message).matches(/.*\"?hello\"?/);
103
+ assert.equal(entries.length, 3);
104
+ assert.equal(entries[0].level.name, 'DEBUG');
105
+ assert.ok(/.*\"?hello\"?/.test(entries[0].message));
112
106
 
113
- assert(entries[1].level.name).equalTo('WARNING');
114
- assert(entries[1].message).matches(/.*\"?this is a warning\"?/);
107
+ assert.equal(entries[1].level.name, 'WARNING');
108
+ assert.ok(/.*\"?this is a warning\"?/.test(entries[1].message));
115
109
 
116
- assert(entries[2].level.name).equalTo('SEVERE');
117
- assert(entries[2].message).matches(/.*\"?and this is an error\"?/);
110
+ assert.equal(entries[2].level.name, 'SEVERE');
111
+ assert.ok(/.*\"?and this is an error\"?/.test(entries[2].message));
118
112
  });
119
113
  });
120
114
 
121
115
  // Firefox does not capture JS error console log messages.
122
116
  test.ignore(env.browsers(Browser.FIREFOX, 'legacy-firefox')).
123
- it('clears records after retrieval', function*() {
117
+ it('clears records after retrieval', async function() {
124
118
  var prefs = new logging.Preferences();
125
119
  prefs.setLevel(logging.Type.BROWSER, logging.Level.DEBUG);
126
120
 
127
- driver = yield env.builder()
121
+ driver = await env.builder()
128
122
  .setLoggingPrefs(prefs)
129
123
  .build();
130
124
 
131
- yield driver.get(dataUrl(
125
+ await driver.get(dataUrl(
132
126
  '<!DOCTYPE html><script>',
133
127
  'console.debug("hello");',
134
128
  'console.warn("this is a warning");',
135
129
  'console.error("and this is an error");',
136
130
  '</script>'));
137
- yield driver.manage().logs().get(logging.Type.BROWSER)
138
- .then(entries => assert(entries.length).equalTo(3));
131
+ await driver.manage().logs().get(logging.Type.BROWSER)
132
+ .then(entries => assert.equal(entries.length, 3));
139
133
  return driver.manage().logs().get(logging.Type.BROWSER)
140
- .then(entries => assert(entries.length).equalTo(0));
134
+ .then(entries => assert.equal(entries.length, 0));
141
135
  });
142
136
 
143
- test.it('does not mix log types', function*() {
137
+ it('does not mix log types', async function() {
144
138
  var prefs = new logging.Preferences();
145
139
  prefs.setLevel(logging.Type.BROWSER, logging.Level.DEBUG);
146
140
  prefs.setLevel(logging.Type.DRIVER, logging.Level.SEVERE);
147
141
 
148
- driver = yield env.builder()
142
+ driver = await env.builder()
149
143
  .setLoggingPrefs(prefs)
150
144
  .build();
151
145
 
152
- yield driver.get(dataUrl(
146
+ await driver.get(dataUrl(
153
147
  '<!DOCTYPE html><script>',
154
148
  'console.debug("hello");',
155
149
  'console.warn("this is a warning");',
156
150
  'console.error("and this is an error");',
157
151
  '</script>'));
158
152
  return driver.manage().logs().get(logging.Type.DRIVER)
159
- .then(entries => assert(entries.length).equalTo(0));
153
+ .then(entries => assert.equal(entries.length, 0));
160
154
  });
161
155
  });
162
156
 
@@ -17,147 +17,131 @@
17
17
 
18
18
  'use strict';
19
19
 
20
- var Browser = require('..').Browser,
21
- By = require('..').By,
22
- until = require('..').until,
23
- assert = require('../testing/assert'),
24
- error = require('../lib/error'),
25
- test = require('../lib/test'),
26
- Pages = test.Pages;
20
+ const assert = require('assert');
21
+
22
+ const error = require('../lib/error');
23
+ const test = require('../lib/test');
24
+ const {Browser, By, until} = require('..');
25
+
26
+ const Pages = test.Pages;
27
27
 
28
28
 
29
29
  test.suite(function(env) {
30
- var browsers = env.browsers;
30
+ var browsers = (...args) => env.browsers(...args);
31
31
 
32
32
  var driver;
33
- test.before(function*() {
34
- driver = yield env.builder().build();
33
+ before(async function() {
34
+ driver = await env.builder().build();
35
35
  });
36
36
 
37
- test.beforeEach(function*() {
37
+ beforeEach(async function() {
38
38
  if (!driver) {
39
- driver = yield env.builder().build();
39
+ driver = await env.builder().build();
40
40
  }
41
41
  });
42
42
 
43
- test.after(function() {
43
+ after(function() {
44
44
  if (driver) {
45
45
  return driver.quit();
46
46
  }
47
47
  });
48
48
 
49
- test.it('should wait for document to be loaded', function*() {
50
- yield driver.get(Pages.simpleTestPage);
51
- return assert(driver.getTitle()).equalTo('Hello WebDriver');
49
+ it('should wait for document to be loaded', async function() {
50
+ await driver.get(Pages.simpleTestPage);
51
+ assert.equal(await driver.getTitle(), 'Hello WebDriver');
52
52
  });
53
53
 
54
- test.it('should follow redirects sent in the http response headers',
55
- function*() {
56
- yield driver.get(Pages.redirectPage);
57
- return assert(driver.getTitle()).equalTo('We Arrive Here');
54
+ it('should follow redirects sent in the http response headers',
55
+ async function() {
56
+ await driver.get(Pages.redirectPage);
57
+ assert.equal(await driver.getTitle(), 'We Arrive Here');
58
58
  });
59
59
 
60
- test.ignore(browsers(Browser.SAFARI)).
61
- it('should follow meta redirects', function*() {
62
- yield driver.get(Pages.metaRedirectPage);
63
- return assert(driver.getTitle()).equalTo('We Arrive Here');
60
+ it('should be able to get a fragment on the current page', async function() {
61
+ await driver.get(Pages.xhtmlTestPage);
62
+ await driver.get(Pages.xhtmlTestPage + '#text');
63
+ await driver.findElement(By.id('id1'));
64
64
  });
65
65
 
66
- // Skip Firefox; see https://bugzilla.mozilla.org/show_bug.cgi?id=1280300
67
- test.ignore(browsers(Browser.FIREFOX)).
68
- it('should be able to get a fragment on the current page', function*() {
69
- yield driver.get(Pages.xhtmlTestPage);
70
- yield driver.get(Pages.xhtmlTestPage + '#text');
71
- yield driver.findElement(By.id('id1'));
72
- });
66
+ it('should wait for all frames to load in a frameset', async function() {
67
+ await driver.get(Pages.framesetPage);
68
+ await driver.switchTo().frame(0);
73
69
 
74
- test.ignore(browsers(Browser.IPAD, Browser.IPHONE)).
75
- it('should wait for all frames to load in a frameset', function*() {
76
- yield driver.get(Pages.framesetPage);
77
- yield driver.switchTo().frame(0);
70
+ let txt = await driver.findElement(By.css('span#pageNumber')).getText();
71
+ assert.equal(txt.trim(), '1');
78
72
 
79
- let txt = yield driver.findElement(By.css('span#pageNumber')).getText();
80
- assert(txt.trim()).equalTo('1');
73
+ await driver.switchTo().defaultContent();
74
+ await driver.switchTo().frame(1);
75
+ txt = await driver.findElement(By.css('span#pageNumber')).getText();
81
76
 
82
- yield driver.switchTo().defaultContent();
83
- yield driver.switchTo().frame(1);
84
- txt = yield driver.findElement(By.css('span#pageNumber')).getText();
77
+ assert.equal(txt.trim(), '2');
85
78
 
86
- assert(txt.trim()).equalTo('2');
79
+ // For safari, need to make sure browser is focused on the main frame or
80
+ // subsequent tests will fail.
81
+ if (env.browser.name === Browser.SAFARI) {
82
+ await driver.switchTo().defaultContent();
83
+ }
87
84
  });
88
85
 
89
- test.ignore(browsers(Browser.SAFARI)).
90
- it('should be able to navigate back in browser history', function*() {
91
- yield driver.get(Pages.formPage);
86
+ it('should be able to navigate back in browser history', async function() {
87
+ await driver.get(Pages.formPage);
92
88
 
93
- yield driver.findElement(By.id('imageButton')).click();
94
- yield driver.wait(until.titleIs('We Arrive Here'), 2500);
89
+ await driver.findElement(By.id('imageButton')).click();
90
+ await driver.wait(until.titleIs('We Arrive Here'), 2500);
95
91
 
96
- yield driver.navigate().back();
97
- yield driver.wait(until.titleIs('We Leave From Here'), 2500);
92
+ await driver.navigate().back();
93
+ await driver.wait(until.titleIs('We Leave From Here'), 2500);
98
94
  });
99
95
 
100
- test.ignore(browsers(Browser.SAFARI)).
101
- it('should be able to navigate back in presence of iframes', function*() {
102
- yield driver.get(Pages.xhtmlTestPage);
96
+ it('should be able to navigate back in presence of iframes', async function() {
97
+ await driver.get(Pages.xhtmlTestPage);
103
98
 
104
- yield driver.findElement(By.name('sameWindow')).click();
105
- yield driver.wait(until.titleIs('This page has iframes'), 2500);
99
+ await driver.findElement(By.name('sameWindow')).click();
100
+ await driver.wait(until.titleIs('This page has iframes'), 2500);
106
101
 
107
- yield driver.navigate().back();
108
- yield driver.wait(until.titleIs('XHTML Test Page'), 2500);
102
+ await driver.navigate().back();
103
+ await driver.wait(until.titleIs('XHTML Test Page'), 2500);
109
104
  });
110
105
 
111
- test.ignore(browsers(Browser.SAFARI)).
112
- it('should be able to navigate forwards in browser history', function*() {
113
- yield driver.get(Pages.formPage);
106
+ it('should be able to navigate forwards in browser history', async function() {
107
+ await driver.get(Pages.formPage);
114
108
 
115
- yield driver.findElement(By.id('imageButton')).click();
116
- yield driver.wait(until.titleIs('We Arrive Here'), 5000);
109
+ await driver.findElement(By.id('imageButton')).click();
110
+ await driver.wait(until.titleIs('We Arrive Here'), 5000);
117
111
 
118
- yield driver.navigate().back();
119
- yield driver.wait(until.titleIs('We Leave From Here'), 5000);
112
+ await driver.navigate().back();
113
+ await driver.wait(until.titleIs('We Leave From Here'), 5000);
120
114
 
121
- yield driver.navigate().forward();
122
- yield driver.wait(until.titleIs('We Arrive Here'), 5000);
115
+ await driver.navigate().forward();
116
+ await driver.wait(until.titleIs('We Arrive Here'), 5000);
123
117
  });
124
118
 
125
- // PhantomJS 2.0 does not properly reload pages on refresh.
126
- test.ignore(browsers(Browser.PHANTOM_JS)).
127
- it('should be able to refresh a page', function*() {
128
- yield driver.get(Pages.xhtmlTestPage);
119
+ it('should be able to refresh a page', async function() {
120
+ await driver.get(Pages.xhtmlTestPage);
129
121
 
130
- yield driver.navigate().refresh();
122
+ await driver.navigate().refresh();
131
123
 
132
- yield assert(driver.getTitle()).equalTo('XHTML Test Page');
124
+ assert.equal(await driver.getTitle(), 'XHTML Test Page');
133
125
  });
134
126
 
135
- test.it('should return title of page if set', function*() {
136
- yield driver.get(Pages.xhtmlTestPage);
137
- yield assert(driver.getTitle()).equalTo('XHTML Test Page');
127
+ it('should return title of page if set', async function() {
128
+ await driver.get(Pages.xhtmlTestPage);
129
+ assert.equal(await driver.getTitle(), 'XHTML Test Page');
138
130
 
139
- yield driver.get(Pages.simpleTestPage);
140
- yield assert(driver.getTitle()).equalTo('Hello WebDriver');
131
+ await driver.get(Pages.simpleTestPage);
132
+ assert.equal(await driver.getTitle(), 'Hello WebDriver');
141
133
  });
142
134
 
143
135
  describe('timeouts', function() {
144
- test.afterEach(function() {
136
+ afterEach(function() {
145
137
  let nullDriver = () => driver = null;
146
138
  if (driver) {
147
139
  return driver.quit().then(nullDriver, nullDriver);
148
140
  }
149
141
  });
150
142
 
151
- // Only implemented in Firefox.
152
- test.ignore(browsers(
153
- Browser.CHROME,
154
- Browser.IE,
155
- Browser.IPAD,
156
- Browser.IPHONE,
157
- Browser.OPERA,
158
- Browser.PHANTOM_JS)).
159
- it('should timeout if page load timeout is set', function*() {
160
- yield driver.manage().timeouts().pageLoadTimeout(1);
143
+ it('should timeout if page load timeout is set', async function() {
144
+ await driver.manage().setTimeouts({pageLoad: 1});
161
145
  return driver.get(Pages.sleepingPage + '?time=3')
162
146
  .then(function() {
163
147
  throw Error('Should have timed out on page load');
@@ -17,17 +17,17 @@
17
17
 
18
18
  'use strict';
19
19
 
20
- var http = require('http'),
21
- url = require('url');
22
-
23
- var Browser = require('..').Browser,
24
- promise = require('..').promise,
25
- firefox = require('../firefox'),
26
- proxy = require('../proxy'),
27
- assert = require('../testing/assert'),
28
- test = require('../lib/test'),
29
- Server = require('../lib/test/httpserver').Server,
30
- Pages = test.Pages;
20
+ const assert = require('assert');
21
+ const http = require('http');
22
+ const url = require('url');
23
+
24
+ const firefox = require('../firefox');
25
+ const proxy = require('../proxy');
26
+ const test = require('../lib/test');
27
+ const {Browser} = require('..');
28
+ const {Server} = require('../lib/test/httpserver');
29
+
30
+ const Pages = test.Pages;
31
31
 
32
32
  test.suite(function(env) {
33
33
  function writeResponse(res, body, encoding, contentType) {
@@ -86,69 +86,64 @@ test.suite(function(env) {
86
86
  };
87
87
  }
88
88
 
89
- test.before(mkStartFunc(proxyServer));
90
- test.before(mkStartFunc(helloServer));
91
- test.before(mkStartFunc(goodbyeServer));
89
+ before(mkStartFunc(proxyServer));
90
+ before(mkStartFunc(helloServer));
91
+ before(mkStartFunc(goodbyeServer));
92
92
 
93
- test.after(proxyServer.stop.bind(proxyServer));
94
- test.after(helloServer.stop.bind(helloServer));
95
- test.after(goodbyeServer.stop.bind(goodbyeServer));
93
+ after(proxyServer.stop.bind(proxyServer));
94
+ after(helloServer.stop.bind(helloServer));
95
+ after(goodbyeServer.stop.bind(goodbyeServer));
96
96
 
97
97
  var driver;
98
- test.beforeEach(function() { driver = null; });
99
- test.afterEach(function() { return driver && driver.quit(); });
98
+ beforeEach(function() { driver = null; });
99
+ afterEach(function() { return driver && driver.quit(); });
100
100
 
101
101
  function createDriver(proxy) {
102
- // For Firefox we need to explicitly enable proxies for localhost by
103
- // clearing the network.proxy.no_proxies_on preference.
104
- let profile = new firefox.Profile();
105
- profile.setPreference('network.proxy.no_proxies_on', '');
106
-
107
102
  return driver = env.builder()
108
- .setFirefoxOptions(new firefox.Options().setProfile(profile))
103
+ // For Firefox we need to explicitly enable proxies for localhost by
104
+ // clearing the network.proxy.no_proxies_on preference.
105
+ .setFirefoxOptions(
106
+ new firefox.Options()
107
+ .setBinary(firefox.Channel.AURORA)
108
+ .setPreference('network.proxy.no_proxies_on', ''))
109
109
  .setProxy(proxy)
110
110
  .build();
111
111
  }
112
112
 
113
113
  // Proxy support not implemented.
114
- test.ignore(env.browsers(Browser.IE, Browser.OPERA, Browser.SAFARI)).
114
+ test.ignore(env.browsers(Browser.IE, Browser.SAFARI)).
115
115
  describe('manual proxy settings', function() {
116
- // phantomjs 1.9.1 in webdriver mode does not appear to respect proxy
117
- // settings.
118
- test.ignore(env.browsers(Browser.PHANTOM_JS)).
119
- it('can configure HTTP proxy host', function*() {
120
- yield createDriver(proxy.manual({
116
+ it('can configure HTTP proxy host', async function() {
117
+ await createDriver(proxy.manual({
121
118
  http: proxyServer.host()
122
119
  }));
123
120
 
124
- yield driver.get(helloServer.url());
125
- yield assert(driver.getTitle()).equalTo('Proxy page');
126
- yield assert(driver.findElement({tagName: 'h3'}).getText()).
127
- equalTo('This is the proxy landing page');
121
+ await driver.get(helloServer.url());
122
+ assert.equal(await driver.getTitle(), 'Proxy page');
123
+ assert.equal(
124
+ await driver.findElement({tagName: 'h3'}).getText(),
125
+ 'This is the proxy landing page');
128
126
  });
129
127
 
130
- // PhantomJS does not support bypassing the proxy for individual hosts.
131
- // geckodriver does not support the bypass option, this must be configured
132
- // through profile preferences.
133
- test.ignore(env.browsers(
134
- Browser.FIREFOX,
135
- 'legacy-' + Browser.FIREFOX,
136
- Browser.PHANTOM_JS)).
137
- it('can bypass proxy for specific hosts', function*() {
138
- yield createDriver(proxy.manual({
128
+ it('can bypass proxy for specific hosts', async function() {
129
+ await createDriver(proxy.manual({
139
130
  http: proxyServer.host(),
140
- bypass: helloServer.host()
131
+ bypass: [helloServer.host()]
141
132
  }));
142
133
 
143
- yield driver.get(helloServer.url());
144
- yield assert(driver.getTitle()).equalTo('Hello');
145
- yield assert(driver.findElement({tagName: 'h3'}).getText()).
146
- equalTo('Hello, world!');
147
-
148
- yield driver.get(goodbyeServer.url());
149
- yield assert(driver.getTitle()).equalTo('Proxy page');
150
- yield assert(driver.findElement({tagName: 'h3'}).getText()).
151
- equalTo('This is the proxy landing page');
134
+ await driver.get(helloServer.url());
135
+ assert.equal(await driver.getTitle(), 'Hello');
136
+ assert.equal(
137
+ await driver.findElement({tagName: 'h3'}).getText(),
138
+ 'Hello, world!');
139
+
140
+ // For firefox the no proxy settings appear to match on hostname only.
141
+ let url = goodbyeServer.url().replace(/127\.0\.0\.1/, 'localhost');
142
+ await driver.get(url);
143
+ assert.equal(await driver.getTitle(), 'Proxy page');
144
+ assert.equal(
145
+ await driver.findElement({tagName: 'h3'}).getText(),
146
+ 'This is the proxy landing page');
152
147
  });
153
148
 
154
149
  // TODO: test ftp and https proxies.
@@ -156,25 +151,22 @@ test.suite(function(env) {
156
151
 
157
152
  // PhantomJS does not support PAC file proxy configuration.
158
153
  // Safari does not support proxies.
159
- test.ignore(env.browsers(
160
- Browser.IE, Browser.OPERA, Browser.PHANTOM_JS, Browser.SAFARI)).
154
+ test.ignore(env.browsers(Browser.IE, Browser.SAFARI)).
161
155
  describe('pac proxy settings', function() {
162
- test.it('can configure proxy through PAC file', function*() {
163
- yield createDriver(proxy.pac(proxyServer.url('/proxy.pac')));
164
-
165
- yield driver.get(helloServer.url());
166
- yield assert(driver.getTitle()).equalTo('Proxy page');
167
- yield assert(driver.findElement({tagName: 'h3'}).getText()).
168
- equalTo('This is the proxy landing page');
169
-
170
- yield driver.get(goodbyeServer.url());
171
- yield assert(driver.getTitle()).equalTo('Goodbye');
172
- yield assert(driver.findElement({tagName: 'h3'}).getText()).
173
- equalTo('Goodbye, world!');
156
+ it('can configure proxy through PAC file', async function() {
157
+ await createDriver(proxy.pac(proxyServer.url('/proxy.pac')));
158
+
159
+ await driver.get(helloServer.url());
160
+ assert.equal(await driver.getTitle(), 'Proxy page');
161
+ assert.equal(
162
+ await driver.findElement({tagName: 'h3'}).getText(),
163
+ 'This is the proxy landing page');
164
+
165
+ await driver.get(goodbyeServer.url());
166
+ assert.equal(await driver.getTitle(), 'Goodbye');
167
+ assert.equal(
168
+ await driver.findElement({tagName: 'h3'}).getText(),
169
+ 'Goodbye, world!');
174
170
  });
175
171
  });
176
-
177
- // TODO: figure out how to test direct and system proxy settings.
178
- describe.skip('direct proxy settings', function() {});
179
- describe.skip('system proxy settings', function() {});
180
172
  });
package/test/rect_test.js CHANGED
@@ -23,38 +23,27 @@ const {By} = require('..');
23
23
  const test = require('../lib/test');
24
24
 
25
25
  test.suite(function(env) {
26
- describe('rect commands', function() {
26
+ describe('WebElement', function() {
27
27
  let driver;
28
- let el;
29
28
 
30
- test.before(function*() {
31
- driver = yield env.builder().build();
32
- yield driver.get(
33
- 'data:text/html,<!DOCTYPE html><style>'
34
- + '*{padding:0; margin:0}'
35
- + 'div{position: absolute; top: 50px; left: 50px;'
36
- + 'height: 50px;width:50px;background: green;}'
37
- + '</style><div>Hello</div>');
38
- el = yield driver.findElement(By.css('div'));
29
+ before(async function() {
30
+ driver = await env.builder().build();
39
31
  });
40
32
 
41
33
  after(function() {
42
- if (driver) {
43
- return driver.quit();
44
- }
45
- });
46
-
47
- test.it('WebElement.getLocation()', function*() {
48
- let location = yield el.getLocation();
49
- assert.equal(location.x, 50);
50
- assert.equal(location.y, 50);
34
+ return driver.quit();
51
35
  });
52
36
 
53
- test.it('WebElement.getSize()', function*() {
54
- let size = yield el.getSize();
55
- assert.equal(size.width, 50);
56
- assert.equal(size.height, 50);
37
+ it('getRect()', async function() {
38
+ await driver.get(
39
+ 'data:text/html,<!DOCTYPE html><style>'
40
+ + '*{padding:0; margin:0}'
41
+ + 'div{position: absolute; top: 50px; left: 40px;'
42
+ + 'height: 25px;width:35px;background: green;}'
43
+ + '</style><div>Hello</div>');
44
+ const el = await driver.findElement(By.css('div'));
45
+ const rect = await el.getRect();
46
+ assert.deepEqual(rect, {width: 35, height: 25, x: 40, y: 50});
57
47
  });
58
-
59
48
  });
60
49
  });