logging_test.js 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  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. 'use strict';
  18. var Browser = require('..').Browser,
  19. By = require('..').By,
  20. logging = require('..').logging,
  21. assert = require('../testing/assert'),
  22. test = require('../lib/test');
  23. test.suite(function(env) {
  24. // Logging API has numerous issues with PhantomJS:
  25. // - does not support adjusting log levels for type "browser".
  26. // - does not return proper log level for "browser" messages.
  27. // - does not delete logs after retrieval
  28. // Logging API is not supported in IE.
  29. // Logging API not supported in Marionette.
  30. // Tests depend on opening data URLs, which is broken in Safari (issue 7586)
  31. test.ignore(env.browsers(
  32. Browser.PHANTOM_JS, Browser.IE, Browser.SAFARI, Browser.FIREFOX)).
  33. describe('logging', function() {
  34. var driver;
  35. test.beforeEach(function() {
  36. driver = null;
  37. });
  38. test.afterEach(function*() {
  39. if (driver) {
  40. return driver.quit();
  41. }
  42. });
  43. test.it('can be disabled', function*() {
  44. var prefs = new logging.Preferences();
  45. prefs.setLevel(logging.Type.BROWSER, logging.Level.OFF);
  46. driver = yield env.builder()
  47. .setLoggingPrefs(prefs)
  48. .build();
  49. yield driver.get(dataUrl(
  50. '<!DOCTYPE html><script>',
  51. 'console.info("hello");',
  52. 'console.warn("this is a warning");',
  53. 'console.error("and this is an error");',
  54. '</script>'));
  55. return driver.manage().logs().get(logging.Type.BROWSER)
  56. .then(entries => assert(entries.length).equalTo(0));
  57. });
  58. // Firefox does not capture JS error console log messages.
  59. test.ignore(env.browsers(Browser.FIREFOX, 'legacy-firefox')).
  60. it('can be turned down', function*() {
  61. var prefs = new logging.Preferences();
  62. prefs.setLevel(logging.Type.BROWSER, logging.Level.SEVERE);
  63. driver = yield env.builder()
  64. .setLoggingPrefs(prefs)
  65. .build();
  66. yield driver.get(dataUrl(
  67. '<!DOCTYPE html><script>',
  68. 'console.info("hello");',
  69. 'console.warn("this is a warning");',
  70. 'console.error("and this is an error");',
  71. '</script>'));
  72. return driver.manage().logs().get(logging.Type.BROWSER)
  73. .then(function(entries) {
  74. assert(entries.length).equalTo(1);
  75. assert(entries[0].level.name).equalTo('SEVERE');
  76. assert(entries[0].message).matches(/.*\"?and this is an error\"?/);
  77. });
  78. });
  79. // Firefox does not capture JS error console log messages.
  80. test.ignore(env.browsers(Browser.FIREFOX, 'legacy-firefox')).
  81. it('can be made verbose', function*() {
  82. var prefs = new logging.Preferences();
  83. prefs.setLevel(logging.Type.BROWSER, logging.Level.DEBUG);
  84. driver = yield env.builder()
  85. .setLoggingPrefs(prefs)
  86. .build();
  87. yield driver.get(dataUrl(
  88. '<!DOCTYPE html><script>',
  89. 'console.debug("hello");',
  90. 'console.warn("this is a warning");',
  91. 'console.error("and this is an error");',
  92. '</script>'));
  93. return driver.manage().logs().get(logging.Type.BROWSER)
  94. .then(function(entries) {
  95. assert(entries.length).equalTo(3);
  96. assert(entries[0].level.name).equalTo('DEBUG');
  97. assert(entries[0].message).matches(/.*\"?hello\"?/);
  98. assert(entries[1].level.name).equalTo('WARNING');
  99. assert(entries[1].message).matches(/.*\"?this is a warning\"?/);
  100. assert(entries[2].level.name).equalTo('SEVERE');
  101. assert(entries[2].message).matches(/.*\"?and this is an error\"?/);
  102. });
  103. });
  104. // Firefox does not capture JS error console log messages.
  105. test.ignore(env.browsers(Browser.FIREFOX, 'legacy-firefox')).
  106. it('clears records after retrieval', function*() {
  107. var prefs = new logging.Preferences();
  108. prefs.setLevel(logging.Type.BROWSER, logging.Level.DEBUG);
  109. driver = yield env.builder()
  110. .setLoggingPrefs(prefs)
  111. .build();
  112. yield driver.get(dataUrl(
  113. '<!DOCTYPE html><script>',
  114. 'console.debug("hello");',
  115. 'console.warn("this is a warning");',
  116. 'console.error("and this is an error");',
  117. '</script>'));
  118. yield driver.manage().logs().get(logging.Type.BROWSER)
  119. .then(entries => assert(entries.length).equalTo(3));
  120. return driver.manage().logs().get(logging.Type.BROWSER)
  121. .then(entries => assert(entries.length).equalTo(0));
  122. });
  123. test.it('does not mix log types', function*() {
  124. var prefs = new logging.Preferences();
  125. prefs.setLevel(logging.Type.BROWSER, logging.Level.DEBUG);
  126. prefs.setLevel(logging.Type.DRIVER, logging.Level.SEVERE);
  127. driver = yield env.builder()
  128. .setLoggingPrefs(prefs)
  129. .build();
  130. yield driver.get(dataUrl(
  131. '<!DOCTYPE html><script>',
  132. 'console.debug("hello");',
  133. 'console.warn("this is a warning");',
  134. 'console.error("and this is an error");',
  135. '</script>'));
  136. return driver.manage().logs().get(logging.Type.DRIVER)
  137. .then(entries => assert(entries.length).equalTo(0));
  138. });
  139. });
  140. function dataUrl(var_args) {
  141. return 'data:text/html,'
  142. + Array.prototype.slice.call(arguments, 0).join('');
  143. }
  144. });