mirror of
https://github.com/elastic/kibana.git
synced 2025-04-24 17:59:23 -04:00
New scripted field tests (#9242)
* [WIP] new scripted field tests * Final improvements on 12 new tests for 1 expression and 2 painless scripted fields * Add try loops around testing first Discover doc * Set timezone to UTC and adjusted data accordingly * Added boolean and date Painless scripted field types * Remove unused (non-working) methods * Fix lint error * Added several data-test-subj attributes and used them in the tests * Reverting previous change to getBarChartData
This commit is contained in:
parent
1a5362fd80
commit
0cbec2cad7
11 changed files with 727 additions and 207 deletions
|
@ -6,6 +6,6 @@
|
|||
ng-click="toggleDisplay(field)"
|
||||
ng-class="::field.display ? 'btn-danger' : 'btn-primary'"
|
||||
ng-bind="::field.display ? 'remove' : 'add'"
|
||||
class="btn btn-xs btn-primary discover-field-toggle" ></button>
|
||||
class="btn btn-xs btn-primary discover-field-toggle" data-test-subj="fieldToggle-{{::field.name}}"></button>
|
||||
</div>
|
||||
</li>
|
||||
|
|
|
@ -26,9 +26,9 @@
|
|||
<div>
|
||||
<span ng-show="field.filterable" class="pull-right">
|
||||
<i aria-hidden="true" class="fa fa-search-minus pull-right discover-field-details-filter"
|
||||
ng-click="updateFilterInQuery(field, bucket.value, '-')"></i>
|
||||
ng-click="updateFilterInQuery(field, bucket.value, '-')" data-test-subj="minus-{{::field.name}}-{{::bucket.display}}"></i>
|
||||
<i aria-hidden="true" class="fa fa-search-plus pull-right discover-field-details-filter"
|
||||
ng-click="updateFilterInQuery(field, bucket.value, '+')"></i>
|
||||
ng-click="updateFilterInQuery(field, bucket.value, '+')" data-test-subj="plus-{{::field.name}}-{{::bucket.display}}"></i>
|
||||
</span>
|
||||
<div css-truncate css-truncate-expandable="true" class="discover-field-details-value" title="{{::bucket.display}}">
|
||||
{{::bucket.display}} <i ng-show="bucket.display === ''">Empty string</i>
|
||||
|
@ -45,7 +45,8 @@
|
|||
<a
|
||||
ng-href="{{vizLocation(field)}}"
|
||||
ng-show="field.visualizable"
|
||||
class="sidebar-item-button primary">
|
||||
class="sidebar-item-button primary"
|
||||
data-test-subj="fieldVisualize-{{::field.name}}">
|
||||
Visualize
|
||||
<span class="discover-field-vis-warning" ng-show="warnings.length" tooltip="{{warnings.join(' ')}}">
|
||||
( {{::warnings.length}} <ng-pluralize count="warnings.length" when="{'1':'warning', 'other':'warnings'}"></ng-pluralize> <i aria-hidden="true" class="fa fa-warning"></i> )
|
||||
|
|
|
@ -39,8 +39,8 @@
|
|||
|
||||
<!-- tab list -->
|
||||
<ul class="nav nav-tabs">
|
||||
<li class="kbn-management-tab" ng-class="{ active: state.tab === editSection.index }" ng-repeat="editSection in editSections">
|
||||
<a ng-click="changeTab(editSection)">
|
||||
<li class="kbn-management-tab" ng-class="{ active: state.tab === editSection.index }" ng-repeat="editSection in editSections" data-test-subj="li-{{ editSection.index }}">
|
||||
<a ng-click="changeTab(editSection)" data-test-subj="tab-{{ editSection.index }}" >
|
||||
{{ editSection.title }}
|
||||
<small>({{ editSection.count }})</small>
|
||||
</a>
|
||||
|
|
|
@ -13,7 +13,8 @@
|
|||
required
|
||||
placeholder="New Scripted Field"
|
||||
input-focus
|
||||
class="form-control">
|
||||
class="form-control"
|
||||
data-test-subj="editorFieldName">
|
||||
</div>
|
||||
<div ng-if="editor.creating && editor.indexPattern.fields.byName[editor.field.name]" class="hintbox">
|
||||
<p>
|
||||
|
@ -30,7 +31,8 @@
|
|||
ng-model="editor.field.lang"
|
||||
ng-options="lang as lang for lang in editor.scriptingLangs"
|
||||
required
|
||||
class="form-control">
|
||||
class="form-control"
|
||||
data-test-subj="editorFieldLang">
|
||||
<option value="">-- Select Language --</option>
|
||||
</select>
|
||||
</div>
|
||||
|
@ -41,7 +43,8 @@
|
|||
ng-if="editor.field.scripted"
|
||||
ng-model="editor.field.type"
|
||||
ng-options="type as type for type in editor.fieldTypes"
|
||||
class="form-control">
|
||||
class="form-control"
|
||||
data-test-subj="editorFieldType">
|
||||
</select>
|
||||
<input
|
||||
ng-if="!editor.field.scripted"
|
||||
|
@ -70,7 +73,8 @@
|
|||
<select
|
||||
ng-model="editor.selectedFormatId"
|
||||
ng-options="format.id as format.title for format in editor.fieldFormatTypes"
|
||||
class="form-control">
|
||||
class="form-control"
|
||||
data-test-subj="editorSelectedFormatId">
|
||||
</select>
|
||||
<fieldset
|
||||
field-format-editor
|
||||
|
@ -87,7 +91,8 @@
|
|||
<input
|
||||
ng-model="editor.field.count"
|
||||
type="number"
|
||||
class="form-control">
|
||||
class="form-control"
|
||||
data-test-subj=editorFieldCount>
|
||||
|
||||
<span class="input-group-btn">
|
||||
<button
|
||||
|
@ -95,14 +100,14 @@
|
|||
ng-click="editor.field.count = editor.field.count + 1"
|
||||
aria-label="Plus"
|
||||
class="btn btn-default">
|
||||
<i aria-hidden="true" class="fa fa-plus"></i>
|
||||
<i aria-hidden="true" class="fa fa-plus" data-test-subj=editorFieldCountPlus></i>
|
||||
</button>
|
||||
<button
|
||||
type="button"
|
||||
ng-click="editor.field.count = editor.field.count - 1"
|
||||
aria-label="Minus"
|
||||
class="btn btn-default">
|
||||
<i aria-hidden="true" class="fa fa-minus"></i>
|
||||
<i aria-hidden="true" class="fa fa-minus" data-test-subj=editorFieldCountMinus></i>
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
|
@ -111,7 +116,8 @@
|
|||
<div ng-if="editor.field.scripted">
|
||||
<div class="form-group">
|
||||
<label>Script</label>
|
||||
<textarea required class="field-editor_script-input form-control text-monospace" ng-model="editor.field.script"></textarea>
|
||||
<textarea required class="field-editor_script-input form-control text-monospace"
|
||||
ng-model="editor.field.script" data-test-subj="editorFieldScript"></textarea>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
|
|
|
@ -18,20 +18,20 @@
|
|||
<span ng-if="!filter.meta.alias">"{{ filter.meta.value }}"</span>
|
||||
</div>
|
||||
<div class="filter-actions">
|
||||
<a class="action filter-toggle" ng-click="toggleFilter(filter)">
|
||||
<a class="action filter-toggle" ng-click="toggleFilter(filter)" data-test-subj="disableFilter-{{ filter.meta.key }}">
|
||||
<i ng-show="filter.meta.disabled" class="fa fa-fw fa-square-o disabled"></i>
|
||||
<i ng-hide="filter.meta.disabled" class="fa fa-fw fa-check-square-o enabled"></i>
|
||||
</a>
|
||||
<a class="action filter-pin" ng-click="pinFilter(filter)">
|
||||
<a class="action filter-pin" ng-click="pinFilter(filter)" data-test-subj="pinFilter-{{ filter.meta.key }}">
|
||||
<i ng-show="filter.$state.store == 'globalState'" class="fa fa-fw fa-thumb-tack pinned"></i>
|
||||
<i ng-hide="filter.$state.store == 'globalState'" class="fa fa-fw fa-thumb-tack fa-rotate-270 unpinned"></i>
|
||||
</a>
|
||||
<a class="action filter-invert" ng-click="invertFilter(filter)">
|
||||
<a class="action filter-invert" ng-click="invertFilter(filter)" data-test-subj="invertFilter-{{ filter.meta.key }}">
|
||||
<i ng-show="filter.meta.negate" class="fa fa-fw fa-search-plus negative"></i>
|
||||
<i ng-hide="filter.meta.negate" class="fa fa-fw fa-search-minus positive"></i>
|
||||
</a>
|
||||
<a class="action filter-remove" ng-click="removeFilter(filter)">
|
||||
<i class="fa fa-fw fa-trash"></i>
|
||||
<i class="fa fa-fw fa-trash" data-test-subj="removeFilter-{{ filter.meta.key }}"></i>
|
||||
</a>
|
||||
<a class="action filter-edit" ng-click="startEditingFilter(filter)">
|
||||
<i class="fa fa-fw fa-edit"></i>
|
||||
|
@ -73,7 +73,7 @@
|
|||
<a ng-click="showFilterActions = !showFilterActions">
|
||||
Actions
|
||||
<i class="fa"
|
||||
ng-class="{'fa-caret-down': showFilterActions, 'fa-caret-right': !showFilterActions}"></i>
|
||||
ng-class="{'fa-caret-down': showFilterActions, 'fa-caret-right': !showFilterActions}" data-test-subj="showFilterActions"></i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -103,7 +103,7 @@
|
|||
<div class="filter-description"><a ng-click="toggleAll()">Toggle</a></div>
|
||||
</div>
|
||||
<div class="filter-link">
|
||||
<div class="filter-description"><a ng-click="removeAll()">Remove</a></div>
|
||||
<div class="filter-description"><a ng-click="removeAll()" data-test-subj="removeAllFilters">Remove</a></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -43,4 +43,15 @@ bdd.describe('creating and deleting default index', function describeIndexTests(
|
|||
expect(advancedSetting).to.be('America/Phoenix');
|
||||
});
|
||||
});
|
||||
|
||||
bdd.after(function () {
|
||||
return PageObjects.settings.clickKibanaSettings()
|
||||
.then(function TestCallSetAdvancedSettingsForTimezone() {
|
||||
PageObjects.common.saveScreenshot('Settings-advanced-tab');
|
||||
PageObjects.common.debug('calling setAdvancedSetting');
|
||||
return PageObjects.settings.setAdvancedSettings('dateFormat:tz', 'UTC');
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
});
|
||||
|
|
399
test/functional/apps/management/_scripted_fields.js
Normal file
399
test/functional/apps/management/_scripted_fields.js
Normal file
|
@ -0,0 +1,399 @@
|
|||
// Tests for 5 scripted fields;
|
||||
// 1. Lucene expression (number type)
|
||||
// 2. Painless (number type)
|
||||
// 3. Painless (string type)
|
||||
// 3. Painless (boolean type)
|
||||
// 3. Painless (date type)
|
||||
//
|
||||
// Each of these scripted fields has 4 tests (12 tests total);
|
||||
// 1. Create scripted field
|
||||
// 2. See the expected value of the scripted field in Discover doc view
|
||||
// 3. Filter in Discover by the scripted field
|
||||
// 4. Visualize with aggregation on the scripted field by clicking discover.clickFieldListItemVisualize
|
||||
|
||||
import expect from 'expect.js';
|
||||
|
||||
import {
|
||||
bdd,
|
||||
scenarioManager,
|
||||
esClient
|
||||
} from '../../../support';
|
||||
|
||||
import PageObjects from '../../../support/page_objects';
|
||||
|
||||
bdd.before(async function () {
|
||||
await PageObjects.remote.setWindowSize(1200,800);
|
||||
// delete .kibana index and then wait for Kibana to re-create it
|
||||
await esClient.deleteAndUpdateConfigDoc({ 'dateFormat:tz':'UTC' });
|
||||
await PageObjects.settings.navigateTo();
|
||||
await PageObjects.settings.clickKibanaIndicies();
|
||||
await PageObjects.settings.createIndexPattern();
|
||||
await esClient.updateConfigDoc({ 'dateFormat:tz':'UTC' });
|
||||
});
|
||||
|
||||
bdd.describe('creating and using Lucence expression scripted fields', function describeIndexTests() {
|
||||
|
||||
const scriptedExpressionFieldName = 'ram_expr1';
|
||||
|
||||
bdd.it('should create scripted field', async function () {
|
||||
await PageObjects.settings.navigateTo();
|
||||
await PageObjects.settings.clickKibanaIndicies();
|
||||
const startingCount = parseInt(await PageObjects.settings.getScriptedFieldsTabCount());
|
||||
await PageObjects.settings.clickScriptedFieldsTab();
|
||||
await PageObjects.common.debug('add scripted field');
|
||||
await PageObjects.settings
|
||||
.addScriptedField(scriptedExpressionFieldName,
|
||||
'expression', 'number', null, '1', 'doc[\'machine.ram\'].value / (1024 * 1024 * 1024)'
|
||||
);
|
||||
await PageObjects.common.try(async function() {
|
||||
expect(parseInt(await PageObjects.settings.getScriptedFieldsTabCount())).to.be(startingCount + 1);
|
||||
});
|
||||
});
|
||||
|
||||
bdd.it('should see scripted field value in Discover', async function () {
|
||||
const fromTime = '2015-09-17 06:31:44.000';
|
||||
const toTime = '2015-09-18 18:31:44.000';
|
||||
await PageObjects.common.navigateToApp('discover');
|
||||
await PageObjects.common.debug('setAbsoluteRange (' + fromTime + ') to (' + toTime + ')');
|
||||
await PageObjects.header.setAbsoluteRange(fromTime, toTime);
|
||||
await PageObjects.header.isGlobalLoadingIndicatorHidden();
|
||||
await PageObjects.visualize.waitForVisualization();
|
||||
await PageObjects.discover.clickFieldListItem(scriptedExpressionFieldName);
|
||||
await PageObjects.common.try(async function() {
|
||||
await PageObjects.discover.clickFieldListItemAdd(scriptedExpressionFieldName);
|
||||
});
|
||||
await PageObjects.header.isGlobalLoadingIndicatorHidden();
|
||||
await PageObjects.visualize.waitForVisualization();
|
||||
await PageObjects.common.try(async function() {
|
||||
const rowData = await PageObjects.discover.getDocTableIndex(1);
|
||||
expect(rowData).to.be('September 18th 2015, 18:20:57.916 18');
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
bdd.it('should filter by scripted field value in Discover', async function () {
|
||||
await PageObjects.discover.clickFieldListItem(scriptedExpressionFieldName);
|
||||
await PageObjects.common.debug('filter by the first value (14) in the expanded scripted field list');
|
||||
await PageObjects.discover.clickFieldListPlusFilter(scriptedExpressionFieldName, '14');
|
||||
await PageObjects.header.isGlobalLoadingIndicatorHidden();
|
||||
await PageObjects.visualize.waitForVisualization();
|
||||
await PageObjects.common.try(async function() {
|
||||
expect(await PageObjects.discover.getHitCount()).to.be('31');
|
||||
});
|
||||
});
|
||||
|
||||
bdd.it('should visualize scripted field in vertical bar chart', async function () {
|
||||
const expectedChartValues = [ '14 31', '10 29', '7 24', '11 24', '12 23',
|
||||
'20 23', '19 21', '6 20', '17 20', '30 20', '13 19', '18 18', '16 17', '5 16',
|
||||
'8 16', '15 14', '3 13', '2 12', '9 10', '4 9'
|
||||
];
|
||||
await PageObjects.discover.removeAllFilters();
|
||||
await PageObjects.discover.clickFieldListItem(scriptedExpressionFieldName);
|
||||
await PageObjects.discover.clickFieldListItemVisualize(scriptedExpressionFieldName);
|
||||
await PageObjects.header.isGlobalLoadingIndicatorHidden();
|
||||
await PageObjects.visualize.waitForVisualization();
|
||||
await PageObjects.visualize.collapseChart();
|
||||
await PageObjects.settings.setPageSize('All');
|
||||
const data = await PageObjects.visualize.getDataTableData();
|
||||
await PageObjects.common.debug('getDataTableData = ' + data.split('\n'));
|
||||
await PageObjects.common.debug('data=' + data);
|
||||
await PageObjects.common.debug('data.length=' + data.length);
|
||||
await PageObjects.common.saveScreenshot('Visualize-vertical-bar-chart');
|
||||
expect(data.trim().split('\n')).to.eql(expectedChartValues);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
bdd.describe('creating and using Painless numeric scripted fields', function describeIndexTests() {
|
||||
|
||||
const scriptedPainlessFieldName = 'ram_Pain1';
|
||||
|
||||
bdd.it('should create scripted field', async function () {
|
||||
await PageObjects.settings.navigateTo();
|
||||
await PageObjects.settings.clickKibanaIndicies();
|
||||
const startingCount = parseInt(await PageObjects.settings.getScriptedFieldsTabCount());
|
||||
await PageObjects.settings.clickScriptedFieldsTab();
|
||||
await PageObjects.common.debug('add scripted field');
|
||||
await PageObjects.settings
|
||||
.addScriptedField(scriptedPainlessFieldName, 'painless', 'number', null, '1', 'doc[\'machine.ram\'].value / (1024 * 1024 * 1024)');
|
||||
await PageObjects.common.try(async function() {
|
||||
expect(parseInt(await PageObjects.settings.getScriptedFieldsTabCount())).to.be(startingCount + 1);
|
||||
});
|
||||
});
|
||||
|
||||
bdd.it('should see scripted field value in Discover', async function () {
|
||||
const fromTime = '2015-09-17 06:31:44.000';
|
||||
const toTime = '2015-09-18 18:31:44.000';
|
||||
await PageObjects.common.navigateToApp('discover');
|
||||
await PageObjects.common.debug('setAbsoluteRange (' + fromTime + ') to (' + toTime + ')');
|
||||
await PageObjects.header.setAbsoluteRange(fromTime, toTime);
|
||||
await PageObjects.header.isGlobalLoadingIndicatorHidden();
|
||||
await PageObjects.visualize.waitForVisualization();
|
||||
await PageObjects.discover.clickFieldListItem(scriptedPainlessFieldName);
|
||||
await PageObjects.common.try(async function() {
|
||||
await PageObjects.discover.clickFieldListItemAdd(scriptedPainlessFieldName);
|
||||
});
|
||||
await PageObjects.header.isGlobalLoadingIndicatorHidden();
|
||||
await PageObjects.visualize.waitForVisualization();
|
||||
await PageObjects.common.try(async function() {
|
||||
const rowData = await PageObjects.discover.getDocTableIndex(1);
|
||||
expect(rowData).to.be('September 18th 2015, 18:20:57.916 18');
|
||||
});
|
||||
});
|
||||
|
||||
bdd.it('should filter by scripted field value in Discover', async function () {
|
||||
await PageObjects.discover.clickFieldListItem(scriptedPainlessFieldName);
|
||||
await PageObjects.common.debug('filter by the first value (14) in the expanded scripted field list');
|
||||
await PageObjects.discover.clickFieldListPlusFilter(scriptedPainlessFieldName, '14');
|
||||
await PageObjects.header.isGlobalLoadingIndicatorHidden();
|
||||
await PageObjects.visualize.waitForVisualization();
|
||||
await PageObjects.common.try(async function() {
|
||||
expect(await PageObjects.discover.getHitCount()).to.be('31');
|
||||
});
|
||||
});
|
||||
|
||||
bdd.it('should visualize scripted field in vertical bar chart', async function () {
|
||||
const expectedChartValues = [ '14 31', '10 29', '7 24', '11 24', '12 23',
|
||||
'20 23', '19 21', '6 20', '17 20', '30 20', '13 19', '18 18', '16 17', '5 16',
|
||||
'8 16', '15 14', '3 13', '2 12', '9 10', '4 9'
|
||||
];
|
||||
await PageObjects.discover.removeAllFilters();
|
||||
await PageObjects.discover.clickFieldListItem(scriptedPainlessFieldName);
|
||||
await PageObjects.discover.clickFieldListItemVisualize(scriptedPainlessFieldName);
|
||||
await PageObjects.header.isGlobalLoadingIndicatorHidden();
|
||||
await PageObjects.visualize.waitForVisualization();
|
||||
await PageObjects.visualize.collapseChart();
|
||||
await PageObjects.settings.setPageSize('All');
|
||||
const data = await PageObjects.visualize.getDataTableData();
|
||||
await PageObjects.common.debug('getDataTableData = ' + data.split('\n'));
|
||||
await PageObjects.common.debug('data=' + data);
|
||||
await PageObjects.common.debug('data.length=' + data.length);
|
||||
await PageObjects.common.saveScreenshot('Visualize-vertical-bar-chart');
|
||||
expect(data.trim().split('\n')).to.eql(expectedChartValues);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
bdd.describe('creating and using Painless string scripted fields', function describeIndexTests() {
|
||||
|
||||
const scriptedPainlessFieldName2 = 'painString';
|
||||
|
||||
bdd.it('should create scripted field', async function () {
|
||||
await PageObjects.settings.navigateTo();
|
||||
await PageObjects.settings.clickKibanaIndicies();
|
||||
const startingCount = parseInt(await PageObjects.settings.getScriptedFieldsTabCount());
|
||||
await PageObjects.settings.clickScriptedFieldsTab();
|
||||
await PageObjects.common.debug('add scripted field');
|
||||
await PageObjects.settings
|
||||
.addScriptedField(scriptedPainlessFieldName2, 'painless', 'string', null, '1',
|
||||
'if (doc[\'response.raw\'].value == \'200\') { return \'good\'} else { return \'bad\'}');
|
||||
await PageObjects.common.try(async function() {
|
||||
expect(parseInt(await PageObjects.settings.getScriptedFieldsTabCount())).to.be(startingCount + 1);
|
||||
});
|
||||
});
|
||||
|
||||
bdd.it('should see scripted field value in Discover', async function () {
|
||||
const fromTime = '2015-09-17 06:31:44.000';
|
||||
const toTime = '2015-09-18 18:31:44.000';
|
||||
await PageObjects.common.navigateToApp('discover');
|
||||
await PageObjects.common.debug('setAbsoluteRange (' + fromTime + ') to (' + toTime + ')');
|
||||
await PageObjects.header.setAbsoluteRange(fromTime, toTime);
|
||||
await PageObjects.header.isGlobalLoadingIndicatorHidden();
|
||||
await PageObjects.visualize.waitForVisualization();
|
||||
await PageObjects.discover.clickFieldListItem(scriptedPainlessFieldName2);
|
||||
await PageObjects.common.try(async function() {
|
||||
await PageObjects.discover.clickFieldListItemAdd(scriptedPainlessFieldName2);
|
||||
});
|
||||
await PageObjects.header.isGlobalLoadingIndicatorHidden();
|
||||
await PageObjects.visualize.waitForVisualization();
|
||||
await PageObjects.common.try(async function() {
|
||||
const rowData = await PageObjects.discover.getDocTableIndex(1);
|
||||
expect(rowData).to.be('September 18th 2015, 18:20:57.916 good');
|
||||
|
||||
});
|
||||
});
|
||||
|
||||
bdd.it('should filter by scripted field value in Discover', async function () {
|
||||
await PageObjects.discover.clickFieldListItem(scriptedPainlessFieldName2);
|
||||
await PageObjects.common.debug('filter by "bad" in the expanded scripted field list');
|
||||
await PageObjects.discover.clickFieldListPlusFilter(scriptedPainlessFieldName2, 'bad');
|
||||
await PageObjects.header.isGlobalLoadingIndicatorHidden();
|
||||
await PageObjects.visualize.waitForVisualization();
|
||||
await PageObjects.common.try(async function() {
|
||||
expect(await PageObjects.discover.getHitCount()).to.be('27');
|
||||
});
|
||||
await PageObjects.discover.removeAllFilters();
|
||||
});
|
||||
|
||||
bdd.it('should visualize scripted field in vertical bar chart', async function () {
|
||||
await PageObjects.discover.clickFieldListItem(scriptedPainlessFieldName2);
|
||||
await PageObjects.discover.clickFieldListItemVisualize(scriptedPainlessFieldName2);
|
||||
await PageObjects.header.isGlobalLoadingIndicatorHidden();
|
||||
await PageObjects.visualize.waitForVisualization();
|
||||
await PageObjects.visualize.collapseChart();
|
||||
await PageObjects.settings.setPageSize('All');
|
||||
const data = await PageObjects.visualize.getDataTableData();
|
||||
await PageObjects.common.debug('getDataTableData = ' + data.split('\n'));
|
||||
await PageObjects.common.debug('data=' + data);
|
||||
await PageObjects.common.debug('data.length=' + data.length);
|
||||
expect(data.trim().split('\n')).to.eql([ 'good 359', 'bad 27' ]);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
|
||||
bdd.describe('creating and using Painless boolean scripted fields', function describeIndexTests() {
|
||||
|
||||
const scriptedPainlessFieldName2 = 'painBool';
|
||||
|
||||
bdd.it('should create scripted field', async function () {
|
||||
await PageObjects.settings.navigateTo();
|
||||
await PageObjects.settings.clickKibanaIndicies();
|
||||
const startingCount = parseInt(await PageObjects.settings.getScriptedFieldsTabCount());
|
||||
await PageObjects.settings.clickScriptedFieldsTab();
|
||||
await PageObjects.common.debug('add scripted field');
|
||||
await PageObjects.settings
|
||||
.addScriptedField(scriptedPainlessFieldName2, 'painless', 'boolean', null, '1',
|
||||
'doc[\'response.raw\'].value == \'200\'');
|
||||
await PageObjects.common.try(async function() {
|
||||
expect(parseInt(await PageObjects.settings.getScriptedFieldsTabCount())).to.be(startingCount + 1);
|
||||
});
|
||||
});
|
||||
|
||||
bdd.it('should see scripted field value in Discover', async function () {
|
||||
const fromTime = '2015-09-17 06:31:44.000';
|
||||
const toTime = '2015-09-18 18:31:44.000';
|
||||
await PageObjects.common.navigateToApp('discover');
|
||||
await PageObjects.common.debug('setAbsoluteRange (' + fromTime + ') to (' + toTime + ')');
|
||||
await PageObjects.header.setAbsoluteRange(fromTime, toTime);
|
||||
await PageObjects.header.isGlobalLoadingIndicatorHidden();
|
||||
await PageObjects.visualize.waitForVisualization();
|
||||
await PageObjects.discover.clickFieldListItem(scriptedPainlessFieldName2);
|
||||
await PageObjects.common.try(async function() {
|
||||
await PageObjects.discover.clickFieldListItemAdd(scriptedPainlessFieldName2);
|
||||
});
|
||||
await PageObjects.header.isGlobalLoadingIndicatorHidden();
|
||||
await PageObjects.visualize.waitForVisualization();
|
||||
await PageObjects.common.try(async function() {
|
||||
const rowData = await PageObjects.discover.getDocTableIndex(1);
|
||||
expect(rowData).to.be('September 18th 2015, 18:20:57.916 true');
|
||||
|
||||
});
|
||||
});
|
||||
|
||||
bdd.it('should filter by scripted field value in Discover', async function () {
|
||||
await PageObjects.discover.clickFieldListItem(scriptedPainlessFieldName2);
|
||||
await PageObjects.common.debug('filter by "true" in the expanded scripted field list');
|
||||
await PageObjects.discover.clickFieldListPlusFilter(scriptedPainlessFieldName2, 'true');
|
||||
await PageObjects.header.isGlobalLoadingIndicatorHidden();
|
||||
await PageObjects.visualize.waitForVisualization();
|
||||
await PageObjects.common.try(async function() {
|
||||
expect(await PageObjects.discover.getHitCount()).to.be('359');
|
||||
});
|
||||
await PageObjects.discover.removeAllFilters();
|
||||
});
|
||||
|
||||
bdd.it('should visualize scripted field in vertical bar chart', async function () {
|
||||
await PageObjects.discover.clickFieldListItem(scriptedPainlessFieldName2);
|
||||
await PageObjects.discover.clickFieldListItemVisualize(scriptedPainlessFieldName2);
|
||||
await PageObjects.header.isGlobalLoadingIndicatorHidden();
|
||||
await PageObjects.visualize.waitForVisualization();
|
||||
await PageObjects.visualize.collapseChart();
|
||||
await PageObjects.settings.setPageSize('All');
|
||||
const data = await PageObjects.visualize.getDataTableData();
|
||||
await PageObjects.common.debug('getDataTableData = ' + data.split('\n'));
|
||||
await PageObjects.common.debug('data=' + data);
|
||||
await PageObjects.common.debug('data.length=' + data.length);
|
||||
expect(data.trim().split('\n')).to.eql([ 'true 359', 'false 27' ]);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
|
||||
bdd.describe('creating and using Painless date scripted fields', function describeIndexTests() {
|
||||
|
||||
const scriptedPainlessFieldName2 = 'painDate';
|
||||
|
||||
bdd.it('should create scripted field', async function () {
|
||||
await PageObjects.settings.navigateTo();
|
||||
await PageObjects.settings.clickKibanaIndicies();
|
||||
const startingCount = parseInt(await PageObjects.settings.getScriptedFieldsTabCount());
|
||||
await PageObjects.settings.clickScriptedFieldsTab();
|
||||
await PageObjects.common.debug('add scripted field');
|
||||
await PageObjects.settings
|
||||
.addScriptedField(scriptedPainlessFieldName2, 'painless', 'date',
|
||||
{ format: 'Date', datePattern: 'YYYY-MM-DD HH:00' }, '1',
|
||||
'doc[\'utc_time\'].value + (1000) * 60 * 60');
|
||||
await PageObjects.common.try(async function() {
|
||||
expect(parseInt(await PageObjects.settings.getScriptedFieldsTabCount())).to.be(startingCount + 1);
|
||||
});
|
||||
});
|
||||
|
||||
bdd.it('should see scripted field value in Discover', async function () {
|
||||
const fromTime = '2015-09-17 19:22:00.000';
|
||||
const toTime = '2015-09-18 07:00:00.000';
|
||||
await PageObjects.common.navigateToApp('discover');
|
||||
await PageObjects.common.debug('setAbsoluteRange (' + fromTime + ') to (' + toTime + ')');
|
||||
await PageObjects.header.setAbsoluteRange(fromTime, toTime);
|
||||
await PageObjects.header.isGlobalLoadingIndicatorHidden();
|
||||
await PageObjects.visualize.waitForVisualization();
|
||||
await PageObjects.discover.clickFieldListItem(scriptedPainlessFieldName2);
|
||||
await PageObjects.common.try(async function() {
|
||||
await PageObjects.discover.clickFieldListItemAdd(scriptedPainlessFieldName2);
|
||||
});
|
||||
await PageObjects.header.isGlobalLoadingIndicatorHidden();
|
||||
await PageObjects.visualize.waitForVisualization();
|
||||
await PageObjects.common.try(async function() {
|
||||
const rowData = await PageObjects.discover.getDocTableIndex(1);
|
||||
expect(rowData).to.be('September 18th 2015, 06:52:55.953 2015-09-18 07:00');
|
||||
});
|
||||
});
|
||||
|
||||
bdd.it('should filter by scripted field value in Discover', async function () {
|
||||
await PageObjects.discover.clickFieldListItem(scriptedPainlessFieldName2);
|
||||
await PageObjects.common.debug('filter by "2015-09-17 23:00" in the expanded scripted field list');
|
||||
await PageObjects.discover.clickFieldListPlusFilter(scriptedPainlessFieldName2, '2015-09-17 23:00');
|
||||
await PageObjects.header.isGlobalLoadingIndicatorHidden();
|
||||
await PageObjects.visualize.waitForVisualization();
|
||||
await PageObjects.common.try(async function() {
|
||||
expect(await PageObjects.discover.getHitCount()).to.be('1');
|
||||
});
|
||||
await PageObjects.discover.removeAllFilters();
|
||||
});
|
||||
|
||||
bdd.it('should visualize scripted field in vertical bar chart', async function () {
|
||||
await PageObjects.discover.clickFieldListItem(scriptedPainlessFieldName2);
|
||||
await PageObjects.discover.clickFieldListItemVisualize(scriptedPainlessFieldName2);
|
||||
await PageObjects.header.isGlobalLoadingIndicatorHidden();
|
||||
await PageObjects.visualize.waitForVisualization();
|
||||
await PageObjects.visualize.collapseChart();
|
||||
await PageObjects.settings.setPageSize('All');
|
||||
const data = await PageObjects.visualize.getDataTableData();
|
||||
await PageObjects.common.debug('getDataTableData = ' + data.split('\n'));
|
||||
await PageObjects.common.debug('data=' + data);
|
||||
await PageObjects.common.debug('data.length=' + data.length);
|
||||
expect(data.trim().split('\n')).to.eql([
|
||||
'2015-09-17 20:00 1',
|
||||
'2015-09-17 21:00 1',
|
||||
'2015-09-17 23:00 1',
|
||||
'2015-09-18 00:00 1',
|
||||
'2015-09-18 03:00 1',
|
||||
'2015-09-18 04:00 1',
|
||||
'2015-09-18 04:00 1',
|
||||
'2015-09-18 04:00 1',
|
||||
'2015-09-18 04:00 1',
|
||||
'2015-09-18 05:00 1',
|
||||
'2015-09-18 05:00 1',
|
||||
'2015-09-18 05:00 1',
|
||||
'2015-09-18 05:00 1',
|
||||
'2015-09-18 06:00 1',
|
||||
'2015-09-18 06:00 1',
|
||||
'2015-09-18 06:00 1',
|
||||
'2015-09-18 06:00 1',
|
||||
'2015-09-18 07:00 1',
|
||||
'2015-09-18 07:00 1',
|
||||
'2015-09-18 07:00 1'
|
||||
]);
|
||||
});
|
||||
|
||||
});
|
|
@ -5,15 +5,14 @@ bdd.describe('settings app', function () {
|
|||
|
||||
// on setup, we create an settingsPage instance
|
||||
// that we will use for all the tests
|
||||
bdd.before(function () {
|
||||
return scenarioManager.loadIfEmpty('makelogs');
|
||||
bdd.before(async function () {
|
||||
await scenarioManager.unload('logstashFunctional');
|
||||
await scenarioManager.loadIfEmpty('makelogs');
|
||||
});
|
||||
|
||||
bdd.after(function () {
|
||||
return scenarioManager.unload('makelogs')
|
||||
.then(function () {
|
||||
return esClient.delete('.kibana');
|
||||
});
|
||||
bdd.after(async function () {
|
||||
await scenarioManager.unload('makelogs');
|
||||
await esClient.delete('.kibana');
|
||||
});
|
||||
|
||||
require('./_initial_state');
|
||||
|
@ -22,4 +21,5 @@ bdd.describe('settings app', function () {
|
|||
require('./_index_pattern_results_sort');
|
||||
require('./_index_pattern_popularity');
|
||||
require('./_kibana_settings');
|
||||
require('./_scripted_fields');
|
||||
});
|
||||
|
|
|
@ -285,4 +285,41 @@ export default class DiscoverPage {
|
|||
.catch(() => false);
|
||||
}
|
||||
|
||||
clickFieldListItem(field) {
|
||||
return this.findTimeout
|
||||
.findByCssSelector('li[attr-field="' + field + '"]').click();
|
||||
}
|
||||
|
||||
async clickFieldListItemAdd(field) {
|
||||
await PageObjects.common.findTestSubject('fieldToggle-' + field).click();
|
||||
}
|
||||
|
||||
async clickFieldListItemVisualize(field) {
|
||||
return await PageObjects.common.try(async () => {
|
||||
await PageObjects.common.findTestSubject('fieldVisualize-' + field).click();
|
||||
});
|
||||
}
|
||||
|
||||
clickFieldListPlusFilter(field, value) {
|
||||
// this method requires the field details to be open from clickFieldListItem()
|
||||
// findTestSubject doesn't handle spaces in the data-test-subj value
|
||||
return this.findTimeout
|
||||
.findByCssSelector('i[data-test-subj="plus-' + field + '-' + value + '"]')
|
||||
.click();
|
||||
}
|
||||
|
||||
clickFieldListMinusFilter(field, value) {
|
||||
// this method requires the field details to be open from clickFieldListItem()
|
||||
// findTestSubject doesn't handle spaces in the data-test-subj value
|
||||
return this.findTimeout
|
||||
.findByCssSelector('i[data-test-subj="minus-' + field + '-' + value + '"]')
|
||||
.click();
|
||||
}
|
||||
|
||||
async removeAllFilters() {
|
||||
await PageObjects.common.findTestSubject('showFilterActions').click();
|
||||
await PageObjects.common.findTestSubject('removeAllFilters').click();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -13,21 +13,21 @@ export default class SettingsPage {
|
|||
this.remote = remote;
|
||||
}
|
||||
|
||||
clickNavigation() {
|
||||
async clickNavigation() {
|
||||
// TODO: find better way to target the element
|
||||
return this.remote.findDisplayedByCssSelector('.app-link:nth-child(5) a').click();
|
||||
await this.remote.findDisplayedByCssSelector('.app-link:nth-child(5) a').click();
|
||||
}
|
||||
|
||||
clickLinkText(text) {
|
||||
return this.remote.findDisplayedByLinkText(text).click();
|
||||
async clickLinkText(text) {
|
||||
await this.remote.findDisplayedByLinkText(text).click();
|
||||
}
|
||||
|
||||
clickKibanaSettings() {
|
||||
return this.clickLinkText('Advanced Settings');
|
||||
async clickKibanaSettings() {
|
||||
await this.clickLinkText('Advanced Settings');
|
||||
}
|
||||
|
||||
clickKibanaIndicies() {
|
||||
return this.clickLinkText('Index Patterns');
|
||||
async clickKibanaIndicies() {
|
||||
await this.clickLinkText('Index Patterns');
|
||||
}
|
||||
|
||||
getAdvancedSettings(propertyName) {
|
||||
|
@ -36,43 +36,19 @@ export default class SettingsPage {
|
|||
.getVisibleText();
|
||||
}
|
||||
|
||||
setAdvancedSettings(propertyName, propertyValue) {
|
||||
const self = this;
|
||||
|
||||
return PageObjects.common.findTestSubject('advancedSetting-' + propertyName + '-editButton')
|
||||
.click()
|
||||
.then(() => {
|
||||
return PageObjects.header.isGlobalLoadingIndicatorHidden();
|
||||
})
|
||||
.then(() => {
|
||||
return PageObjects.common.sleep(1000);
|
||||
})
|
||||
.then(function setAdvancedSettingsClickPropertyValue(selectList) {
|
||||
return self.remote.setFindTimeout(defaultFindTimeout)
|
||||
.findByCssSelector('option[label="' + propertyValue + '"]')
|
||||
.click();
|
||||
})
|
||||
.then(() => {
|
||||
return PageObjects.header.isGlobalLoadingIndicatorHidden();
|
||||
})
|
||||
.then(function setAdvancedSettingsClickSaveButton() {
|
||||
return PageObjects.common.findTestSubject('advancedSetting-' + propertyName + '-saveButton')
|
||||
.click();
|
||||
})
|
||||
.then(() => {
|
||||
return PageObjects.header.isGlobalLoadingIndicatorHidden();
|
||||
});
|
||||
async setAdvancedSettings(propertyName, propertyValue) {
|
||||
await PageObjects.common.findTestSubject('advancedSetting-' + propertyName + '-editButton').click();
|
||||
await PageObjects.header.isGlobalLoadingIndicatorHidden();
|
||||
await PageObjects.common.sleep(1000);
|
||||
await this.remote.setFindTimeout(defaultFindTimeout)
|
||||
.findByCssSelector('option[label="' + propertyValue + '"]').click();
|
||||
await PageObjects.header.isGlobalLoadingIndicatorHidden();
|
||||
await PageObjects.common.findTestSubject('advancedSetting-' + propertyName + '-saveButton').click();
|
||||
await PageObjects.header.isGlobalLoadingIndicatorHidden();
|
||||
}
|
||||
|
||||
getAdvancedSettings(propertyName) {
|
||||
const self = this;
|
||||
PageObjects.common.debug('in setAdvancedSettings');
|
||||
return PageObjects.common.findTestSubject('advancedSetting-' + propertyName + '-currentValue')
|
||||
.getVisibleText();
|
||||
}
|
||||
|
||||
navigateTo() {
|
||||
return PageObjects.common.navigateToApp('settings');
|
||||
async navigateTo() {
|
||||
await PageObjects.common.navigateToApp('settings');
|
||||
}
|
||||
|
||||
getTimeBasedEventsCheckbox() {
|
||||
|
@ -97,32 +73,22 @@ export default class SettingsPage {
|
|||
.findDisplayedByCssSelector('select[ng-model="index.timeField"]');
|
||||
}
|
||||
|
||||
selectTimeFieldOption(selection) {
|
||||
async selectTimeFieldOption(selection) {
|
||||
// open dropdown
|
||||
return this.getTimeFieldNameField().click()
|
||||
.then(() => {
|
||||
// close dropdown, keep focus
|
||||
return this.getTimeFieldNameField().click();
|
||||
})
|
||||
.then(() => {
|
||||
return PageObjects.header.isGlobalLoadingIndicatorHidden();
|
||||
})
|
||||
.then(() => {
|
||||
return PageObjects.common.try(() => {
|
||||
return this.getTimeFieldOption(selection).click()
|
||||
.then(() => {
|
||||
return this.getTimeFieldOption(selection).isSelected();
|
||||
})
|
||||
.then(selected => {
|
||||
if (!selected) throw new Error('option not selected: ' + selected);
|
||||
});
|
||||
});
|
||||
(await this.getTimeFieldNameField()).click();
|
||||
// close dropdown, keep focus
|
||||
(await this.getTimeFieldNameField()).click();
|
||||
await PageObjects.header.isGlobalLoadingIndicatorHidden();
|
||||
await PageObjects.common.try(async () => {
|
||||
(await this.getTimeFieldOption(selection)).click();
|
||||
const selected = (await this.getTimeFieldOption(selection)).isSelected();
|
||||
if (!selected) throw new Error('option not selected: ' + selected);
|
||||
});
|
||||
}
|
||||
|
||||
getTimeFieldOption(selection) {
|
||||
return this.remote.setFindTimeout(defaultFindTimeout)
|
||||
.findDisplayedByCssSelector('option[label="' + selection + '"]').click();
|
||||
.findDisplayedByCssSelector('option[label="' + selection + '"]');
|
||||
}
|
||||
|
||||
getCreateButton() {
|
||||
|
@ -130,16 +96,14 @@ export default class SettingsPage {
|
|||
.findDisplayedByCssSelector('[type="submit"]');
|
||||
}
|
||||
|
||||
clickDefaultIndexButton() {
|
||||
return this.remote.setFindTimeout(defaultFindTimeout)
|
||||
.findByCssSelector('button.btn.btn-success.ng-scope').click()
|
||||
.then(() => {
|
||||
return PageObjects.header.isGlobalLoadingIndicatorHidden();
|
||||
});
|
||||
async clickDefaultIndexButton() {
|
||||
await this.remote.setFindTimeout(defaultFindTimeout)
|
||||
.findByCssSelector('button.btn.btn-success.ng-scope').click();
|
||||
await PageObjects.header.isGlobalLoadingIndicatorHidden();
|
||||
}
|
||||
|
||||
clickDeletePattern() {
|
||||
return this.remote.setFindTimeout(defaultFindTimeout)
|
||||
async clickDeletePattern() {
|
||||
await this.remote.setFindTimeout(defaultFindTimeout)
|
||||
.findByCssSelector('button.btn.btn-danger.ng-scope').click();
|
||||
}
|
||||
|
||||
|
@ -152,6 +116,7 @@ export default class SettingsPage {
|
|||
return this.remote.setFindTimeout(defaultFindTimeout)
|
||||
.findByCssSelector('h1');
|
||||
}
|
||||
|
||||
getTableHeader() {
|
||||
return this.remote.setFindTimeout(defaultFindTimeout)
|
||||
.findAllByCssSelector('table.table.table-condensed thead tr th');
|
||||
|
@ -188,19 +153,25 @@ export default class SettingsPage {
|
|||
}
|
||||
|
||||
getFieldsTabCount() {
|
||||
const self = this;
|
||||
const selector = 'li.kbn-management-tab.active a small';
|
||||
|
||||
return PageObjects.common.try(function () {
|
||||
return self.remote.setFindTimeout(defaultFindTimeout / 10)
|
||||
.findByCssSelector(selector).getVisibleText()
|
||||
.then(function (theText) {
|
||||
// the value has () around it, remove them
|
||||
return PageObjects.common.try(() => {
|
||||
return this.remote.setFindTimeout(defaultFindTimeout / 10)
|
||||
.findByCssSelector('a[data-test-subj="tab-indexedFields"] small').getVisibleText()
|
||||
.then((theText) => {
|
||||
// the value has () around it, remove them
|
||||
return theText.replace(/\((.*)\)/, '$1');
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
async getScriptedFieldsTabCount() {
|
||||
const selector = 'a[data-test-subj="tab-scriptedFields"] small';
|
||||
return await PageObjects.common.try(async () => {
|
||||
const theText = await this.remote.setFindTimeout(defaultFindTimeout / 10)
|
||||
.findByCssSelector(selector).getVisibleText();
|
||||
return theText.replace(/\((.*)\)/, '$1');
|
||||
});
|
||||
}
|
||||
|
||||
getPageSize() {
|
||||
let selectedItemLabel = '';
|
||||
return this.remote.setFindTimeout(defaultFindTimeout)
|
||||
|
@ -234,140 +205,235 @@ export default class SettingsPage {
|
|||
});
|
||||
}
|
||||
|
||||
goToPage(pageNum) {
|
||||
return this.remote.setFindTimeout(defaultFindTimeout)
|
||||
async goToPage(pageNum) {
|
||||
await this.remote.setFindTimeout(defaultFindTimeout)
|
||||
.findByCssSelector('ul.pagination-other-pages-list.pagination-sm.ng-scope li.ng-scope:nth-child(' +
|
||||
(pageNum + 1) + ') a.ng-binding')
|
||||
.click()
|
||||
.then(function () {
|
||||
return PageObjects.header.isGlobalLoadingIndicatorHidden();
|
||||
});
|
||||
.click();
|
||||
await PageObjects.header.isGlobalLoadingIndicatorHidden();
|
||||
}
|
||||
|
||||
openControlsRow(row) {
|
||||
return this.remote.setFindTimeout(defaultFindTimeout)
|
||||
async openControlsRow(row) {
|
||||
await this.remote.setFindTimeout(defaultFindTimeout)
|
||||
.findByCssSelector('table.table.table-condensed tbody tr:nth-child(' +
|
||||
(row + 1) + ') td.ng-scope div.actions a.btn.btn-xs.btn-default i.fa.fa-pencil')
|
||||
.click();
|
||||
}
|
||||
|
||||
openControlsByName(name) {
|
||||
return this.remote.setFindTimeout(defaultFindTimeout)
|
||||
async openControlsByName(name) {
|
||||
await this.remote.setFindTimeout(defaultFindTimeout)
|
||||
.findByCssSelector('div.actions a.btn.btn-xs.btn-default[href$="/' + name + '"]')
|
||||
.click();
|
||||
}
|
||||
|
||||
increasePopularity() {
|
||||
return this.remote.setFindTimeout(defaultFindTimeout)
|
||||
async increasePopularity() {
|
||||
await this.remote.setFindTimeout(defaultFindTimeout)
|
||||
.findByCssSelector('button.btn.btn-default[aria-label="Plus"]')
|
||||
.click()
|
||||
.then(() => {
|
||||
return PageObjects.header.isGlobalLoadingIndicatorHidden();
|
||||
});
|
||||
.click();
|
||||
await PageObjects.header.isGlobalLoadingIndicatorHidden();
|
||||
}
|
||||
|
||||
getPopularity() {
|
||||
return this.remote.setFindTimeout(defaultFindTimeout)
|
||||
.findByCssSelector('input[ng-model="editor.field.count"]')
|
||||
.then(input => {
|
||||
return input.getProperty('value');
|
||||
});
|
||||
.getProperty('value');
|
||||
}
|
||||
|
||||
controlChangeCancel() {
|
||||
return this.remote.setFindTimeout(defaultFindTimeout)
|
||||
async controlChangeCancel() {
|
||||
await this.remote.setFindTimeout(defaultFindTimeout)
|
||||
.findByCssSelector('button.btn.btn-primary[aria-label="Cancel"]')
|
||||
.click()
|
||||
.then(() => {
|
||||
return PageObjects.header.isGlobalLoadingIndicatorHidden();
|
||||
});
|
||||
.click();
|
||||
await PageObjects.header.isGlobalLoadingIndicatorHidden();
|
||||
}
|
||||
|
||||
controlChangeSave() {
|
||||
return this.remote.setFindTimeout(defaultFindTimeout)
|
||||
async controlChangeSave() {
|
||||
await this.remote.setFindTimeout(defaultFindTimeout)
|
||||
.findByCssSelector('button.btn.btn-success.ng-binding[aria-label="Update Field"]')
|
||||
.click()
|
||||
.then(() => {
|
||||
return PageObjects.header.isGlobalLoadingIndicatorHidden();
|
||||
});
|
||||
.click();
|
||||
await PageObjects.header.isGlobalLoadingIndicatorHidden();
|
||||
}
|
||||
|
||||
setPageSize(size) {
|
||||
return this.remote.setFindTimeout(defaultFindTimeout)
|
||||
async setPageSize(size) {
|
||||
await this.remote.setFindTimeout(defaultFindTimeout)
|
||||
.findByCssSelector('form.form-inline.pagination-size.ng-scope.ng-pristine.ng-valid div.form-group option[label="' + size + '"]')
|
||||
.click()
|
||||
.then(() => {
|
||||
return PageObjects.header.isGlobalLoadingIndicatorHidden();
|
||||
.click();
|
||||
await PageObjects.header.isGlobalLoadingIndicatorHidden();
|
||||
}
|
||||
|
||||
async createIndexPattern() {
|
||||
await PageObjects.common.try(async () => {
|
||||
await this.navigateTo();
|
||||
await this.clickKibanaIndicies();
|
||||
await this.selectTimeFieldOption('@timestamp');
|
||||
await this.getCreateButton().click();
|
||||
});
|
||||
await PageObjects.header.isGlobalLoadingIndicatorHidden();
|
||||
await PageObjects.common.try(async () => {
|
||||
const currentUrl = await this.remote.getCurrentUrl();
|
||||
PageObjects.common.log('currentUrl', currentUrl);
|
||||
if (!currentUrl.match(/indices\/.+\?/)) {
|
||||
throw new Error('Index pattern not created');
|
||||
} else {
|
||||
PageObjects.common.debug('Index pattern created: ' + currentUrl);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
createIndexPattern() {
|
||||
return PageObjects.common.try(() => {
|
||||
return this.navigateTo()
|
||||
.then(() => {
|
||||
return this.clickKibanaIndicies();
|
||||
})
|
||||
.then(() => {
|
||||
return this.selectTimeFieldOption('@timestamp');
|
||||
})
|
||||
.then(() => {
|
||||
return this.getCreateButton().click();
|
||||
});
|
||||
})
|
||||
.then(() => {
|
||||
return PageObjects.header.isGlobalLoadingIndicatorHidden();
|
||||
})
|
||||
.then(() => {
|
||||
return PageObjects.common.try(() => {
|
||||
return this.remote.getCurrentUrl()
|
||||
.then(function (currentUrl) {
|
||||
PageObjects.common.log('currentUrl', currentUrl);
|
||||
|
||||
if (!currentUrl.match(/indices\/.+\?/)) {
|
||||
throw new Error('Index pattern not created');
|
||||
} else {
|
||||
PageObjects.common.debug('Index pattern created: ' + currentUrl);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
removeIndexPattern() {
|
||||
async removeIndexPattern() {
|
||||
let alertText;
|
||||
|
||||
return PageObjects.common.try(() => {
|
||||
await PageObjects.common.try(async () => {
|
||||
PageObjects.common.debug('click delete index pattern button');
|
||||
return this.clickDeletePattern();
|
||||
})
|
||||
.then(() => {
|
||||
return PageObjects.common.try(() => {
|
||||
PageObjects.common.debug('getAlertText');
|
||||
return this.remote.getAlertText();
|
||||
});
|
||||
})
|
||||
.then(function (text) {
|
||||
alertText = text;
|
||||
})
|
||||
.then(() => {
|
||||
return PageObjects.common.try(() => {
|
||||
PageObjects.common.debug('acceptAlert');
|
||||
return this.remote.acceptAlert();
|
||||
});
|
||||
})
|
||||
.then(() => {
|
||||
return PageObjects.common.try(() => {
|
||||
return this.remote.getCurrentUrl()
|
||||
.then(function (currentUrl) {
|
||||
if (currentUrl.match(/indices\/.+\?/)) {
|
||||
throw new Error('Index pattern not removed');
|
||||
}
|
||||
});
|
||||
});
|
||||
})
|
||||
.then(() => {
|
||||
return alertText;
|
||||
await this.clickDeletePattern();
|
||||
});
|
||||
await PageObjects.common.try(async () => {
|
||||
PageObjects.common.debug('getAlertText');
|
||||
alertText = await this.remote.getAlertText();
|
||||
});
|
||||
await PageObjects.common.try(async () => {
|
||||
PageObjects.common.debug('acceptAlert');
|
||||
await this.remote.acceptAlert();
|
||||
});
|
||||
await PageObjects.common.try(async () => {
|
||||
const currentUrl = await this.remote.getCurrentUrl();
|
||||
if (currentUrl.match(/indices\/.+\?/)) {
|
||||
throw new Error('Index pattern not removed');
|
||||
}
|
||||
});
|
||||
return alertText;
|
||||
}
|
||||
|
||||
async clickFieldsTab() {
|
||||
PageObjects.common.debug('click Fields tab');
|
||||
await PageObjects.common.findTestSubject('tab-indexFields')
|
||||
.click();
|
||||
}
|
||||
|
||||
async clickScriptedFieldsTab() {
|
||||
PageObjects.common.debug('click Scripted Fields tab');
|
||||
await PageObjects.common.findTestSubject('tab-scriptedFields')
|
||||
.click();
|
||||
}
|
||||
|
||||
async clickSourceFiltersTab() {
|
||||
PageObjects.common.debug('click Source Filters tab');
|
||||
await PageObjects.common.findTestSubject('tab-sourceFilters')
|
||||
.click();
|
||||
}
|
||||
|
||||
async addScriptedField(name, language, type, format, popularity, script) {
|
||||
await this.clickAddScriptedField();
|
||||
await this.setScriptedFieldName(name);
|
||||
if (language) await this.setScriptedFieldLanguage(language);
|
||||
if (type) await this.setScriptedFieldType(type);
|
||||
if (format) {
|
||||
await this.setScriptedFieldFormat(format.format);
|
||||
// null means leave - default - which has no other settings
|
||||
// Url adds Type, Url Template, and Label Template
|
||||
// Date adds moment.js format pattern (Default: "MMMM Do YYYY, HH:mm:ss.SSS")
|
||||
// String adds Transform
|
||||
switch(format.format) {
|
||||
case 'Url':
|
||||
await this.setScriptedFieldUrlType(format.type);
|
||||
await this.setScriptedFieldUrlTemplate(format.template);
|
||||
await this.setScriptedFieldUrlLabelTemplate(format.labelTemplate);
|
||||
break;
|
||||
case 'Date':
|
||||
await this.setScriptedFieldDatePattern(format.datePattern);
|
||||
break;
|
||||
case 'String':
|
||||
await this.setScriptedFieldStringTransform(format.stringTransform);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (popularity) await this.setScriptedFieldPopularity(popularity);
|
||||
await this.setScriptedFieldScript(script);
|
||||
await this.clickSaveScriptedField();
|
||||
}
|
||||
|
||||
async clickAddScriptedField() {
|
||||
PageObjects.common.debug('click Add Scripted Field');
|
||||
await this.remote.setFindTimeout(defaultFindTimeout)
|
||||
.findByCssSelector('a[aria-label="Add Scripted Field"]')
|
||||
.click();
|
||||
}
|
||||
|
||||
async clickSaveScriptedField() {
|
||||
PageObjects.common.debug('click Save Scripted Field');
|
||||
await this.remote.setFindTimeout(defaultFindTimeout)
|
||||
.findByCssSelector('button[aria-label="Create Field"]')
|
||||
.click();
|
||||
}
|
||||
|
||||
async setScriptedFieldName(name) {
|
||||
PageObjects.common.debug('set scripted field name = ' + name);
|
||||
await PageObjects.common.findTestSubject('editorFieldName').type(name);
|
||||
}
|
||||
|
||||
async setScriptedFieldLanguage(language) {
|
||||
PageObjects.common.debug('set scripted field language = ' + language);
|
||||
await this.remote.setFindTimeout(defaultFindTimeout)
|
||||
.findByCssSelector('select[data-test-subj="editorFieldLang"] > option[label="' + language + '"]')
|
||||
.click();
|
||||
}
|
||||
|
||||
async setScriptedFieldType(type) {
|
||||
PageObjects.common.debug('set scripted field type = ' + type);
|
||||
await this.remote.setFindTimeout(defaultFindTimeout)
|
||||
.findByCssSelector('select[data-test-subj="editorFieldType"] > option[label="' + type + '"]')
|
||||
.click();
|
||||
}
|
||||
|
||||
async setScriptedFieldFormat(format) {
|
||||
PageObjects.common.debug('set scripted field format = ' + format);
|
||||
await this.remote.setFindTimeout(defaultFindTimeout)
|
||||
.findByCssSelector('select[data-test-subj="editorSelectedFormatId"] > option[label="' + format + '"]')
|
||||
.click();
|
||||
}
|
||||
|
||||
async setScriptedFieldUrlType(type) {
|
||||
PageObjects.common.debug('set scripted field Url type = ' + type);
|
||||
await this.remote.setFindTimeout(defaultFindTimeout)
|
||||
.findByCssSelector('select[ng-model="editor.formatParams.type"] > option[label="' + type + '"]')
|
||||
.click();
|
||||
}
|
||||
|
||||
async setScriptedFieldUrlTemplate(template) {
|
||||
PageObjects.common.debug('set scripted field Url Template = ' + template);
|
||||
await this.remote.setFindTimeout(defaultFindTimeout)
|
||||
.findByCssSelector('input[ng-model="editor.formatParams.labelTemplate"]')
|
||||
.type(template);
|
||||
}
|
||||
|
||||
async setScriptedFieldUrlLabelTemplate(labelTemplate) {
|
||||
PageObjects.common.debug('set scripted field Url Label Template = ' + labelTemplate);
|
||||
await this.remote.setFindTimeout(defaultFindTimeout)
|
||||
.findByCssSelector('input[ng-model="editor.formatParams.labelTemplate"]')
|
||||
.type(labelTemplate);
|
||||
}
|
||||
|
||||
async setScriptedFieldDatePattern(datePattern) {
|
||||
PageObjects.common.debug('set scripted field Date Pattern = ' + datePattern);
|
||||
await this.remote.setFindTimeout(defaultFindTimeout)
|
||||
.findByCssSelector('input[ng-model="model"]')
|
||||
.clearValue().type(datePattern);
|
||||
}
|
||||
|
||||
async setScriptedFieldStringTransform(stringTransform) {
|
||||
PageObjects.common.debug('set scripted field string Transform = ' + stringTransform);
|
||||
await this.remote.setFindTimeout(defaultFindTimeout)
|
||||
.findByCssSelector('select[ng-model="editor.formatParams.transform"] > option[label="' + stringTransform + '"]')
|
||||
.click();
|
||||
}
|
||||
|
||||
async setScriptedFieldPopularity(popularity) {
|
||||
PageObjects.common.debug('set scripted field popularity = ' + popularity);
|
||||
await PageObjects.common.findTestSubject('editorFieldCount').type(popularity);
|
||||
}
|
||||
|
||||
async setScriptedFieldScript(script) {
|
||||
PageObjects.common.debug('set scripted field script = ' + script);
|
||||
await PageObjects.common.findTestSubject('editorFieldScript').type(script);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -570,7 +570,7 @@ export default class VisualizePage {
|
|||
return chartAreaObj
|
||||
.getAttribute('height')
|
||||
.then(function (theHeight) {
|
||||
yAxisHeight = theHeight; // - 5; // MAGIC NUMBER - clipPath extends a bit above the top of the y-axis and below x-axis
|
||||
yAxisHeight = theHeight;
|
||||
PageObjects.common.debug('theHeight = ' + theHeight);
|
||||
return theHeight;
|
||||
});
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue