UNPKG

6.13 kBJavaScriptView Raw
1// Licensed to the Software Freedom Conservancy (SFC) under one
2// or more contributor license agreements. See the NOTICE file
3// distributed with this work for additional information
4// regarding copyright ownership. The SFC licenses this file
5// to you under the Apache License, Version 2.0 (the
6// "License"); you may not use this file except in compliance
7// with the License. You may obtain a copy of the License at
8//
9// http://www.apache.org/licenses/LICENSE-2.0
10//
11// Unless required by applicable law or agreed to in writing,
12// software distributed under the License is distributed on an
13// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14// KIND, either express or implied. See the License for the
15// specific language governing permissions and limitations
16// under the License.
17
18'use strict';
19
20var Browser = require('..').Browser,
21 By = require('..').By,
22 logging = require('..').logging,
23 assert = require('../testing/assert'),
24 test = require('../lib/test');
25
26test.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 // Logging API is not supported in IE.
32 // Logging API not supported in Marionette.
33 // 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)).
36 describe('logging', function() {
37 var driver;
38
39 test.beforeEach(function() {
40 driver = null;
41 });
42
43 test.afterEach(function*() {
44 if (driver) {
45 return driver.quit();
46 }
47 });
48
49 test.it('can be disabled', function*() {
50 var prefs = new logging.Preferences();
51 prefs.setLevel(logging.Type.BROWSER, logging.Level.OFF);
52
53 driver = yield env.builder()
54 .setLoggingPrefs(prefs)
55 .build();
56
57 yield driver.get(dataUrl(
58 '<!DOCTYPE html><script>',
59 'console.info("hello");',
60 'console.warn("this is a warning");',
61 'console.error("and this is an error");',
62 '</script>'));
63 return driver.manage().logs().get(logging.Type.BROWSER)
64 .then(entries => assert(entries.length).equalTo(0));
65 });
66
67 // Firefox does not capture JS error console log messages.
68 test.ignore(env.browsers(Browser.FIREFOX, 'legacy-firefox')).
69 it('can be turned down', function*() {
70 var prefs = new logging.Preferences();
71 prefs.setLevel(logging.Type.BROWSER, logging.Level.SEVERE);
72
73 driver = yield env.builder()
74 .setLoggingPrefs(prefs)
75 .build();
76
77 yield driver.get(dataUrl(
78 '<!DOCTYPE html><script>',
79 'console.info("hello");',
80 'console.warn("this is a warning");',
81 'console.error("and this is an error");',
82 '</script>'));
83 return driver.manage().logs().get(logging.Type.BROWSER)
84 .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\"?/);
88 });
89 });
90
91 // Firefox does not capture JS error console log messages.
92 test.ignore(env.browsers(Browser.FIREFOX, 'legacy-firefox')).
93 it('can be made verbose', function*() {
94 var prefs = new logging.Preferences();
95 prefs.setLevel(logging.Type.BROWSER, logging.Level.DEBUG);
96
97 driver = yield env.builder()
98 .setLoggingPrefs(prefs)
99 .build();
100
101 yield driver.get(dataUrl(
102 '<!DOCTYPE html><script>',
103 'console.debug("hello");',
104 'console.warn("this is a warning");',
105 'console.error("and this is an error");',
106 '</script>'));
107 return driver.manage().logs().get(logging.Type.BROWSER)
108 .then(function(entries) {
109 assert(entries.length).equalTo(3);
110 assert(entries[0].level.name).equalTo('DEBUG');
111 assert(entries[0].message).matches(/.*\"?hello\"?/);
112
113 assert(entries[1].level.name).equalTo('WARNING');
114 assert(entries[1].message).matches(/.*\"?this is a warning\"?/);
115
116 assert(entries[2].level.name).equalTo('SEVERE');
117 assert(entries[2].message).matches(/.*\"?and this is an error\"?/);
118 });
119 });
120
121 // Firefox does not capture JS error console log messages.
122 test.ignore(env.browsers(Browser.FIREFOX, 'legacy-firefox')).
123 it('clears records after retrieval', function*() {
124 var prefs = new logging.Preferences();
125 prefs.setLevel(logging.Type.BROWSER, logging.Level.DEBUG);
126
127 driver = yield env.builder()
128 .setLoggingPrefs(prefs)
129 .build();
130
131 yield driver.get(dataUrl(
132 '<!DOCTYPE html><script>',
133 'console.debug("hello");',
134 'console.warn("this is a warning");',
135 'console.error("and this is an error");',
136 '</script>'));
137 yield driver.manage().logs().get(logging.Type.BROWSER)
138 .then(entries => assert(entries.length).equalTo(3));
139 return driver.manage().logs().get(logging.Type.BROWSER)
140 .then(entries => assert(entries.length).equalTo(0));
141 });
142
143 test.it('does not mix log types', function*() {
144 var prefs = new logging.Preferences();
145 prefs.setLevel(logging.Type.BROWSER, logging.Level.DEBUG);
146 prefs.setLevel(logging.Type.DRIVER, logging.Level.SEVERE);
147
148 driver = yield env.builder()
149 .setLoggingPrefs(prefs)
150 .build();
151
152 yield driver.get(dataUrl(
153 '<!DOCTYPE html><script>',
154 'console.debug("hello");',
155 'console.warn("this is a warning");',
156 'console.error("and this is an error");',
157 '</script>'));
158 return driver.manage().logs().get(logging.Type.DRIVER)
159 .then(entries => assert(entries.length).equalTo(0));
160 });
161 });
162
163 function dataUrl(var_args) {
164 return 'data:text/html,'
165 + Array.prototype.slice.call(arguments, 0).join('');
166 }
167});