Source: e2e/fields/CheckboxesField.js

  1. 'use strict';
  2. /**
  3. * @module e2e/fields/CheckboxesField
  4. */
  5. var util = require('util');
  6. var Field = process.requireTest('lib/e2e/fields/Field.js');
  7. var browserExt = process.requireTest('lib/e2e/browser.js');
  8. /**
  9. * Defines a form checkboxes field.
  10. *
  11. * Use [Field.get]{@link module:e2e/fields/Field~Field.get} method to get an instance of CheckboxesField.
  12. *
  13. * @example
  14. * var Field = require('@openveo/test').e2e.fields.Field;
  15. *
  16. * var CheckboxesField = Field.get({
  17. * type: 'checkboxes',
  18. * name: 'My field',
  19. * baseElement: element(by.css('form'))
  20. * });
  21. *
  22. * @class CheckboxesField
  23. * @extends module:e2e/fields/Field~Field
  24. * @constructor
  25. * @param {Object} conf A field configuration object
  26. */
  27. function CheckboxesField(conf) {
  28. CheckboxesField.super_.call(this, conf);
  29. }
  30. module.exports = CheckboxesField;
  31. util.inherits(CheckboxesField, Field);
  32. /**
  33. * Gets selected checkboxe names.
  34. *
  35. * @example
  36. * myField.getValue().then(function(values) {
  37. * console.log(values);
  38. * });
  39. *
  40. * @return {Promise} Promise resolving with selected checkboxes
  41. */
  42. CheckboxesField.prototype.getValue = function() {
  43. var values = [];
  44. return this.getElement().then(function(elementFinder) {
  45. // Iterate on each checkbox labels
  46. elementFinder.all(by.css('.checkbox label')).each(function(label, index) {
  47. // Test if checkbox is checked
  48. browserExt.getProperty(label.element(by.css('input')), 'checked').then(function(isChecked) {
  49. // Get checkbox name
  50. label.getText().then(function(text) {
  51. if (isChecked)
  52. values.push(text.replace(/ ?\*?$/, ''));
  53. });
  54. });
  55. });
  56. }).then(function() {
  57. return protractor.promise.fulfilled(values);
  58. });
  59. };
  60. /**
  61. * Sets field value.
  62. *
  63. * @example
  64. * myField.setValue(['Label 1', 'Label 2']).then(function() {
  65. * console.log('Value set');
  66. * });
  67. *
  68. * @param {Array} [values=[]] Checkboxe's values
  69. * @return {Promise} Promise resolving when checkboxes are checked
  70. */
  71. CheckboxesField.prototype.setValue = function(values) {
  72. values = values || [];
  73. return this.getElement().then(function(elementFinder) {
  74. // Iterate on each checkbox labels
  75. elementFinder.all(by.css('.checkbox label')).each(function(label, index) {
  76. // Test if checkbox is checked
  77. browserExt.getProperty(label.element(by.css('input')), 'checked').then(function(isChecked) {
  78. // Get checkbox name
  79. label.getText().then(function(text) {
  80. var isPartOfValues = values.indexOf(text.replace(/ ?\*?$/, '')) >= 0;
  81. if ((!isChecked && isPartOfValues) || (isChecked && !isPartOfValues)) {
  82. // Checkbox not checked and must be or checked and must not
  83. browserExt.click(label);
  84. }
  85. });
  86. });
  87. });
  88. }).then(function() {
  89. return protractor.promise.fulfilled();
  90. });
  91. };
  92. /**
  93. * Unchecks all checkboxes.
  94. *
  95. * @example
  96. * myField.clear().then(function() {
  97. * console.log('Field cleared');
  98. * });
  99. *
  100. * @return {Promise} Promise resolving when the field is cleared
  101. */
  102. CheckboxesField.prototype.clear = function() {
  103. return this.setValue();
  104. };
  105. /**
  106. * Gets all checkboxes labels.
  107. *
  108. * @example
  109. * myField.getOptions().then(function(options) {
  110. * console.log(options);
  111. * });
  112. *
  113. * @return {Promise} Promise resolving with checkboxes options
  114. */
  115. CheckboxesField.prototype.getOptions = function() {
  116. var options = [];
  117. return this.getElement().then(function(elementFinder) {
  118. // Iterate on each checkbox labels
  119. elementFinder.all(by.css('.checkbox label')).each(function(label, index) {
  120. // Get checkbox name
  121. label.getText().then(function(text) {
  122. options.push(text.replace(/ ?\*?$/, ''));
  123. });
  124. });
  125. }).then(function() {
  126. return protractor.promise.fulfilled(options);
  127. });
  128. };