mirror of
https://github.com/elastic/kibana.git
synced 2025-04-24 01:38:56 -04:00
Many new tests for settings tab. Asserts changed to expect library.
This commit is contained in:
parent
ab165af459
commit
d11cc86973
3 changed files with 898 additions and 37 deletions
661
test/functional/testSettings.js
Normal file
661
test/functional/testSettings.js
Normal file
|
@ -0,0 +1,661 @@
|
|||
// https://github.com/elastic/kibana-qa/blob/master/settings.md
|
||||
|
||||
define(function (require) {
|
||||
|
||||
var registerSuite = require('intern!object');
|
||||
var expect = require('intern/dojo/node!expect.js');
|
||||
//var ScenarioManager = require('intern/dojo/node!../fixtures/scenarioManager');
|
||||
var fs = require('intern/dojo/node!fs');
|
||||
var pollUntil = require('intern/dojo/node!leadfoot/helpers/pollUntil');
|
||||
var SettingsPage = require('../support/pages/SettingsPage');
|
||||
var HeaderPage = require('../support/pages/HeaderPage');
|
||||
var DiscoverPage = require('../support/pages/DiscoverPage');
|
||||
var Promise = require('bluebird');
|
||||
|
||||
|
||||
function tryForTime(timeout, block) {
|
||||
var start = Date.now();
|
||||
var lastTry = 0;
|
||||
|
||||
function attempt() {
|
||||
lastTry = Date.now();
|
||||
|
||||
if (lastTry - start > timeout) {
|
||||
throw new Error('timeout');
|
||||
}
|
||||
|
||||
return Promise.try(block).catch(function (err) {
|
||||
console.log('failed with ' + err.message);
|
||||
console.log('trying again in 1 second');
|
||||
return Promise.delay(1000).then(attempt);
|
||||
});
|
||||
}
|
||||
|
||||
return Promise.try(attempt);
|
||||
}
|
||||
|
||||
|
||||
registerSuite(function () {
|
||||
var settingsPage;
|
||||
var headerPage;
|
||||
var url = 'http://localhost:5601';
|
||||
|
||||
var expectedAlertText = 'Are you sure you want to remove this index pattern?';
|
||||
return {
|
||||
// on setup, we create an settingsPage instance
|
||||
// that we will use for all the tests
|
||||
setup: function () {
|
||||
// curl -XDELETE http://localhost:9200/.kibana
|
||||
|
||||
settingsPage = new SettingsPage(this.remote);
|
||||
headerPage = new HeaderPage(this.remote);
|
||||
},
|
||||
|
||||
/*
|
||||
** Test the default state of checboxes and the 2 text input fields
|
||||
*/
|
||||
'testSettingsInitialState': function () {
|
||||
return this.remote
|
||||
.get(url)
|
||||
.then(function () {
|
||||
return settingsPage
|
||||
.getTimeBasedEventsCheckbox()
|
||||
.isSelected();
|
||||
})
|
||||
.then(function (selected) {
|
||||
expect(selected).to.be.ok();
|
||||
return settingsPage
|
||||
.getNameIsPatternCheckbox()
|
||||
.isSelected()
|
||||
.then(function (nameIsPatternSelected) {
|
||||
expect(nameIsPatternSelected).to.not.be.ok();
|
||||
return settingsPage
|
||||
.getIndexPatternField()
|
||||
.then(function (patternField) {
|
||||
return patternField
|
||||
.getProperty('value')
|
||||
.then(function (pattern) {
|
||||
headerPage.log('patternField value = ' + pattern);
|
||||
expect(pattern).to.be('logstash-*');
|
||||
return settingsPage.getTimeFieldNameField()
|
||||
.isSelected()
|
||||
.then(function (timeFieldIsSelected) {
|
||||
headerPage.log('timeField isSelected = ' + timeFieldIsSelected);
|
||||
expect(timeFieldIsSelected).to.not.be.ok();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
/*
|
||||
** Ensure Create button is disabled until you select a time field
|
||||
*/
|
||||
'testCreateButtonDisabledUntilTimeFieldSelected': function () {
|
||||
return this.remote
|
||||
.get(url)
|
||||
.then(function () {
|
||||
return settingsPage
|
||||
.getCreateButton()
|
||||
.isEnabled();
|
||||
})
|
||||
.then(function (enabled) {
|
||||
expect(enabled).to.not.be.ok();
|
||||
})
|
||||
.then(function () {
|
||||
// select a time field and check that Create button is enabled
|
||||
return settingsPage
|
||||
.selectTimeFieldOption('@timestamp');
|
||||
})
|
||||
.then(function () {
|
||||
return settingsPage
|
||||
.getCreateButton()
|
||||
.isEnabled();
|
||||
})
|
||||
.then(function (enabled) {
|
||||
expect(enabled).to.be.ok();
|
||||
});
|
||||
},
|
||||
|
||||
|
||||
/*
|
||||
** Test that unchecking the Time-based Events checkbox hides the Name is pattern checkbox
|
||||
*/
|
||||
'testSettingsCheckboxHide': function () {
|
||||
return this.remote
|
||||
.get('http://localhost:5601')
|
||||
.then(function () {
|
||||
return settingsPage
|
||||
.getTimeBasedEventsCheckbox()
|
||||
.then(function (selected) {
|
||||
// uncheck the 'time-based events' checkbox
|
||||
return selected.click();
|
||||
})
|
||||
// try to find the name is pattern checkbox (shouldn't find it)
|
||||
.then(function () {
|
||||
return settingsPage.getNameIsPatternCheckbox();
|
||||
})
|
||||
.then(function (selected1) {
|
||||
expect(
|
||||
true, false, 'Did not expect to find the Name is Pattern checkbox when the TimeBasedEvents checkbox is unchecked'
|
||||
);
|
||||
})
|
||||
.catch(function (reason) {
|
||||
// it's OK. We expected not to find the getNameIsPatternCheckbox.
|
||||
return;
|
||||
});
|
||||
});
|
||||
},
|
||||
// Index pattern field list
|
||||
|
||||
'testCreateRemoveIndexPattern': function () {
|
||||
var self = this.remote;
|
||||
return this.remote
|
||||
.get(url)
|
||||
.then(function () {
|
||||
// select a time field and then Create button
|
||||
return settingsPage
|
||||
.selectTimeFieldOption('@timestamp');
|
||||
})
|
||||
.then(function () {
|
||||
return settingsPage
|
||||
.getCreateButton()
|
||||
.click();
|
||||
})
|
||||
.then(function () {
|
||||
return settingsPage
|
||||
.getIndexPageHeading()
|
||||
.then(function (getIndexPageHeading) {
|
||||
headerPage.log(getIndexPageHeading.getVisibleText());
|
||||
})
|
||||
.then(function () {
|
||||
// delete the index pattern
|
||||
return settingsPage
|
||||
.clickDeletePattern();
|
||||
})
|
||||
.then(function () {
|
||||
return tryForTime(3000, function () {
|
||||
return self
|
||||
.getAlertText();
|
||||
});
|
||||
})
|
||||
.then(function () {
|
||||
return self
|
||||
.acceptAlert();
|
||||
})
|
||||
// getting the current URL which shows 'logstash-*' pattern
|
||||
.then(function () {
|
||||
return self
|
||||
.getCurrentUrl()
|
||||
.then(function (currentUrl) {
|
||||
headerPage.log('currentUrl = ' + currentUrl);
|
||||
});
|
||||
})
|
||||
// pollUntil we find the Create button
|
||||
.then(pollUntil(function (value) {
|
||||
var element = document.getElementsByClassName('btn-success')[0];
|
||||
return element ? element : null;
|
||||
}, ['Configure an index pattern'], 8000))
|
||||
.then(function () {
|
||||
console.log('success');
|
||||
})
|
||||
// getting the current URL which no longer includes 'logstash-*'
|
||||
.then(function () {
|
||||
return self
|
||||
.getCurrentUrl()
|
||||
.then(function (currentUrl) {
|
||||
headerPage.log('currentUrl = ' + currentUrl);
|
||||
});
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
'testIndexPatternResultsHeader': function () {
|
||||
var self = this.remote;
|
||||
return this.remote
|
||||
.get(url)
|
||||
.then(function () {
|
||||
// select a time field and then Create button
|
||||
return settingsPage
|
||||
.selectTimeFieldOption('@timestamp');
|
||||
})
|
||||
.then(function () {
|
||||
return settingsPage
|
||||
.getCreateButton()
|
||||
.click();
|
||||
})
|
||||
.then(function () {
|
||||
return settingsPage
|
||||
.getIndexPageHeading()
|
||||
.then(function (getIndexPageHeading) {
|
||||
return getIndexPageHeading
|
||||
.getVisibleText()
|
||||
.then(function (pageText) {
|
||||
expect(pageText).to.be('logstash-*');
|
||||
// return
|
||||
});
|
||||
})
|
||||
.then(function () {
|
||||
return settingsPage
|
||||
.getTableHeader()
|
||||
.then(function (header) {
|
||||
headerPage.log('header.length = ' + header.length); // 6 name type format analyzed indexed controls
|
||||
expect(header.length).to.be(6);
|
||||
return header[0]
|
||||
.getVisibleText()
|
||||
.then(function (text) {
|
||||
headerPage.log('header[0] = ' + text); // name
|
||||
expect(text).to.be('name');
|
||||
return header;
|
||||
});
|
||||
})
|
||||
.then(function (header) {
|
||||
return header[1]
|
||||
.getVisibleText()
|
||||
.then(function (text) {
|
||||
headerPage.log('header[1] = ' + text);
|
||||
expect(text).to.be('type');
|
||||
return header;
|
||||
});
|
||||
})
|
||||
.then(function (header) {
|
||||
return header[2]
|
||||
.getVisibleText()
|
||||
.then(function (text) {
|
||||
headerPage.log('header[2] = ' + text);
|
||||
expect(text).to.be('format');
|
||||
return header;
|
||||
});
|
||||
})
|
||||
.then(function (header) {
|
||||
return header[3]
|
||||
.getVisibleText()
|
||||
.then(function (text) {
|
||||
headerPage.log('header[3] = ' + text);
|
||||
expect(text).to.be('analyzed');
|
||||
return header;
|
||||
});
|
||||
})
|
||||
.then(function (header) {
|
||||
return header[4]
|
||||
.getVisibleText()
|
||||
.then(function (text) {
|
||||
headerPage.log('header[4] = ' + text);
|
||||
expect(text).to.be('indexed');
|
||||
return header;
|
||||
});
|
||||
})
|
||||
.then(function (header) {
|
||||
return header[5]
|
||||
.getVisibleText()
|
||||
.then(function (text) {
|
||||
headerPage.log('header[5] = ' + text);
|
||||
expect(text).to.be('controls');
|
||||
return header;
|
||||
});
|
||||
})
|
||||
.then(function () {
|
||||
// delete the index pattern -X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X
|
||||
return settingsPage
|
||||
.clickDeletePattern();
|
||||
})
|
||||
.then(function () {
|
||||
return tryForTime(3000, function () {
|
||||
return self
|
||||
.getAlertText();
|
||||
});
|
||||
})
|
||||
.then(function () {
|
||||
return self
|
||||
.getAlertText()
|
||||
.then(function (alertText) {
|
||||
headerPage.log('alertText = ' + alertText);
|
||||
expect(alertText).to.be(expectedAlertText);
|
||||
});
|
||||
})
|
||||
.then(function () {
|
||||
return self
|
||||
.acceptAlert();
|
||||
});
|
||||
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
|
||||
'testIndexPatternResultsSort': function () {
|
||||
var self = this.remote;
|
||||
return this.remote
|
||||
.get(url)
|
||||
.then(function () {
|
||||
// select a time field and then Create button
|
||||
return settingsPage
|
||||
.selectTimeFieldOption('@timestamp');
|
||||
})
|
||||
.then(function () {
|
||||
return settingsPage
|
||||
.getCreateButton()
|
||||
.click();
|
||||
})
|
||||
// check the page header to make sure we see logstash-*
|
||||
.then(function () {
|
||||
return settingsPage
|
||||
.getIndexPageHeading()
|
||||
.then(function (getIndexPageHeading) {
|
||||
return getIndexPageHeading
|
||||
.getVisibleText()
|
||||
.then(function (pageText) {
|
||||
expect(pageText).to.be('logstash-*');
|
||||
// return
|
||||
});
|
||||
});
|
||||
})
|
||||
// Sort by Name
|
||||
.then(function sortByName() {
|
||||
return settingsPage
|
||||
.sortBy('name');
|
||||
})
|
||||
// check name sort
|
||||
.then(function sortAgain() {
|
||||
return settingsPage
|
||||
.getTableRow(0, 0)
|
||||
.then(function (row) {
|
||||
return row
|
||||
.getVisibleText()
|
||||
.then(function (rowText) {
|
||||
//headerPage.log('After name-sort first row first column = ' + rowText);
|
||||
expect(rowText).to.be('@message');
|
||||
});
|
||||
});
|
||||
})
|
||||
// Sort by Name again
|
||||
.then(function sortByName2() {
|
||||
return settingsPage
|
||||
.sortBy('name');
|
||||
})
|
||||
// check name sort
|
||||
.then(function sortAgain2() {
|
||||
return settingsPage
|
||||
.getTableRow(0, 0)
|
||||
.then(function (row) {
|
||||
return row
|
||||
.getVisibleText()
|
||||
.then(function (rowText) {
|
||||
//headerPage.log('After name-sort first row first column = ' + rowText);
|
||||
expect(rowText).to.be('xss.raw');
|
||||
});
|
||||
});
|
||||
})
|
||||
// Sort by type
|
||||
.then(function sortByType() {
|
||||
return settingsPage
|
||||
.sortBy('type');
|
||||
})
|
||||
// check type sort
|
||||
.then(function checksort() {
|
||||
return settingsPage
|
||||
.getTableRow(0, 1)
|
||||
.then(function (row) {
|
||||
return row
|
||||
.getVisibleText()
|
||||
.then(function (rowText) {
|
||||
//headerPage.log('After type-sort first row first column = ' + rowText);
|
||||
expect(rowText).to.be('_source');
|
||||
});
|
||||
});
|
||||
})
|
||||
// Sort by type again
|
||||
.then(function sortByType2() {
|
||||
return settingsPage
|
||||
.sortBy('type');
|
||||
})
|
||||
// check type sort
|
||||
.then(function checksort2() {
|
||||
return settingsPage
|
||||
.getTableRow(0, 1)
|
||||
.then(function (row) {
|
||||
return row
|
||||
.getVisibleText()
|
||||
.then(function (rowText) {
|
||||
headerPage.log('After type-sort first row first column = ' + rowText);
|
||||
expect(rowText).to.be('string');
|
||||
});
|
||||
});
|
||||
})
|
||||
// Sort by type again (this time it "unsorts it")
|
||||
.then(function sortByType2() {
|
||||
return settingsPage
|
||||
.sortBy('type');
|
||||
})
|
||||
// check pagination
|
||||
.then(function getFieldsTabCount() {
|
||||
return settingsPage
|
||||
.getFieldsTabCount()
|
||||
.then(function (tabCount) {
|
||||
headerPage.log('fields item count = ' + tabCount); // 85
|
||||
expect(tabCount).to.be('85');
|
||||
});
|
||||
})
|
||||
// verify the page size is 25
|
||||
.then(function checkPageSize() {
|
||||
return settingsPage
|
||||
.getPageSize()
|
||||
.then(function (pageSize) {
|
||||
expect(pageSize).to.be('25');
|
||||
});
|
||||
})
|
||||
// we know with 25 fields per page and 85 fields there should be 4 pages.
|
||||
// the first page should have 25 items on it.
|
||||
.then(function getPageFieldCount() {
|
||||
return settingsPage
|
||||
.getPageFieldCount()
|
||||
.then(function (pageCount) {
|
||||
headerPage.log('Page 1 count = ' + pageCount.length);
|
||||
expect(pageCount.length).to.be(25);
|
||||
});
|
||||
})
|
||||
//page 2 should also have 25 items
|
||||
.then(function goPage2() {
|
||||
return settingsPage
|
||||
.goToPage(2);
|
||||
})
|
||||
.then(function getPageFieldCount() {
|
||||
return settingsPage
|
||||
.getPageFieldCount()
|
||||
.then(function (pageCount) {
|
||||
headerPage.log('Page 2 count = ' + pageCount.length);
|
||||
expect(pageCount.length).to.be(25);
|
||||
});
|
||||
})
|
||||
//page 2 should also have 25 items
|
||||
.then(function goPage2() {
|
||||
return settingsPage
|
||||
.goToPage(3);
|
||||
})
|
||||
.then(function getPageFieldCount() {
|
||||
return settingsPage
|
||||
.getPageFieldCount()
|
||||
.then(function (pageCount) {
|
||||
headerPage.log('Page 3 count = ' + pageCount.length);
|
||||
expect(pageCount.length).to.be(25);
|
||||
});
|
||||
})
|
||||
//page 2 should also have 25 items
|
||||
.then(function goPage2() {
|
||||
return settingsPage
|
||||
.goToPage(4);
|
||||
})
|
||||
.then(function getPageFieldCount() {
|
||||
return settingsPage
|
||||
.getPageFieldCount()
|
||||
.then(function (pageCount) {
|
||||
headerPage.log('Page 4 count = ' + pageCount.length);
|
||||
expect(pageCount.length).to.be(10);
|
||||
});
|
||||
})
|
||||
.then(function () {
|
||||
// delete the index pattern -X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X
|
||||
return settingsPage
|
||||
.clickDeletePattern();
|
||||
})
|
||||
.then(function () {
|
||||
return tryForTime(3000, function () {
|
||||
return self
|
||||
.getAlertText();
|
||||
});
|
||||
})
|
||||
.then(function () {
|
||||
return self
|
||||
.getAlertText()
|
||||
.then(function (alertText) {
|
||||
headerPage.log('alertText = ' + alertText);
|
||||
expect(alertText).to.be(expectedAlertText);
|
||||
});
|
||||
})
|
||||
.then(function () {
|
||||
return self
|
||||
.acceptAlert();
|
||||
});
|
||||
},
|
||||
|
||||
|
||||
'testIndexPatternPopularity': function () {
|
||||
var self = this.remote;
|
||||
return this.remote
|
||||
.get(url)
|
||||
.then(function () {
|
||||
// select a time field and then Create button
|
||||
return settingsPage
|
||||
.selectTimeFieldOption('@timestamp');
|
||||
})
|
||||
.then(function () {
|
||||
return settingsPage
|
||||
.getCreateButton()
|
||||
.click();
|
||||
})
|
||||
// check the page header to make sure we see logstash-*
|
||||
.then(function () {
|
||||
return settingsPage
|
||||
.getIndexPageHeading()
|
||||
.then(function (getIndexPageHeading) {
|
||||
return getIndexPageHeading
|
||||
.getVisibleText()
|
||||
.then(function (pageText) {
|
||||
expect(pageText).to.be('logstash-*');
|
||||
// return
|
||||
});
|
||||
});
|
||||
})
|
||||
.then(function () {
|
||||
return settingsPage
|
||||
.setPageSize('All');
|
||||
})
|
||||
// increase Popularity
|
||||
.then(function openControlsByName() {
|
||||
return settingsPage
|
||||
.openControlsByName('geo.coordinates');
|
||||
})
|
||||
.then(function increasePopularity() {
|
||||
return settingsPage
|
||||
.increasePopularity();
|
||||
})
|
||||
.then(function getPopularity() {
|
||||
return settingsPage
|
||||
.getPopularity()
|
||||
.then(function (popularity) {
|
||||
headerPage.log('popularity = ' + popularity);
|
||||
expect(popularity).to.be('1');
|
||||
});
|
||||
})
|
||||
// Cancel saving the popularity change
|
||||
.then(function controlChangeCancel() {
|
||||
return settingsPage
|
||||
.controlChangeCancel();
|
||||
})
|
||||
// set the page size to All again, https://github.com/elastic/kibana/issues/5030
|
||||
.then(function () {
|
||||
return settingsPage
|
||||
.setPageSize('All');
|
||||
})
|
||||
.then(function openControlsByName() {
|
||||
return settingsPage
|
||||
.openControlsByName('geo.coordinates');
|
||||
})
|
||||
// check that its 0 (previous increase was cancelled)
|
||||
.then(function getPopularity() {
|
||||
return settingsPage
|
||||
.getPopularity()
|
||||
.then(function (popularity) {
|
||||
headerPage.log('popularity = ' + popularity);
|
||||
expect(popularity).to.be('0');
|
||||
});
|
||||
})
|
||||
.then(function increasePopularity() {
|
||||
return settingsPage
|
||||
.increasePopularity();
|
||||
})
|
||||
// Saving the popularity change
|
||||
.then(function controlChangeSave() {
|
||||
return settingsPage
|
||||
.controlChangeSave();
|
||||
})
|
||||
// set the page size to All again, https://github.com/elastic/kibana/issues/5030
|
||||
.then(function () {
|
||||
return settingsPage
|
||||
.setPageSize('All');
|
||||
})
|
||||
// open it again to see that it saved
|
||||
.then(function openControlsByName() {
|
||||
return settingsPage
|
||||
.openControlsByName('geo.coordinates');
|
||||
})
|
||||
// check that its 0 (previous increase was cancelled)
|
||||
.then(function getPopularity() {
|
||||
return settingsPage
|
||||
.getPopularity()
|
||||
.then(function (popularity) {
|
||||
headerPage.log('popularity = ' + popularity);
|
||||
expect(popularity).to.be('1');
|
||||
});
|
||||
})
|
||||
// Cancel saving the popularity change (we didn't make a change in this case, just checking the value)
|
||||
.then(function controlChangeCancel() {
|
||||
return settingsPage
|
||||
.controlChangeCancel();
|
||||
})
|
||||
|
||||
// should this test go to discover page and verify the Popular field?
|
||||
// ul.list-unstyled.sidebar-well.discover-popular-fields.hidden-sm.hidden-xs li.sidebar-item.ng-scope div.sidebar-item-title
|
||||
// field-name.ng-isolate-scope
|
||||
|
||||
|
||||
// delete the index pattern -X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X
|
||||
.then(function () {
|
||||
return settingsPage
|
||||
.clickDeletePattern();
|
||||
})
|
||||
.then(function () {
|
||||
return tryForTime(3000, function () {
|
||||
return self
|
||||
.getAlertText();
|
||||
});
|
||||
})
|
||||
.then(function () {
|
||||
return self
|
||||
.getAlertText()
|
||||
.then(function (alertText) {
|
||||
headerPage.log('alertText = ' + alertText);
|
||||
expect(alertText).to.be(expectedAlertText);
|
||||
});
|
||||
})
|
||||
.then(function () {
|
||||
return self
|
||||
.acceptAlert();
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
};
|
||||
});
|
||||
});
|
|
@ -13,26 +13,38 @@ define(function (require) {
|
|||
clickDiscover: function () {
|
||||
return this.remote
|
||||
.setFindTimeout(5000)
|
||||
.findByXpath('/html/body/div[2]/nav/div[2]/ul[1]/li[3]/a')
|
||||
.click();
|
||||
.findByCssSelector('a[href*=\'discover\']')
|
||||
.then(function (tab) {
|
||||
return tab.click();
|
||||
});
|
||||
},
|
||||
clickVisualize: function () {
|
||||
return this.remote
|
||||
.setFindTimeout(5000)
|
||||
.findByXpath('.//*[@id=\'kibana-body\']/div[2]/nav/div[2]/ul[1]/li[4]/a')
|
||||
.click();
|
||||
.findByCssSelector('a[href*=\'visualize\']')
|
||||
.then(function (tab) {
|
||||
return tab.click();
|
||||
});
|
||||
},
|
||||
clickDashboard: function () {
|
||||
return this.remote
|
||||
.setFindTimeout(5000)
|
||||
.findByXpath('//a[@href=\'#/dashboard.*\']')
|
||||
.click();
|
||||
.findByCssSelector('a[href*=\'dashboard\']')
|
||||
.then(function (tab) {
|
||||
return tab.click();
|
||||
});
|
||||
},
|
||||
clickSettings: function () {
|
||||
return this.remote
|
||||
.setFindTimeout(15000)
|
||||
.findByXpath('//a[@ng-href=\'#/settings\']')
|
||||
.click();
|
||||
.setFindTimeout(5000)
|
||||
.findByCssSelector('a[href*=\'settings\']')
|
||||
.then(function (tab) {
|
||||
return tab.click();
|
||||
});
|
||||
},
|
||||
|
||||
log: function (logString) {
|
||||
console.log(Date.now() + ' : ' + logString);
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -3,6 +3,9 @@ define(function (require) {
|
|||
// the page object is created as a constructor
|
||||
// so we can provide the remote Command object
|
||||
// at runtime
|
||||
|
||||
var defaultTimeout = 5000;
|
||||
|
||||
function SettingsPage(remote) {
|
||||
this.remote = remote;
|
||||
}
|
||||
|
@ -12,28 +15,26 @@ define(function (require) {
|
|||
|
||||
getTimeBasedEventsCheckbox: function () {
|
||||
return this.remote
|
||||
.setFindTimeout(5000)
|
||||
.findByXpath('//input[@ng-model=\'index.isTimeBased\']');
|
||||
.setFindTimeout(defaultTimeout)
|
||||
.findByCssSelector('input[ng-model="index.isTimeBased"]');
|
||||
},
|
||||
|
||||
getNameIsPatternCheckbox: function () {
|
||||
return this.remote
|
||||
.setFindTimeout(2000)
|
||||
.findByXpath('//input[@ng-model=\'index.nameIsPattern\']');
|
||||
.setFindTimeout(defaultTimeout / 2) // fail faster since we're sometimes checking that it doesn't exist
|
||||
.findByCssSelector('input[ng-model="index.nameIsPattern"]');
|
||||
},
|
||||
|
||||
getIndexPatternField: function () {
|
||||
return this.remote
|
||||
.setFindTimeout(5000)
|
||||
.findByName('name');
|
||||
.setFindTimeout(defaultTimeout)
|
||||
.findByCssSelector('[ng-model="index.name"]');
|
||||
},
|
||||
|
||||
getTimeFieldNameField: function () {
|
||||
return this.remote
|
||||
.setFindTimeout(5000)
|
||||
.findByXpath(
|
||||
'//body[@id=\'kibana-body\']/div[2]/div/kbn-settings-app/div/div/kbn-settings-indices/div[2]/div/div[2]/form/div[3]/select'
|
||||
);
|
||||
.setFindTimeout(defaultTimeout)
|
||||
.findByCssSelector('select[ng-model="index.timeField"]');
|
||||
},
|
||||
|
||||
selectTimeFieldOption: function (selection) {
|
||||
|
@ -52,33 +53,220 @@ define(function (require) {
|
|||
|
||||
getTimeFieldOption: function (selection) {
|
||||
return this.remote
|
||||
.setFindTimeout(10000)
|
||||
.findByXpath(
|
||||
'/html/body/div[2]/div/kbn-settings-app/div/div/kbn-settings-indices/div[2]/div/div[2]/form/div[3]/select/option[@label=\'' +
|
||||
selection + '\']'
|
||||
).click();
|
||||
.setFindTimeout(defaultTimeout * 2)
|
||||
.findByCssSelector('option[label="' + selection + '"]')
|
||||
.click();
|
||||
},
|
||||
|
||||
getCreateButton: function () {
|
||||
return this.remote
|
||||
.setFindTimeout(defaultTimeout)
|
||||
.findByCssSelector('.btn');
|
||||
},
|
||||
|
||||
clickCreateButton: function () {
|
||||
return this.remote
|
||||
.setFindTimeout(5000)
|
||||
.setFindTimeout(defaultTimeout)
|
||||
.findByCssSelector('.btn').click();
|
||||
},
|
||||
|
||||
getDefaultIndexButton: function () {
|
||||
return this.remote
|
||||
.setFindTimeout(5000)
|
||||
.findByXpath(
|
||||
'/html/body/div[2]/div/kbn-settings-app/div/div/kbn-settings-indices/div[2]/div/div/kbn-settings-index-header/div/div/button[1]'
|
||||
);
|
||||
},
|
||||
|
||||
clickDefaultIndexButton: function () {
|
||||
return this.remote
|
||||
.setFindTimeout(5000)
|
||||
.findByXpath(
|
||||
'/html/body/div[2]/div/kbn-settings-app/div/div/kbn-settings-indices/div[2]/div/div/kbn-settings-index-header/div/div/button[1]'
|
||||
).click();
|
||||
.setFindTimeout(defaultTimeout)
|
||||
.findByCssSelector('button[tooltip="Set as default index"')
|
||||
.click();
|
||||
},
|
||||
|
||||
clickDeletePattern: function () {
|
||||
return this.remote
|
||||
.setFindTimeout(defaultTimeout)
|
||||
.findByCssSelector('button[tooltip="Remove index pattern"')
|
||||
.click();
|
||||
},
|
||||
|
||||
getIndexPageHeading: function () {
|
||||
return this.remote
|
||||
.setFindTimeout(defaultTimeout)
|
||||
.findByCssSelector('h1.title.ng-binding.ng-isolate-scope');
|
||||
},
|
||||
|
||||
getConfigureHeader: function () {
|
||||
return this.remote
|
||||
.setFindTimeout(defaultTimeout)
|
||||
.findByCssSelector('h1');
|
||||
},
|
||||
getTableHeader: function () {
|
||||
return this.remote
|
||||
.setFindTimeout(defaultTimeout)
|
||||
.findAllByCssSelector('table.table.table-condensed thead tr th');
|
||||
},
|
||||
|
||||
|
||||
sortBy: function (columnName) {
|
||||
// console.log('sorting by ' + columnName);
|
||||
return this.remote
|
||||
.setFindTimeout(defaultTimeout)
|
||||
.findAllByCssSelector('table.table.table-condensed thead tr th span')
|
||||
.then(function (chartTypes) {
|
||||
// console.log('found bucket types ' + chartTypes.length);
|
||||
|
||||
function getChartType(chart) {
|
||||
return chart
|
||||
.getVisibleText()
|
||||
.then(function (chartString) {
|
||||
//console.log(chartString);
|
||||
if (chartString === columnName) {
|
||||
// console.log('sorting by ' + columnName);
|
||||
return chart
|
||||
.click();
|
||||
}
|
||||
});
|
||||
}
|
||||
var getChartTypesPromises = chartTypes.map(getChartType);
|
||||
return Promise.all(getChartTypesPromises);
|
||||
});
|
||||
},
|
||||
|
||||
getTableRow: function (rowNumber, colNumber) {
|
||||
return this.remote
|
||||
.setFindTimeout(defaultTimeout)
|
||||
// passing in zero-based index, but adding 1 for css 1-based indexes
|
||||
.findByCssSelector('div.agg-table-paginated table.table.table-condensed tbody tr:nth-child(' +
|
||||
(rowNumber + 1) + ') td.ng-scope:nth-child(' +
|
||||
(colNumber + 1) + ') span.ng-binding'
|
||||
);
|
||||
},
|
||||
|
||||
getFieldsTabCount: function () {
|
||||
return this.remote
|
||||
.setFindTimeout(defaultTimeout)
|
||||
// passing in zero-based index, but adding 1 for css 1-based indexes
|
||||
.findByCssSelector('li.kbn-settings-tab.ng-scope.active a.ng-binding small.ng-binding')
|
||||
.then(function (tabData) {
|
||||
return tabData
|
||||
.getVisibleText()
|
||||
.then(function (theText) {
|
||||
// the value has () around it, remove them
|
||||
return theText.replace(/\((.*)\)/, '$1');
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
getPageSize: function () {
|
||||
var selectedItemLabel = '';
|
||||
return this.remote
|
||||
.setFindTimeout(defaultTimeout)
|
||||
.findAllByCssSelector('select.ng-pristine.ng-valid.ng-untouched option')
|
||||
.then(function (chartTypes) {
|
||||
//console.log('found selection options ' + chartTypes.length);
|
||||
|
||||
function getChartType(chart) {
|
||||
var thisChart = chart;
|
||||
return chart
|
||||
.isSelected()
|
||||
.then(function (isSelected) {
|
||||
if (isSelected === true) {
|
||||
//console.log('Found selected option ');
|
||||
return thisChart
|
||||
.getProperty('label')
|
||||
.then(function (theLabel) {
|
||||
// console.log('Page size = ' + theLabel);
|
||||
selectedItemLabel = theLabel;
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
var getChartTypesPromises = chartTypes.map(getChartType);
|
||||
return Promise.all(getChartTypesPromises);
|
||||
})
|
||||
.then(function () {
|
||||
//console.log('returning types array here? ' + types);
|
||||
return selectedItemLabel;
|
||||
});
|
||||
},
|
||||
|
||||
getPageFieldCount: function () {
|
||||
return this.remote
|
||||
.setFindTimeout(defaultTimeout)
|
||||
.findAllByCssSelector('div.agg-table-paginated table.table.table-condensed tbody tr td.ng-scope:nth-child(1) span.ng-binding');
|
||||
},
|
||||
|
||||
goToPage: function (pageNum) {
|
||||
return this.remote
|
||||
.setFindTimeout(defaultTimeout)
|
||||
.findByCssSelector('ul.pagination-other-pages-list.pagination-sm.ng-scope li.ng-scope:nth-child(' +
|
||||
(pageNum + 1) + ') a.ng-binding'
|
||||
)
|
||||
.then(function (page) {
|
||||
return page.click();
|
||||
});
|
||||
},
|
||||
|
||||
openControlsRow: function (row) {
|
||||
return this.remote
|
||||
.setFindTimeout(defaultTimeout)
|
||||
.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'
|
||||
)
|
||||
.then(function (page) {
|
||||
return page.click();
|
||||
});
|
||||
},
|
||||
|
||||
openControlsByName: function (name) {
|
||||
return this.remote
|
||||
.setFindTimeout(defaultTimeout * 2)
|
||||
// .findByCssSelector('div.actions a.btn.btn-xs.btn-default[href="#/settings/indices/logstash-*/field/' + name + '"]')
|
||||
.findByCssSelector('div.actions a.btn.btn-xs.btn-default[href$="/' + name + '"]')
|
||||
.then(function (button) {
|
||||
return button.click();
|
||||
});
|
||||
},
|
||||
|
||||
increasePopularity: function () {
|
||||
return this.remote
|
||||
.setFindTimeout(defaultTimeout)
|
||||
.findByCssSelector('button.btn.btn-default[aria-label="Plus"]')
|
||||
.then(function (button) {
|
||||
return button.click();
|
||||
});
|
||||
},
|
||||
|
||||
getPopularity: function () {
|
||||
return this.remote
|
||||
.setFindTimeout(defaultTimeout)
|
||||
.findByCssSelector('input.form-control.ng-pristine.ng-valid.ng-untouched.ng-valid-number')
|
||||
.then(function (input) {
|
||||
return input
|
||||
.getProperty('value');
|
||||
});
|
||||
},
|
||||
|
||||
controlChangeCancel: function () {
|
||||
return this.remote
|
||||
.setFindTimeout(defaultTimeout)
|
||||
.findByCssSelector('button.btn.btn-primary[aria-label="Cancel"]')
|
||||
.then(function (button) {
|
||||
return button.click();
|
||||
});
|
||||
},
|
||||
|
||||
controlChangeSave: function () {
|
||||
return this.remote
|
||||
.setFindTimeout(defaultTimeout)
|
||||
.findByCssSelector('button.btn.btn-success.ng-binding[aria-label="Update Field"]')
|
||||
.then(function (button) {
|
||||
return button.click();
|
||||
});
|
||||
},
|
||||
|
||||
setPageSize: function (size) {
|
||||
return this.remote
|
||||
.setFindTimeout(defaultTimeout)
|
||||
.findByCssSelector('form.form-inline.pagination-size.ng-scope.ng-pristine.ng-valid div.form-group option[label="' + size + '"]')
|
||||
.then(function (button) {
|
||||
return button.click();
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue