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,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,141 +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
- // Skip Firefox; see https://bugzilla.mozilla.org/show_bug.cgi?id=1280300
61
- test.ignore(browsers(Browser.FIREFOX)).
62
- it('should be able to get a fragment on the current page', function*() {
63
- yield driver.get(Pages.xhtmlTestPage);
64
- yield driver.get(Pages.xhtmlTestPage + '#text');
65
- yield driver.findElement(By.id('id1'));
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'));
66
64
  });
67
65
 
68
- test.ignore(browsers(Browser.IPAD, Browser.IPHONE)).
69
- it('should wait for all frames to load in a frameset', function*() {
70
- yield driver.get(Pages.framesetPage);
71
- yield driver.switchTo().frame(0);
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);
72
69
 
73
- let txt = yield driver.findElement(By.css('span#pageNumber')).getText();
74
- assert(txt.trim()).equalTo('1');
70
+ let txt = await driver.findElement(By.css('span#pageNumber')).getText();
71
+ assert.equal(txt.trim(), '1');
75
72
 
76
- yield driver.switchTo().defaultContent();
77
- yield driver.switchTo().frame(1);
78
- txt = yield driver.findElement(By.css('span#pageNumber')).getText();
73
+ await driver.switchTo().defaultContent();
74
+ await driver.switchTo().frame(1);
75
+ txt = await driver.findElement(By.css('span#pageNumber')).getText();
79
76
 
80
- assert(txt.trim()).equalTo('2');
77
+ assert.equal(txt.trim(), '2');
78
+
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
+ }
81
84
  });
82
85
 
83
- test.ignore(browsers(Browser.SAFARI)).
84
- it('should be able to navigate back in browser history', function*() {
85
- yield driver.get(Pages.formPage);
86
+ it('should be able to navigate back in browser history', async function() {
87
+ await driver.get(Pages.formPage);
86
88
 
87
- yield driver.findElement(By.id('imageButton')).click();
88
- 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);
89
91
 
90
- yield driver.navigate().back();
91
- 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);
92
94
  });
93
95
 
94
- test.ignore(browsers(Browser.SAFARI)).
95
- it('should be able to navigate back in presence of iframes', function*() {
96
- 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);
97
98
 
98
- yield driver.findElement(By.name('sameWindow')).click();
99
- 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);
100
101
 
101
- yield driver.navigate().back();
102
- yield driver.wait(until.titleIs('XHTML Test Page'), 2500);
102
+ await driver.navigate().back();
103
+ await driver.wait(until.titleIs('XHTML Test Page'), 2500);
103
104
  });
104
105
 
105
- test.ignore(browsers(Browser.SAFARI)).
106
- it('should be able to navigate forwards in browser history', function*() {
107
- yield driver.get(Pages.formPage);
106
+ it('should be able to navigate forwards in browser history', async function() {
107
+ await driver.get(Pages.formPage);
108
108
 
109
- yield driver.findElement(By.id('imageButton')).click();
110
- 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);
111
111
 
112
- yield driver.navigate().back();
113
- 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);
114
114
 
115
- yield driver.navigate().forward();
116
- yield driver.wait(until.titleIs('We Arrive Here'), 5000);
115
+ await driver.navigate().forward();
116
+ await driver.wait(until.titleIs('We Arrive Here'), 5000);
117
117
  });
118
118
 
119
- // PhantomJS 2.0 does not properly reload pages on refresh.
120
- test.ignore(browsers(Browser.PHANTOM_JS)).
121
- it('should be able to refresh a page', function*() {
122
- yield driver.get(Pages.xhtmlTestPage);
119
+ it('should be able to refresh a page', async function() {
120
+ await driver.get(Pages.xhtmlTestPage);
123
121
 
124
- yield driver.navigate().refresh();
122
+ await driver.navigate().refresh();
125
123
 
126
- yield assert(driver.getTitle()).equalTo('XHTML Test Page');
124
+ assert.equal(await driver.getTitle(), 'XHTML Test Page');
127
125
  });
128
126
 
129
- test.it('should return title of page if set', function*() {
130
- yield driver.get(Pages.xhtmlTestPage);
131
- 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');
132
130
 
133
- yield driver.get(Pages.simpleTestPage);
134
- yield assert(driver.getTitle()).equalTo('Hello WebDriver');
131
+ await driver.get(Pages.simpleTestPage);
132
+ assert.equal(await driver.getTitle(), 'Hello WebDriver');
135
133
  });
136
134
 
137
135
  describe('timeouts', function() {
138
- test.afterEach(function() {
136
+ afterEach(function() {
139
137
  let nullDriver = () => driver = null;
140
138
  if (driver) {
141
139
  return driver.quit().then(nullDriver, nullDriver);
142
140
  }
143
141
  });
144
142
 
145
- // Only implemented in Firefox.
146
- test.ignore(browsers(
147
- Browser.CHROME,
148
- Browser.IE,
149
- Browser.IPAD,
150
- Browser.IPHONE,
151
- Browser.OPERA,
152
- Browser.PHANTOM_JS)).
153
- it('should timeout if page load timeout is set', function*() {
154
- 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});
155
145
  return driver.get(Pages.sleepingPage + '?time=3')
156
146
  .then(function() {
157
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
  });