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.
- package/CHANGES.md +181 -0
- package/README.md +25 -27
- package/chrome.js +113 -127
- package/edge.js +42 -117
- package/example/chrome_android.js +8 -8
- package/example/chrome_mobile_emulation.js +8 -8
- package/example/firefox_channels.js +22 -18
- package/example/google_search_test.js +39 -26
- package/example/logging.js +39 -6
- package/firefox.js +769 -0
- package/http/index.js +41 -4
- package/http/util.js +11 -6
- package/ie.js +56 -97
- package/index.js +178 -114
- package/jasmine.json +11 -0
- package/lib/actions.js +68 -63
- package/lib/by.js +1 -1
- package/lib/capabilities.js +255 -192
- package/lib/command.js +26 -50
- package/lib/error.js +85 -44
- package/lib/http.js +133 -110
- package/lib/input.js +1044 -8
- package/lib/promise.js +222 -3323
- package/lib/proxy.js +134 -39
- package/lib/test/bootstrap_jasmine.js +28 -0
- package/lib/test/data/actions/click.html +24 -0
- package/lib/test/data/actions/drag.html +77 -0
- package/lib/test/data/actions/record_click.html +21 -0
- package/lib/test/data/chrome/download.html +2 -0
- package/lib/test/data/inputs.html +42 -0
- package/lib/test/data/selectPage.html +12 -0
- package/lib/test/data/simpleTest.html +5 -0
- package/lib/test/data/upload_invisible.html +45 -0
- package/lib/test/fileserver.js +23 -19
- package/lib/test/index.js +30 -212
- package/lib/test/resources.js +0 -1
- package/lib/webdriver.js +675 -936
- package/net/index.js +21 -25
- package/net/portprober.js +51 -68
- package/package.json +5 -3
- package/remote/index.js +5 -19
- package/safari.js +41 -128
- package/test/actions_test.js +173 -18
- package/test/{session_test.js → builder_test.js} +44 -37
- package/test/chrome/devtools_test.js +93 -0
- package/test/chrome/options_test.js +48 -154
- package/test/chrome/service_test.js +7 -7
- package/test/cookie_test.js +77 -63
- package/test/element_finding_test.js +206 -201
- package/test/execute_script_test.js +115 -114
- package/test/fingerprint_test.js +16 -15
- package/test/firefox_test.js +251 -0
- package/test/http/http_test.js +0 -1
- package/test/http/util_test.js +2 -2
- package/test/io/zip_test.js +6 -7
- package/test/lib/error_test.js +34 -7
- package/test/lib/http_test.js +8 -128
- package/test/lib/input_test.js +1379 -0
- package/test/lib/promise_test.js +473 -908
- package/test/lib/webdriver_test.js +296 -868
- package/test/logging_test.js +37 -43
- package/test/page_loading_test.js +71 -81
- package/test/proxy_test.js +64 -72
- package/test/rect_test.js +14 -25
- package/test/remote_test.js +10 -29
- package/test/safari_test.js +7 -71
- package/test/stale_element_test.js +20 -23
- package/test/tag_name_test.js +10 -9
- package/test/upload_test.js +27 -35
- package/test/window_test.js +72 -85
- package/testing/index.js +386 -314
- package/.npmignore +0 -2
- package/example/async_await_test.js +0 -69
- package/example/google_search_generator.js +0 -47
- package/example/parallel_flows.js +0 -51
- package/firefox/binary.js +0 -347
- package/firefox/extension.js +0 -224
- package/firefox/index.js +0 -576
- package/firefox/profile.js +0 -311
- package/lib/events.js +0 -210
- package/lib/test/data/firefox/jetpack-sample.xpi +0 -0
- package/lib/test/data/firefox/sample.xpi +0 -0
- package/lib/test/promise.js +0 -79
- package/opera.js +0 -405
- package/phantomjs.js +0 -282
- package/test/firefox/extension_test.js +0 -120
- package/test/firefox/firefox_test.js +0 -244
- package/test/firefox/profile_test.js +0 -140
- package/test/lib/events_test.js +0 -177
- package/test/lib/promise_aplus_test.js +0 -78
- package/test/lib/promise_error_test.js +0 -884
- package/test/lib/promise_flow_test.js +0 -2288
- package/test/lib/promise_generator_test.js +0 -310
- package/test/phantomjs/execute_phantomjs_test.js +0 -59
- package/test/testing/assert_test.js +0 -373
- package/test/testing/index_test.js +0 -224
- package/testing/assert.js +0 -378
package/test/logging_test.js
CHANGED
|
@@ -17,64 +17,58 @@
|
|
|
17
17
|
|
|
18
18
|
'use strict';
|
|
19
19
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
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
|
-
|
|
33
|
+
beforeEach(function() {
|
|
40
34
|
driver = null;
|
|
41
35
|
});
|
|
42
36
|
|
|
43
|
-
|
|
37
|
+
afterEach(async function() {
|
|
44
38
|
if (driver) {
|
|
45
39
|
return driver.quit();
|
|
46
40
|
}
|
|
47
41
|
});
|
|
48
42
|
|
|
49
|
-
|
|
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 =
|
|
47
|
+
driver = await env.builder()
|
|
54
48
|
.setLoggingPrefs(prefs)
|
|
55
49
|
.build();
|
|
56
50
|
|
|
57
|
-
|
|
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
|
|
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 =
|
|
67
|
+
driver = await env.builder()
|
|
74
68
|
.setLoggingPrefs(prefs)
|
|
75
69
|
.build();
|
|
76
70
|
|
|
77
|
-
|
|
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
|
|
86
|
-
assert(entries[0].level.name
|
|
87
|
-
assert
|
|
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 =
|
|
91
|
+
driver = await env.builder()
|
|
98
92
|
.setLoggingPrefs(prefs)
|
|
99
93
|
.build();
|
|
100
94
|
|
|
101
|
-
|
|
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
|
|
110
|
-
assert(entries[0].level.name
|
|
111
|
-
assert
|
|
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
|
|
114
|
-
assert
|
|
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
|
|
117
|
-
assert
|
|
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 =
|
|
121
|
+
driver = await env.builder()
|
|
128
122
|
.setLoggingPrefs(prefs)
|
|
129
123
|
.build();
|
|
130
124
|
|
|
131
|
-
|
|
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
|
-
|
|
138
|
-
.then(entries => assert(entries.length
|
|
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
|
|
134
|
+
.then(entries => assert.equal(entries.length, 0));
|
|
141
135
|
});
|
|
142
136
|
|
|
143
|
-
|
|
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 =
|
|
142
|
+
driver = await env.builder()
|
|
149
143
|
.setLoggingPrefs(prefs)
|
|
150
144
|
.build();
|
|
151
145
|
|
|
152
|
-
|
|
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
|
|
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
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
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
|
-
|
|
34
|
-
driver =
|
|
33
|
+
before(async function() {
|
|
34
|
+
driver = await env.builder().build();
|
|
35
35
|
});
|
|
36
36
|
|
|
37
|
-
|
|
37
|
+
beforeEach(async function() {
|
|
38
38
|
if (!driver) {
|
|
39
|
-
driver =
|
|
39
|
+
driver = await env.builder().build();
|
|
40
40
|
}
|
|
41
41
|
});
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
after(function() {
|
|
44
44
|
if (driver) {
|
|
45
45
|
return driver.quit();
|
|
46
46
|
}
|
|
47
47
|
});
|
|
48
48
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
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
|
-
|
|
55
|
-
function
|
|
56
|
-
|
|
57
|
-
|
|
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
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
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
|
-
|
|
69
|
-
|
|
70
|
-
|
|
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 =
|
|
74
|
-
assert(txt.trim()
|
|
70
|
+
let txt = await driver.findElement(By.css('span#pageNumber')).getText();
|
|
71
|
+
assert.equal(txt.trim(), '1');
|
|
75
72
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
txt =
|
|
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()
|
|
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
|
-
|
|
84
|
-
|
|
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
|
-
|
|
88
|
-
|
|
89
|
+
await driver.findElement(By.id('imageButton')).click();
|
|
90
|
+
await driver.wait(until.titleIs('We Arrive Here'), 2500);
|
|
89
91
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
+
await driver.navigate().back();
|
|
93
|
+
await driver.wait(until.titleIs('We Leave From Here'), 2500);
|
|
92
94
|
});
|
|
93
95
|
|
|
94
|
-
|
|
95
|
-
|
|
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
|
-
|
|
99
|
-
|
|
99
|
+
await driver.findElement(By.name('sameWindow')).click();
|
|
100
|
+
await driver.wait(until.titleIs('This page has iframes'), 2500);
|
|
100
101
|
|
|
101
|
-
|
|
102
|
-
|
|
102
|
+
await driver.navigate().back();
|
|
103
|
+
await driver.wait(until.titleIs('XHTML Test Page'), 2500);
|
|
103
104
|
});
|
|
104
105
|
|
|
105
|
-
|
|
106
|
-
|
|
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
|
-
|
|
110
|
-
|
|
109
|
+
await driver.findElement(By.id('imageButton')).click();
|
|
110
|
+
await driver.wait(until.titleIs('We Arrive Here'), 5000);
|
|
111
111
|
|
|
112
|
-
|
|
113
|
-
|
|
112
|
+
await driver.navigate().back();
|
|
113
|
+
await driver.wait(until.titleIs('We Leave From Here'), 5000);
|
|
114
114
|
|
|
115
|
-
|
|
116
|
-
|
|
115
|
+
await driver.navigate().forward();
|
|
116
|
+
await driver.wait(until.titleIs('We Arrive Here'), 5000);
|
|
117
117
|
});
|
|
118
118
|
|
|
119
|
-
|
|
120
|
-
|
|
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
|
-
|
|
122
|
+
await driver.navigate().refresh();
|
|
125
123
|
|
|
126
|
-
|
|
124
|
+
assert.equal(await driver.getTitle(), 'XHTML Test Page');
|
|
127
125
|
});
|
|
128
126
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
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
|
-
|
|
134
|
-
|
|
131
|
+
await driver.get(Pages.simpleTestPage);
|
|
132
|
+
assert.equal(await driver.getTitle(), 'Hello WebDriver');
|
|
135
133
|
});
|
|
136
134
|
|
|
137
135
|
describe('timeouts', function() {
|
|
138
|
-
|
|
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
|
-
|
|
146
|
-
|
|
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');
|
package/test/proxy_test.js
CHANGED
|
@@ -17,17 +17,17 @@
|
|
|
17
17
|
|
|
18
18
|
'use strict';
|
|
19
19
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
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
|
-
|
|
90
|
-
|
|
91
|
-
|
|
89
|
+
before(mkStartFunc(proxyServer));
|
|
90
|
+
before(mkStartFunc(helloServer));
|
|
91
|
+
before(mkStartFunc(goodbyeServer));
|
|
92
92
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
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
|
-
|
|
99
|
-
|
|
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
|
-
|
|
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.
|
|
114
|
+
test.ignore(env.browsers(Browser.IE, Browser.SAFARI)).
|
|
115
115
|
describe('manual proxy settings', function() {
|
|
116
|
-
|
|
117
|
-
|
|
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
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
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
|
-
|
|
131
|
-
|
|
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
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
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
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
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('
|
|
26
|
+
describe('WebElement', function() {
|
|
27
27
|
let driver;
|
|
28
|
-
let el;
|
|
29
28
|
|
|
30
|
-
|
|
31
|
-
driver =
|
|
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
|
-
|
|
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
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
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
|
});
|