Functional tests: refactor visualize_page (#53845)

* add new POs and services

* split visualize_page

* refactor PO and tests

* lost changes

* more fixes

* fix tslint error

* refactor POs

* add vega_chart_page, refactor

* review fix

Co-authored-by: Elastic Machine <elasticmachine@users.noreply.github.com>
This commit is contained in:
Dmitry Lemeshko 2020-01-07 15:42:20 +01:00 committed by GitHub
parent ab76ee5a58
commit a1176b0e4a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
50 changed files with 2416 additions and 2256 deletions

View file

@ -27,7 +27,14 @@ import {
} from '../../../../src/plugins/dashboard_embeddable_container/public/embeddable/dashboard_constants';
export default function({ getService, getPageObjects }) {
const PageObjects = getPageObjects(['dashboard', 'visualize', 'header', 'discover']);
const PageObjects = getPageObjects([
'dashboard',
'visualize',
'header',
'discover',
'tileMap',
'visChart',
]);
const testSubjects = getService('testSubjects');
const browser = getService('browser');
const queryBar = getService('queryBar');
@ -58,14 +65,14 @@ export default function({ getService, getPageObjects }) {
await PageObjects.dashboard.switchToEditMode();
await PageObjects.visualize.openLegendOptionColors('Count');
await PageObjects.visualize.selectNewLegendColorChoice('#EA6460');
await PageObjects.visChart.openLegendOptionColors('Count');
await PageObjects.visChart.selectNewLegendColorChoice('#EA6460');
await PageObjects.dashboard.saveDashboard('Overridden colors');
await PageObjects.dashboard.gotoDashboardLandingPage();
await PageObjects.dashboard.loadSavedDashboard('Overridden colors');
const colorChoiceRetained = await PageObjects.visualize.doesSelectedLegendColorExist(
const colorChoiceRetained = await PageObjects.visChart.doesSelectedLegendColorExist(
'#EA6460'
);
@ -153,10 +160,10 @@ export default function({ getService, getPageObjects }) {
await dashboardPanelActions.openContextMenu();
await dashboardPanelActions.clickEdit();
await PageObjects.visualize.clickMapZoomIn();
await PageObjects.visualize.clickMapZoomIn();
await PageObjects.visualize.clickMapZoomIn();
await PageObjects.visualize.clickMapZoomIn();
await PageObjects.tileMap.clickMapZoomIn();
await PageObjects.tileMap.clickMapZoomIn();
await PageObjects.tileMap.clickMapZoomIn();
await PageObjects.tileMap.clickMapZoomIn();
await PageObjects.visualize.saveVisualizationExpectSuccess('Visualization TileMap');
@ -225,8 +232,8 @@ export default function({ getService, getPageObjects }) {
describe('for embeddable config color parameters on a visualization', () => {
it('updates a pie slice color on a soft refresh', async function() {
await dashboardAddPanel.addVisualization(PIE_CHART_VIS_NAME);
await PageObjects.visualize.openLegendOptionColors('80,000');
await PageObjects.visualize.selectNewLegendColorChoice('#F9D9F9');
await PageObjects.visChart.openLegendOptionColors('80,000');
await PageObjects.visChart.selectNewLegendColorChoice('#F9D9F9');
const currentUrl = await browser.getCurrentUrl();
const newUrl = currentUrl.replace('F9D9F9', 'FFFFFF');
await browser.get(newUrl.toString(), false);
@ -248,7 +255,7 @@ export default function({ getService, getPageObjects }) {
// Unskip once https://github.com/elastic/kibana/issues/15736 is fixed.
it.skip('and updates the pie slice legend color', async function() {
await retry.try(async () => {
const colorExists = await PageObjects.visualize.doesSelectedLegendColorExist('#FFFFFF');
const colorExists = await PageObjects.visChart.doesSelectedLegendColorExist('#FFFFFF');
expect(colorExists).to.be(true);
});
});
@ -269,7 +276,7 @@ export default function({ getService, getPageObjects }) {
// Unskip once https://github.com/elastic/kibana/issues/15736 is fixed.
it.skip('resets the legend color as well', async function() {
await retry.try(async () => {
const colorExists = await PageObjects.visualize.doesSelectedLegendColorExist('#57c17b');
const colorExists = await PageObjects.visChart.doesSelectedLegendColorExist('#57c17b');
expect(colorExists).to.be(true);
});
});

View file

@ -23,7 +23,14 @@ export default function({ getService, getPageObjects }) {
const log = getService('log');
const esArchiver = getService('esArchiver');
const retry = getService('retry');
const PageObjects = getPageObjects(['console', 'common', 'settings', 'visualize']);
const PageObjects = getPageObjects([
'console',
'common',
'settings',
'visualize',
'visEditor',
'visChart',
]);
// https://www.elastic.co/guide/en/kibana/current/tutorial-load-dataset.html
@ -63,11 +70,11 @@ export default function({ getService, getPageObjects }) {
await PageObjects.visualize.navigateToNewVisualization();
await PageObjects.visualize.clickVerticalBarChart();
await PageObjects.visualize.clickNewSearch('shakes*');
await PageObjects.visualize.waitForVisualization();
await PageObjects.visChart.waitForVisualization();
const expectedChartValues = [111396];
await retry.try(async () => {
const data = await PageObjects.visualize.getBarChartData('Count');
const data = await PageObjects.visChart.getBarChartData('Count');
log.debug('data=' + data);
log.debug('data.length=' + data.length);
expect(data[0] - expectedChartValues[0]).to.be.lessThan(5);
@ -84,22 +91,22 @@ export default function({ getService, getPageObjects }) {
it('should configure metric Unique Count Speaking Parts', async function() {
log.debug('Metric = Unique Count, speaker, Speaking Parts');
// this first change to the YAxis metric agg uses the default aggIndex of 1
await PageObjects.visualize.selectYAxisAggregation(
await PageObjects.visEditor.selectYAxisAggregation(
'Unique Count',
'speaker',
'Speaking Parts'
);
// then increment the aggIndex for the next one we create
aggIndex = aggIndex + 1;
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.clickGo();
const expectedChartValues = [935];
await retry.try(async () => {
const data = await PageObjects.visualize.getBarChartData('Speaking Parts');
const data = await PageObjects.visChart.getBarChartData('Speaking Parts');
log.debug('data=' + data);
log.debug('data.length=' + data.length);
expect(data).to.eql(expectedChartValues);
});
const title = await PageObjects.visualize.getYAxisTitle();
const title = await PageObjects.visChart.getYAxisTitle();
expect(title).to.be('Speaking Parts');
});
@ -110,23 +117,23 @@ export default function({ getService, getPageObjects }) {
5. Click Apply changes images/apply-changes-button.png to view the results.
*/
it('should configure Terms aggregation on play_name', async function() {
await PageObjects.visualize.clickBucket('X-axis');
await PageObjects.visEditor.clickBucket('X-axis');
log.debug('Aggregation = Terms');
await PageObjects.visualize.selectAggregation('Terms');
await PageObjects.visEditor.selectAggregation('Terms');
aggIndex = aggIndex + 1;
log.debug('Field = play_name');
await PageObjects.visualize.selectField('play_name');
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.selectField('play_name');
await PageObjects.visEditor.clickGo();
const expectedChartValues = [71, 65, 62, 55, 55];
await retry.try(async () => {
const data = await PageObjects.visualize.getBarChartData('Speaking Parts');
const data = await PageObjects.visChart.getBarChartData('Speaking Parts');
log.debug('data=' + data);
log.debug('data.length=' + data.length);
expect(data).to.eql(expectedChartValues);
});
const labels = await PageObjects.visualize.getXAxisLabels();
const labels = await PageObjects.visChart.getXAxisLabels();
expect(labels).to.eql([
'Richard III',
'Henry VI Part 2',
@ -145,21 +152,21 @@ export default function({ getService, getPageObjects }) {
2. Choose the Max aggregation and select the speech_number field.
*/
it('should configure Max aggregation metric on speech_number', async function() {
await PageObjects.visualize.clickBucket('Y-axis', 'metrics');
await PageObjects.visEditor.clickBucket('Y-axis', 'metrics');
log.debug('Aggregation = Max');
await PageObjects.visualize.selectYAxisAggregation(
await PageObjects.visEditor.selectYAxisAggregation(
'Max',
'speech_number',
'Max Speaking Parts',
aggIndex
);
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.clickGo();
const expectedChartValues = [71, 65, 62, 55, 55];
const expectedChartValues2 = [177, 106, 153, 132, 162];
await retry.try(async () => {
const data = await PageObjects.visualize.getBarChartData('Speaking Parts');
const data2 = await PageObjects.visualize.getBarChartData('Max Speaking Parts');
const data = await PageObjects.visChart.getBarChartData('Speaking Parts');
const data2 = await PageObjects.visChart.getBarChartData('Max Speaking Parts');
log.debug('data=' + data);
log.debug('data.length=' + data.length);
log.debug('data2=' + data2);
@ -168,7 +175,7 @@ export default function({ getService, getPageObjects }) {
expect(data2).to.eql(expectedChartValues2);
});
const labels = await PageObjects.visualize.getXAxisLabels();
const labels = await PageObjects.visChart.getXAxisLabels();
expect(labels).to.eql([
'Richard III',
'Henry VI Part 2',
@ -184,15 +191,15 @@ export default function({ getService, getPageObjects }) {
4. Click Apply changes images/apply-changes-button.png. Your chart should now look like this:
*/
it('should configure change options to normal bars', async function() {
await PageObjects.visualize.clickMetricsAndAxes();
await PageObjects.visualize.selectChartMode('normal');
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.clickMetricsAndAxes();
await PageObjects.visEditor.selectChartMode('normal');
await PageObjects.visEditor.clickGo();
const expectedChartValues = [71, 65, 62, 55, 55];
const expectedChartValues2 = [177, 106, 153, 132, 162];
await retry.try(async () => {
const data = await PageObjects.visualize.getBarChartData('Speaking Parts');
const data2 = await PageObjects.visualize.getBarChartData('Max Speaking Parts');
const data = await PageObjects.visChart.getBarChartData('Speaking Parts');
const data2 = await PageObjects.visChart.getBarChartData('Max Speaking Parts');
log.debug('data=' + data);
log.debug('data.length=' + data.length);
log.debug('data2=' + data2);
@ -210,15 +217,15 @@ export default function({ getService, getPageObjects }) {
Save this chart with the name Bar Example.
*/
it('should change the Y-Axis extents', async function() {
await PageObjects.visualize.setAxisExtents('50', '250');
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.setAxisExtents('50', '250');
await PageObjects.visEditor.clickGo();
// same values as previous test except scaled down by the 50 for Y-Axis min
const expectedChartValues = [21, 15, 12, 5, 5];
const expectedChartValues2 = [127, 56, 103, 82, 112];
await retry.try(async () => {
const data = await PageObjects.visualize.getBarChartData('Speaking Parts');
const data2 = await PageObjects.visualize.getBarChartData('Max Speaking Parts');
const data = await PageObjects.visChart.getBarChartData('Speaking Parts');
const data2 = await PageObjects.visChart.getBarChartData('Max Speaking Parts');
log.debug('data=' + data);
log.debug('data.length=' + data.length);
log.debug('data2=' + data2);

View file

@ -24,7 +24,14 @@ export default function({ getService, getPageObjects }) {
const inspector = getService('inspector');
const browser = getService('browser');
const retry = getService('retry');
const PageObjects = getPageObjects(['common', 'visualize', 'header', 'settings', 'timePicker']);
const PageObjects = getPageObjects([
'common',
'visualize',
'visEditor',
'visChart',
'header',
'timePicker',
]);
describe('area charts', function indexPatternCreation() {
const vizName1 = 'Visualization AreaChart Name Test';
@ -38,17 +45,17 @@ export default function({ getService, getPageObjects }) {
await PageObjects.visualize.clickNewSearch();
await PageObjects.timePicker.setDefaultAbsoluteRange();
log.debug('Click X-axis');
await PageObjects.visualize.clickBucket('X-axis');
await PageObjects.visEditor.clickBucket('X-axis');
log.debug('Click Date Histogram');
await PageObjects.visualize.selectAggregation('Date Histogram');
await PageObjects.visEditor.selectAggregation('Date Histogram');
log.debug('Check field value');
const fieldValues = await PageObjects.visualize.getField();
const fieldValues = await PageObjects.visEditor.getField();
log.debug('fieldValue = ' + fieldValues);
expect(fieldValues[0]).to.be('@timestamp');
const intervalValue = await PageObjects.visualize.getInterval();
const intervalValue = await PageObjects.visEditor.getInterval();
log.debug('intervalValue = ' + intervalValue);
expect(intervalValue[0]).to.be('Auto');
return PageObjects.visualize.clickGo();
return PageObjects.visEditor.clickGo();
};
before(initAreaChart);
@ -70,7 +77,7 @@ export default function({ getService, getPageObjects }) {
it('should save and load', async function() {
await PageObjects.visualize.saveVisualizationExpectSuccessAndBreadcrumb(vizName1);
await PageObjects.visualize.loadSavedVisualization(vizName1);
await PageObjects.visualize.waitForVisualization();
await PageObjects.visChart.waitForVisualization();
});
it('should have inspector enabled', async function() {
@ -113,14 +120,14 @@ export default function({ getService, getPageObjects }) {
];
await retry.try(async function tryingForTime() {
const labels = await PageObjects.visualize.getXAxisLabels();
const labels = await PageObjects.visChart.getXAxisLabels();
log.debug('X-Axis labels = ' + labels);
expect(labels).to.eql(xAxisLabels);
});
const labels = await PageObjects.visualize.getYAxisLabels();
const labels = await PageObjects.visChart.getYAxisLabels();
log.debug('Y-Axis labels = ' + labels);
expect(labels).to.eql(yAxisLabels);
const paths = await PageObjects.visualize.getAreaChartData('Count');
const paths = await PageObjects.visChart.getAreaChartData('Count');
log.debug('expectedAreaChartData = ' + expectedAreaChartData);
log.debug('actual chart data = ' + paths);
expect(paths).to.eql(expectedAreaChartData);
@ -185,9 +192,9 @@ export default function({ getService, getPageObjects }) {
['2015-09-20 19:00', '55'],
];
await PageObjects.visualize.toggleOpenEditor(2);
await PageObjects.visualize.setInterval('Second');
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.toggleOpenEditor(2);
await PageObjects.visEditor.setInterval('Second');
await PageObjects.visEditor.clickGo();
await inspector.open();
await inspector.expectTableData(expectedTableData);
await inspector.close();
@ -217,9 +224,9 @@ export default function({ getService, getPageObjects }) {
['2015-09-20 19:00', '0.015'],
];
await PageObjects.visualize.toggleAdvancedParams('2');
await PageObjects.visualize.toggleScaleMetrics();
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.toggleAdvancedParams('2');
await PageObjects.visEditor.toggleScaleMetrics();
await PageObjects.visEditor.clickGo();
await inspector.open();
await inspector.expectTableData(expectedTableData);
await inspector.close();
@ -249,11 +256,11 @@ export default function({ getService, getPageObjects }) {
['2015-09-20 19:00', '55', '2.053KB'],
];
await PageObjects.visualize.clickBucket('Y-axis', 'metrics');
await PageObjects.visualize.selectAggregation('Top Hit', 'metrics');
await PageObjects.visualize.selectField('bytes', 'metrics');
await PageObjects.visualize.selectAggregateWith('average');
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.clickBucket('Y-axis', 'metrics');
await PageObjects.visEditor.selectAggregation('Top Hit', 'metrics');
await PageObjects.visEditor.selectField('bytes', 'metrics');
await PageObjects.visEditor.selectAggregateWith('average');
await PageObjects.visEditor.clickGo();
await inspector.open();
await inspector.expectTableData(expectedTableData);
await inspector.close();
@ -285,13 +292,13 @@ export default function({ getService, getPageObjects }) {
const axisId = 'ValueAxis-1';
it('should show ticks on selecting log scale', async () => {
await PageObjects.visualize.clickMetricsAndAxes();
await PageObjects.visualize.clickYAxisOptions(axisId);
await PageObjects.visualize.selectYAxisScaleType(axisId, 'log');
await PageObjects.visualize.clickYAxisAdvancedOptions(axisId);
await PageObjects.visualize.changeYAxisFilterLabelsCheckbox(axisId, false);
await PageObjects.visualize.clickGo();
const labels = await PageObjects.visualize.getYAxisLabels();
await PageObjects.visEditor.clickMetricsAndAxes();
await PageObjects.visEditor.clickYAxisOptions(axisId);
await PageObjects.visEditor.selectYAxisScaleType(axisId, 'log');
await PageObjects.visEditor.clickYAxisAdvancedOptions(axisId);
await PageObjects.visEditor.changeYAxisFilterLabelsCheckbox(axisId, false);
await PageObjects.visEditor.clickGo();
const labels = await PageObjects.visChart.getYAxisLabels();
const expectedLabels = [
'2',
'3',
@ -317,9 +324,9 @@ export default function({ getService, getPageObjects }) {
});
it('should show filtered ticks on selecting log scale', async () => {
await PageObjects.visualize.changeYAxisFilterLabelsCheckbox(axisId, true);
await PageObjects.visualize.clickGo();
const labels = await PageObjects.visualize.getYAxisLabels();
await PageObjects.visEditor.changeYAxisFilterLabelsCheckbox(axisId, true);
await PageObjects.visEditor.clickGo();
const labels = await PageObjects.visChart.getYAxisLabels();
const expectedLabels = [
'2',
'3',
@ -345,10 +352,10 @@ export default function({ getService, getPageObjects }) {
});
it('should show ticks on selecting square root scale', async () => {
await PageObjects.visualize.selectYAxisScaleType(axisId, 'square root');
await PageObjects.visualize.changeYAxisFilterLabelsCheckbox(axisId, false);
await PageObjects.visualize.clickGo();
const labels = await PageObjects.visualize.getYAxisLabels();
await PageObjects.visEditor.selectYAxisScaleType(axisId, 'square root');
await PageObjects.visEditor.changeYAxisFilterLabelsCheckbox(axisId, false);
await PageObjects.visEditor.clickGo();
const labels = await PageObjects.visChart.getYAxisLabels();
const expectedLabels = [
'0',
'200',
@ -364,18 +371,18 @@ export default function({ getService, getPageObjects }) {
});
it('should show filtered ticks on selecting square root scale', async () => {
await PageObjects.visualize.changeYAxisFilterLabelsCheckbox(axisId, true);
await PageObjects.visualize.clickGo();
const labels = await PageObjects.visualize.getYAxisLabels();
await PageObjects.visEditor.changeYAxisFilterLabelsCheckbox(axisId, true);
await PageObjects.visEditor.clickGo();
const labels = await PageObjects.visChart.getYAxisLabels();
const expectedLabels = ['200', '400', '600', '800', '1,000', '1,200', '1,400'];
expect(labels).to.eql(expectedLabels);
});
it('should show ticks on selecting linear scale', async () => {
await PageObjects.visualize.selectYAxisScaleType(axisId, 'linear');
await PageObjects.visualize.changeYAxisFilterLabelsCheckbox(axisId, false);
await PageObjects.visualize.clickGo();
const labels = await PageObjects.visualize.getYAxisLabels();
await PageObjects.visEditor.selectYAxisScaleType(axisId, 'linear');
await PageObjects.visEditor.changeYAxisFilterLabelsCheckbox(axisId, false);
await PageObjects.visEditor.clickGo();
const labels = await PageObjects.visChart.getYAxisLabels();
log.debug(labels);
const expectedLabels = [
'0',
@ -392,9 +399,9 @@ export default function({ getService, getPageObjects }) {
});
it('should show filtered ticks on selecting linear scale', async () => {
await PageObjects.visualize.changeYAxisFilterLabelsCheckbox(axisId, true);
await PageObjects.visualize.clickGo();
const labels = await PageObjects.visualize.getYAxisLabels();
await PageObjects.visEditor.changeYAxisFilterLabelsCheckbox(axisId, true);
await PageObjects.visEditor.clickGo();
const labels = await PageObjects.visChart.getYAxisLabels();
const expectedLabels = ['200', '400', '600', '800', '1,000', '1,200', '1,400'];
expect(labels).to.eql(expectedLabels);
});
@ -412,16 +419,16 @@ export default function({ getService, getPageObjects }) {
await PageObjects.visualize.clickNewSearch('long-window-logstash-*');
await PageObjects.timePicker.setAbsoluteRange(fromTime, toTime);
log.debug('Click X-axis');
await PageObjects.visualize.clickBucket('X-axis');
await PageObjects.visEditor.clickBucket('X-axis');
log.debug('Click Date Histogram');
await PageObjects.visualize.selectAggregation('Date Histogram');
await PageObjects.visualize.selectField('@timestamp');
await PageObjects.visualize.setInterval('Yearly');
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.selectAggregation('Date Histogram');
await PageObjects.visEditor.selectField('@timestamp');
await PageObjects.visEditor.setInterval('Yearly');
await PageObjects.visEditor.clickGo();
// This svg area is composed by 7 years (2013 - 2019).
// 7 points are used to draw the upper line (usually called y1)
// 7 points compose the lower line (usually called y0)
const paths = await PageObjects.visualize.getAreaChartPaths('Count');
const paths = await PageObjects.visChart.getAreaChartPaths('Count');
log.debug('actual chart data = ' + paths);
const numberOfSegments = 7 * 2;
expect(paths.length).to.eql(numberOfSegments);
@ -435,17 +442,17 @@ export default function({ getService, getPageObjects }) {
await PageObjects.visualize.clickNewSearch('long-window-logstash-*');
await PageObjects.timePicker.setAbsoluteRange(fromTime, toTime);
log.debug('Click X-axis');
await PageObjects.visualize.clickBucket('X-axis');
await PageObjects.visEditor.clickBucket('X-axis');
log.debug('Click Date Histogram');
await PageObjects.visualize.selectAggregation('Date Histogram');
await PageObjects.visualize.selectField('@timestamp');
await PageObjects.visualize.setInterval('Monthly');
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.selectAggregation('Date Histogram');
await PageObjects.visEditor.selectField('@timestamp');
await PageObjects.visEditor.setInterval('Monthly');
await PageObjects.visEditor.clickGo();
// This svg area is composed by 67 months 3 (2013) + 5 * 12 + 4 (2019)
// 67 points are used to draw the upper line (usually called y1)
// 67 points compose the lower line (usually called y0)
const numberOfSegments = 67 * 2;
const paths = await PageObjects.visualize.getAreaChartPaths('Count');
const paths = await PageObjects.visChart.getAreaChartPaths('Count');
log.debug('actual chart data = ' + paths);
expect(paths.length).to.eql(numberOfSegments);
});

View file

@ -22,9 +22,10 @@ import expect from '@kbn/expect';
export default function({ getService, getPageObjects }) {
const log = getService('log');
const inspector = getService('inspector');
const testSubjects = getService('testSubjects');
const retry = getService('retry');
const filterBar = getService('filterBar');
const PageObjects = getPageObjects(['common', 'visualize', 'header', 'timePicker']);
const PageObjects = getPageObjects(['visualize', 'timePicker', 'visEditor', 'visChart']);
describe('data table', function indexPatternCreation() {
const vizName1 = 'Visualization DataTable';
@ -38,27 +39,27 @@ export default function({ getService, getPageObjects }) {
await PageObjects.visualize.clickNewSearch();
await PageObjects.timePicker.setDefaultAbsoluteRange();
log.debug('Bucket = Split rows');
await PageObjects.visualize.clickBucket('Split rows');
await PageObjects.visEditor.clickBucket('Split rows');
log.debug('Aggregation = Histogram');
await PageObjects.visualize.selectAggregation('Histogram');
await PageObjects.visEditor.selectAggregation('Histogram');
log.debug('Field = bytes');
await PageObjects.visualize.selectField('bytes');
await PageObjects.visEditor.selectField('bytes');
log.debug('Interval = 2000');
await PageObjects.visualize.setNumericInterval('2000');
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.setInterval('2000', { type: 'numeric' });
await PageObjects.visEditor.clickGo();
});
it('should allow applying changed params', async () => {
await PageObjects.visualize.setNumericInterval('1', { append: true });
const interval = await PageObjects.visualize.getNumericInterval();
await PageObjects.visEditor.setInterval('1', { type: 'numeric', append: true });
const interval = await PageObjects.visEditor.getNumericInterval();
expect(interval).to.be('20001');
const isApplyButtonEnabled = await PageObjects.visualize.isApplyEnabled();
const isApplyButtonEnabled = await PageObjects.visEditor.isApplyEnabled();
expect(isApplyButtonEnabled).to.be(true);
});
it('should allow reseting changed params', async () => {
await PageObjects.visualize.clickReset();
const interval = await PageObjects.visualize.getNumericInterval();
await PageObjects.visEditor.clickReset();
const interval = await PageObjects.visEditor.getNumericInterval();
expect(interval).to.be('2000');
});
@ -66,7 +67,7 @@ export default function({ getService, getPageObjects }) {
await PageObjects.visualize.saveVisualizationExpectSuccessAndBreadcrumb(vizName1);
await PageObjects.visualize.loadSavedVisualization(vizName1);
await PageObjects.visualize.waitForVisualization();
await PageObjects.visChart.waitForVisualization();
});
it('should have inspector enabled', async function() {
@ -96,7 +97,7 @@ export default function({ getService, getPageObjects }) {
it('should show percentage columns', async () => {
async function expectValidTableData() {
const data = await PageObjects.visualize.getTableVisData();
const data = await PageObjects.visChart.getTableVisData();
expect(data.trim().split('\n')).to.be.eql([
'≥ 0 and < 1000',
'1,351 64.7%',
@ -110,16 +111,16 @@ export default function({ getService, getPageObjects }) {
await PageObjects.visualize.clickDataTable();
await PageObjects.visualize.clickNewSearch();
await PageObjects.timePicker.setDefaultAbsoluteRange();
await PageObjects.visualize.clickBucket('Split rows');
await PageObjects.visualize.selectAggregation('Range');
await PageObjects.visualize.selectField('bytes');
await PageObjects.visualize.clickGo();
await PageObjects.visualize.clickOptionsTab();
await PageObjects.visualize.setSelectByOptionText(
await PageObjects.visEditor.clickBucket('Split rows');
await PageObjects.visEditor.selectAggregation('Range');
await PageObjects.visEditor.selectField('bytes');
await PageObjects.visEditor.clickGo();
await PageObjects.visEditor.clickOptionsTab();
await PageObjects.visEditor.setSelectByOptionText(
'datatableVisualizationPercentageCol',
'Count'
);
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.clickGo();
await expectValidTableData();
@ -128,20 +129,20 @@ export default function({ getService, getPageObjects }) {
await PageObjects.visualize.saveVisualizationExpectSuccessAndBreadcrumb(SAVE_NAME);
await PageObjects.visualize.loadSavedVisualization(SAVE_NAME);
await PageObjects.visualize.waitForVisualization();
await PageObjects.visChart.waitForVisualization();
await expectValidTableData();
// check that it works after selecting a column that's deleted
await PageObjects.visualize.clickData();
await PageObjects.visualize.clickBucket('Metric', 'metrics');
await PageObjects.visualize.selectAggregation('Average', 'metrics');
await PageObjects.visualize.selectField('bytes', 'metrics');
await PageObjects.visualize.removeDimension(1);
await PageObjects.visualize.clickGo();
await PageObjects.visualize.clickOptionsTab();
await PageObjects.visEditor.clickDataTab();
await PageObjects.visEditor.clickBucket('Metric', 'metrics');
await PageObjects.visEditor.selectAggregation('Average', 'metrics');
await PageObjects.visEditor.selectField('bytes', 'metrics');
await PageObjects.visEditor.removeDimension(1);
await PageObjects.visEditor.clickGo();
await PageObjects.visEditor.clickOptionsTab();
const data = await PageObjects.visualize.getTableVisData();
const data = await PageObjects.visChart.getTableVisData();
expect(data.trim().split('\n')).to.be.eql([
'≥ 0 and < 1000',
'344.094B',
@ -155,12 +156,12 @@ export default function({ getService, getPageObjects }) {
await PageObjects.visualize.clickDataTable();
await PageObjects.visualize.clickNewSearch();
await PageObjects.timePicker.setDefaultAbsoluteRange();
await PageObjects.visualize.clickBucket('Metric', 'metrics');
await PageObjects.visualize.selectAggregation('Average Bucket', 'metrics');
await PageObjects.visualize.selectAggregation('Terms', 'metrics', 'buckets');
await PageObjects.visualize.selectField('geo.src', 'metrics', 'buckets');
await PageObjects.visualize.clickGo();
const data = await PageObjects.visualize.getTableVisData();
await PageObjects.visEditor.clickBucket('Metric', 'metrics');
await PageObjects.visEditor.selectAggregation('Average Bucket', 'metrics');
await PageObjects.visEditor.selectAggregation('Terms', 'metrics', 'buckets');
await PageObjects.visEditor.selectField('geo.src', 'metrics', 'buckets');
await PageObjects.visEditor.clickGo();
const data = await PageObjects.visChart.getTableVisData();
log.debug(data.split('\n'));
expect(data.trim().split('\n')).to.be.eql(['14,004 1,412.6']);
});
@ -170,12 +171,12 @@ export default function({ getService, getPageObjects }) {
await PageObjects.visualize.clickDataTable();
await PageObjects.visualize.clickNewSearch();
await PageObjects.timePicker.setDefaultAbsoluteRange();
await PageObjects.visualize.clickBucket('Split rows');
await PageObjects.visualize.selectAggregation('Date Histogram');
await PageObjects.visualize.selectField('@timestamp');
await PageObjects.visualize.setInterval('Daily');
await PageObjects.visualize.clickGo();
const data = await PageObjects.visualize.getTableVisData();
await PageObjects.visEditor.clickBucket('Split rows');
await PageObjects.visEditor.selectAggregation('Date Histogram');
await PageObjects.visEditor.selectField('@timestamp');
await PageObjects.visEditor.setInterval('Daily');
await PageObjects.visEditor.clickGo();
const data = await PageObjects.visChart.getTableVisData();
log.debug(data.split('\n'));
expect(data.trim().split('\n')).to.be.eql([
'2015-09-20',
@ -192,12 +193,12 @@ export default function({ getService, getPageObjects }) {
await PageObjects.visualize.clickDataTable();
await PageObjects.visualize.clickNewSearch();
await PageObjects.timePicker.setDefaultAbsoluteRange();
await PageObjects.visualize.clickBucket('Split rows');
await PageObjects.visualize.selectAggregation('Date Histogram');
await PageObjects.visualize.selectField('@timestamp');
await PageObjects.visualize.setInterval('Daily');
await PageObjects.visualize.clickGo();
const data = await PageObjects.visualize.getTableVisData();
await PageObjects.visEditor.clickBucket('Split rows');
await PageObjects.visEditor.selectAggregation('Date Histogram');
await PageObjects.visEditor.selectField('@timestamp');
await PageObjects.visEditor.setInterval('Daily');
await PageObjects.visEditor.clickGo();
const data = await PageObjects.visChart.getTableVisData();
expect(data.trim().split('\n')).to.be.eql([
'2015-09-20',
'4,757',
@ -210,15 +211,15 @@ export default function({ getService, getPageObjects }) {
it('should correctly filter for applied time filter on the main timefield', async () => {
await filterBar.addFilter('@timestamp', 'is between', '2015-09-19', '2015-09-21');
await PageObjects.visualize.waitForVisualizationRenderingStabilized();
const data = await PageObjects.visualize.getTableVisData();
await PageObjects.visChart.waitForVisualizationRenderingStabilized();
const data = await PageObjects.visChart.getTableVisData();
expect(data.trim().split('\n')).to.be.eql(['2015-09-20', '4,757']);
});
it('should correctly filter for pinned filters', async () => {
await filterBar.toggleFilterPinned('@timestamp');
await PageObjects.visualize.waitForVisualizationRenderingStabilized();
const data = await PageObjects.visualize.getTableVisData();
await PageObjects.visChart.waitForVisualizationRenderingStabilized();
const data = await PageObjects.visChart.getTableVisData();
expect(data.trim().split('\n')).to.be.eql(['2015-09-20', '4,757']);
});
@ -227,11 +228,11 @@ export default function({ getService, getPageObjects }) {
await PageObjects.visualize.clickDataTable();
await PageObjects.visualize.clickNewSearch();
await PageObjects.timePicker.setDefaultAbsoluteRange();
await PageObjects.visualize.clickMetricEditor();
await PageObjects.visualize.selectAggregation('Top Hit', 'metrics');
await PageObjects.visualize.selectField('agent.raw', 'metrics');
await PageObjects.visualize.clickGo();
const data = await PageObjects.visualize.getTableVisData();
await PageObjects.visEditor.clickMetricEditor();
await PageObjects.visEditor.selectAggregation('Top Hit', 'metrics');
await PageObjects.visEditor.selectField('agent.raw', 'metrics');
await PageObjects.visEditor.clickGo();
const data = await PageObjects.visChart.getTableVisData();
log.debug(data);
expect(data.length).to.be.greaterThan(0);
});
@ -241,11 +242,11 @@ export default function({ getService, getPageObjects }) {
await PageObjects.visualize.clickDataTable();
await PageObjects.visualize.clickNewSearch();
await PageObjects.timePicker.setDefaultAbsoluteRange();
await PageObjects.visualize.clickBucket('Split rows');
await PageObjects.visualize.selectAggregation('Range');
await PageObjects.visualize.selectField('bytes');
await PageObjects.visualize.clickGo();
const data = await PageObjects.visualize.getTableVisData();
await PageObjects.visEditor.clickBucket('Split rows');
await PageObjects.visEditor.selectAggregation('Range');
await PageObjects.visEditor.selectField('bytes');
await PageObjects.visEditor.clickGo();
const data = await PageObjects.visChart.getTableVisData();
expect(data.trim().split('\n')).to.be.eql([
'≥ 0 and < 1000',
'1,351',
@ -260,19 +261,19 @@ export default function({ getService, getPageObjects }) {
await PageObjects.visualize.clickDataTable();
await PageObjects.visualize.clickNewSearch();
await PageObjects.timePicker.setDefaultAbsoluteRange();
await PageObjects.visualize.clickBucket('Split rows');
await PageObjects.visualize.selectAggregation('Terms');
await PageObjects.visualize.selectField('extension.raw');
await PageObjects.visualize.setSize(2);
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.clickBucket('Split rows');
await PageObjects.visEditor.selectAggregation('Terms');
await PageObjects.visEditor.selectField('extension.raw');
await PageObjects.visEditor.setSize(2);
await PageObjects.visEditor.clickGo();
await PageObjects.visualize.toggleOtherBucket();
await PageObjects.visualize.toggleMissingBucket();
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.toggleOtherBucket();
await PageObjects.visEditor.toggleMissingBucket();
await PageObjects.visEditor.clickGo();
});
it('should show correct data', async () => {
const data = await PageObjects.visualize.getTableVisContent();
const data = await PageObjects.visChart.getTableVisContent();
expect(data).to.be.eql([
['jpg', '9,109'],
['css', '2,159'],
@ -281,9 +282,9 @@ export default function({ getService, getPageObjects }) {
});
it('should apply correct filter', async () => {
await PageObjects.visualize.filterOnTableCell(1, 3);
await PageObjects.visualize.waitForVisualizationRenderingStabilized();
const data = await PageObjects.visualize.getTableVisContent();
await PageObjects.visChart.filterOnTableCell(1, 3);
await PageObjects.visChart.waitForVisualizationRenderingStabilized();
const data = await PageObjects.visChart.getTableVisContent();
expect(data).to.be.eql([
['png', '1,373'],
['gif', '918'],
@ -298,20 +299,20 @@ export default function({ getService, getPageObjects }) {
await PageObjects.visualize.clickDataTable();
await PageObjects.visualize.clickNewSearch();
await PageObjects.timePicker.setDefaultAbsoluteRange();
await PageObjects.visualize.clickBucket('Split rows');
await PageObjects.visualize.selectAggregation('Terms');
await PageObjects.visualize.selectField('extension.raw');
await PageObjects.visualize.setSize(2);
await PageObjects.visualize.toggleOpenEditor(2, 'false');
await PageObjects.visualize.clickBucket('Split rows');
await PageObjects.visualize.selectAggregation('Terms');
await PageObjects.visualize.selectField('geo.dest');
await PageObjects.visualize.toggleOpenEditor(3, 'false');
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.clickBucket('Split rows');
await PageObjects.visEditor.selectAggregation('Terms');
await PageObjects.visEditor.selectField('extension.raw');
await PageObjects.visEditor.setSize(2);
await PageObjects.visEditor.toggleOpenEditor(2, 'false');
await PageObjects.visEditor.clickBucket('Split rows');
await PageObjects.visEditor.selectAggregation('Terms');
await PageObjects.visEditor.selectField('geo.dest');
await PageObjects.visEditor.toggleOpenEditor(3, 'false');
await PageObjects.visEditor.clickGo();
});
it('should show correct data without showMetricsAtAllLevels', async () => {
const data = await PageObjects.visualize.getTableVisContent();
const data = await PageObjects.visChart.getTableVisContent();
expect(data).to.be.eql([
['jpg', 'CN', '1,718'],
['jpg', 'IN', '1,511'],
@ -327,10 +328,10 @@ export default function({ getService, getPageObjects }) {
});
it('should show correct data without showMetricsAtAllLevels even if showPartialRows is selected', async () => {
await PageObjects.visualize.clickOptionsTab();
await PageObjects.visualize.checkCheckbox('showPartialRows');
await PageObjects.visualize.clickGo();
const data = await PageObjects.visualize.getTableVisContent();
await PageObjects.visEditor.clickOptionsTab();
await testSubjects.setCheckbox('showPartialRows', 'check');
await PageObjects.visEditor.clickGo();
const data = await PageObjects.visChart.getTableVisContent();
expect(data).to.be.eql([
['jpg', 'CN', '1,718'],
['jpg', 'IN', '1,511'],
@ -346,10 +347,10 @@ export default function({ getService, getPageObjects }) {
});
it('should show metrics on each level', async () => {
await PageObjects.visualize.clickOptionsTab();
await PageObjects.visualize.checkCheckbox('showMetricsAtAllLevels');
await PageObjects.visualize.clickGo();
const data = await PageObjects.visualize.getTableVisContent();
await PageObjects.visEditor.clickOptionsTab();
await testSubjects.setCheckbox('showMetricsAtAllLevels', 'check');
await PageObjects.visEditor.clickGo();
const data = await PageObjects.visChart.getTableVisContent();
expect(data).to.be.eql([
['jpg', '9,109', 'CN', '1,718'],
['jpg', '9,109', 'IN', '1,511'],
@ -365,12 +366,12 @@ export default function({ getService, getPageObjects }) {
});
it('should show metrics other than count on each level', async () => {
await PageObjects.visualize.clickData();
await PageObjects.visualize.clickBucket('Metric', 'metrics');
await PageObjects.visualize.selectAggregation('Average', 'metrics');
await PageObjects.visualize.selectField('bytes', 'metrics');
await PageObjects.visualize.clickGo();
const data = await PageObjects.visualize.getTableVisContent();
await PageObjects.visEditor.clickDataTab();
await PageObjects.visEditor.clickBucket('Metric', 'metrics');
await PageObjects.visEditor.selectAggregation('Average', 'metrics');
await PageObjects.visEditor.selectField('bytes', 'metrics');
await PageObjects.visEditor.clickGo();
const data = await PageObjects.visChart.getTableVisContent();
expect(data).to.be.eql([
['jpg', '9,109', '5.469KB', 'CN', '1,718', '5.477KB'],
['jpg', '9,109', '5.469KB', 'IN', '1,511', '5.456KB'],
@ -392,26 +393,26 @@ export default function({ getService, getPageObjects }) {
await PageObjects.visualize.clickDataTable();
await PageObjects.visualize.clickNewSearch();
await PageObjects.timePicker.setDefaultAbsoluteRange();
await PageObjects.visualize.clickBucket('Split table');
await PageObjects.visualize.selectAggregation('Terms');
await PageObjects.visualize.selectField('extension.raw');
await PageObjects.visualize.setSize(2);
await PageObjects.visualize.toggleOpenEditor(2, 'false');
await PageObjects.visualize.clickBucket('Split rows');
await PageObjects.visualize.selectAggregation('Terms');
await PageObjects.visualize.selectField('geo.dest');
await PageObjects.visualize.setSize(3, 3);
await PageObjects.visualize.toggleOpenEditor(3, 'false');
await PageObjects.visualize.clickBucket('Split rows');
await PageObjects.visualize.selectAggregation('Terms');
await PageObjects.visualize.selectField('geo.src');
await PageObjects.visualize.setSize(3, 4);
await PageObjects.visualize.toggleOpenEditor(4, 'false');
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.clickBucket('Split table');
await PageObjects.visEditor.selectAggregation('Terms');
await PageObjects.visEditor.selectField('extension.raw');
await PageObjects.visEditor.setSize(2);
await PageObjects.visEditor.toggleOpenEditor(2, 'false');
await PageObjects.visEditor.clickBucket('Split rows');
await PageObjects.visEditor.selectAggregation('Terms');
await PageObjects.visEditor.selectField('geo.dest');
await PageObjects.visEditor.setSize(3, 3);
await PageObjects.visEditor.toggleOpenEditor(3, 'false');
await PageObjects.visEditor.clickBucket('Split rows');
await PageObjects.visEditor.selectAggregation('Terms');
await PageObjects.visEditor.selectField('geo.src');
await PageObjects.visEditor.setSize(3, 4);
await PageObjects.visEditor.toggleOpenEditor(4, 'false');
await PageObjects.visEditor.clickGo();
});
it('should have a splitted table', async () => {
const data = await PageObjects.visualize.getTableVisContent();
const data = await PageObjects.visChart.getTableVisContent();
expect(data).to.be.eql([
[
['CN', 'CN', '330'],
@ -439,10 +440,10 @@ export default function({ getService, getPageObjects }) {
});
it('should show metrics for split bucket when using showMetricsAtAllLevels', async () => {
await PageObjects.visualize.clickOptionsTab();
await PageObjects.visualize.checkCheckbox('showMetricsAtAllLevels');
await PageObjects.visualize.clickGo();
const data = await PageObjects.visualize.getTableVisContent();
await PageObjects.visEditor.clickOptionsTab();
await testSubjects.setCheckbox('showMetricsAtAllLevels', 'check');
await PageObjects.visEditor.clickGo();
const data = await PageObjects.visChart.getTableVisContent();
expect(data).to.be.eql([
[
['CN', '1,718', 'CN', '330'],

View file

@ -25,7 +25,7 @@ export default function({ getService, getPageObjects }) {
const retry = getService('retry');
const filterBar = getService('filterBar');
const renderable = getService('renderable');
const PageObjects = getPageObjects(['common', 'visualize', 'header']);
const PageObjects = getPageObjects(['visualize', 'visEditor', 'header', 'visChart']);
describe.skip('data table with index without time filter', function indexPatternCreation() {
const vizName1 = 'Visualization DataTable without time filter';
@ -40,27 +40,27 @@ export default function({ getService, getPageObjects }) {
PageObjects.visualize.index.LOGSTASH_NON_TIME_BASED
);
log.debug('Bucket = Split Rows');
await PageObjects.visualize.clickBucket('Split rows');
await PageObjects.visEditor.clickBucket('Split rows');
log.debug('Aggregation = Histogram');
await PageObjects.visualize.selectAggregation('Histogram');
await PageObjects.visEditor.selectAggregation('Histogram');
log.debug('Field = bytes');
await PageObjects.visualize.selectField('bytes');
await PageObjects.visEditor.selectField('bytes');
log.debug('Interval = 2000');
await PageObjects.visualize.setNumericInterval('2000');
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.setInterval('2000', { type: 'numeric' });
await PageObjects.visEditor.clickGo();
});
it('should allow applying changed params', async () => {
await PageObjects.visualize.setNumericInterval('1', { append: true });
const interval = await PageObjects.visualize.getNumericInterval();
await PageObjects.visEditor.setInterval('1', { type: 'numeric', append: true });
const interval = await PageObjects.visEditor.getNumericInterval();
expect(interval).to.be('20001');
const isApplyButtonEnabled = await PageObjects.visualize.isApplyEnabled();
const isApplyButtonEnabled = await PageObjects.visEditor.isApplyEnabled();
expect(isApplyButtonEnabled).to.be(true);
});
it('should allow reseting changed params', async () => {
await PageObjects.visualize.clickReset();
const interval = await PageObjects.visualize.getNumericInterval();
await PageObjects.visEditor.clickReset();
const interval = await PageObjects.visEditor.getNumericInterval();
expect(interval).to.be('2000');
});
@ -68,7 +68,7 @@ export default function({ getService, getPageObjects }) {
await PageObjects.visualize.saveVisualizationExpectSuccessAndBreadcrumb(vizName1);
await PageObjects.visualize.loadSavedVisualization(vizName1);
await PageObjects.visualize.waitForVisualization();
await PageObjects.visChart.waitForVisualization();
});
it('should have inspector enabled', async function() {
@ -102,12 +102,12 @@ export default function({ getService, getPageObjects }) {
await PageObjects.visualize.clickNewSearch(
PageObjects.visualize.index.LOGSTASH_NON_TIME_BASED
);
await PageObjects.visualize.clickBucket('Metric', 'metrics');
await PageObjects.visualize.selectAggregation('Average Bucket', 'metrics');
await PageObjects.visualize.selectAggregation('Terms', 'metrics', 'buckets');
await PageObjects.visualize.selectField('geo.src', 'metrics', 'buckets');
await PageObjects.visualize.clickGo();
const data = await PageObjects.visualize.getTableVisData();
await PageObjects.visEditor.clickBucket('Metric', 'metrics');
await PageObjects.visEditor.selectAggregation('Average Bucket', 'metrics');
await PageObjects.visEditor.selectAggregation('Terms', 'metrics', 'buckets');
await PageObjects.visEditor.selectField('geo.src', 'metrics', 'buckets');
await PageObjects.visEditor.clickGo();
const data = await PageObjects.visChart.getTableVisData();
log.debug(data.split('\n'));
expect(data.trim().split('\n')).to.be.eql(['14,004 1,412.6']);
});
@ -118,12 +118,12 @@ export default function({ getService, getPageObjects }) {
await PageObjects.visualize.clickNewSearch(
PageObjects.visualize.index.LOGSTASH_NON_TIME_BASED
);
await PageObjects.visualize.clickBucket('Split rows');
await PageObjects.visualize.selectAggregation('Date Histogram');
await PageObjects.visualize.selectField('@timestamp');
await PageObjects.visualize.setInterval('Daily');
await PageObjects.visualize.clickGo();
const data = await PageObjects.visualize.getTableVisData();
await PageObjects.visEditor.clickBucket('Split rows');
await PageObjects.visEditor.selectAggregation('Date Histogram');
await PageObjects.visEditor.selectField('@timestamp');
await PageObjects.visEditor.setInterval('Daily');
await PageObjects.visEditor.clickGo();
const data = await PageObjects.visChart.getTableVisData();
log.debug(data.split('\n'));
expect(data.trim().split('\n')).to.be.eql([
'2015-09-20',
@ -141,12 +141,12 @@ export default function({ getService, getPageObjects }) {
await PageObjects.visualize.clickNewSearch(
PageObjects.visualize.index.LOGSTASH_NON_TIME_BASED
);
await PageObjects.visualize.clickBucket('Split rows');
await PageObjects.visualize.selectAggregation('Date Histogram');
await PageObjects.visualize.selectField('@timestamp');
await PageObjects.visualize.setInterval('Daily');
await PageObjects.visualize.clickGo();
const data = await PageObjects.visualize.getTableVisData();
await PageObjects.visEditor.clickBucket('Split rows');
await PageObjects.visEditor.selectAggregation('Date Histogram');
await PageObjects.visEditor.selectField('@timestamp');
await PageObjects.visEditor.setInterval('Daily');
await PageObjects.visEditor.clickGo();
const data = await PageObjects.visChart.getTableVisData();
expect(data.trim().split('\n')).to.be.eql([
'2015-09-20',
'4,757',
@ -161,7 +161,7 @@ export default function({ getService, getPageObjects }) {
await filterBar.addFilter('@timestamp', 'is between', '2015-09-19', '2015-09-21');
await PageObjects.header.waitUntilLoadingHasFinished();
await renderable.waitForRender();
const data = await PageObjects.visualize.getTableVisData();
const data = await PageObjects.visChart.getTableVisData();
expect(data.trim().split('\n')).to.be.eql(['2015-09-20', '4,757']);
});
@ -169,7 +169,7 @@ export default function({ getService, getPageObjects }) {
await filterBar.toggleFilterPinned('@timestamp');
await PageObjects.header.waitUntilLoadingHasFinished();
await renderable.waitForRender();
const data = await PageObjects.visualize.getTableVisData();
const data = await PageObjects.visChart.getTableVisData();
expect(data.trim().split('\n')).to.be.eql(['2015-09-20', '4,757']);
});
});

View file

@ -24,7 +24,13 @@ export default function({ getService, getPageObjects }) {
const log = getService('log');
const renderable = getService('renderable');
const embedding = getService('embedding');
const PageObjects = getPageObjects(['common', 'visualize', 'header', 'timePicker']);
const PageObjects = getPageObjects([
'visualize',
'visEditor',
'visChart',
'header',
'timePicker',
]);
describe('embedding', () => {
describe('a data table', () => {
@ -33,22 +39,22 @@ export default function({ getService, getPageObjects }) {
await PageObjects.visualize.clickDataTable();
await PageObjects.visualize.clickNewSearch();
await PageObjects.timePicker.setDefaultAbsoluteRange();
await PageObjects.visualize.clickBucket('Split rows');
await PageObjects.visualize.selectAggregation('Date Histogram');
await PageObjects.visualize.selectField('@timestamp');
await PageObjects.visualize.toggleOpenEditor(2, 'false');
await PageObjects.visualize.clickBucket('Split rows');
await PageObjects.visualize.selectAggregation('Histogram');
await PageObjects.visualize.selectField('bytes');
await PageObjects.visualize.setNumericInterval('2000', undefined, 3);
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.clickBucket('Split rows');
await PageObjects.visEditor.selectAggregation('Date Histogram');
await PageObjects.visEditor.selectField('@timestamp');
await PageObjects.visEditor.toggleOpenEditor(2, 'false');
await PageObjects.visEditor.clickBucket('Split rows');
await PageObjects.visEditor.selectAggregation('Histogram');
await PageObjects.visEditor.selectField('bytes');
await PageObjects.visEditor.setInterval('2000', { type: 'numeric', aggNth: 3 });
await PageObjects.visEditor.clickGo();
});
it('should allow opening table vis in embedded mode', async () => {
await embedding.openInEmbeddedMode();
await renderable.waitForRender();
const data = await PageObjects.visualize.getTableVisData();
const data = await PageObjects.visChart.getTableVisData();
log.debug(data.split('\n'));
expect(data.trim().split('\n')).to.be.eql([
'2015-09-20 00:00',
@ -89,7 +95,7 @@ export default function({ getService, getPageObjects }) {
await PageObjects.header.waitUntilLoadingHasFinished();
await renderable.waitForRender();
const data = await PageObjects.visualize.getTableVisData();
const data = await PageObjects.visChart.getTableVisData();
log.debug(data.split('\n'));
expect(data.trim().split('\n')).to.be.eql([
'2015-09-21 00:00',
@ -126,11 +132,11 @@ export default function({ getService, getPageObjects }) {
});
it('should allow to change timerange from the visualization in embedded mode', async () => {
await PageObjects.visualize.filterOnTableCell(1, 7);
await PageObjects.visChart.filterOnTableCell(1, 7);
await PageObjects.header.waitUntilLoadingHasFinished();
await renderable.waitForRender();
const data = await PageObjects.visualize.getTableVisData();
const data = await PageObjects.visChart.getTableVisData();
log.debug(data.split('\n'));
expect(data.trim().split('\n')).to.be.eql([
'03:00',

View file

@ -21,7 +21,7 @@ import expect from '@kbn/expect';
export default ({ getService, getPageObjects }) => {
const log = getService('log');
const PageObjects = getPageObjects(['common', 'visualize']);
const PageObjects = getPageObjects(['visualize']);
describe('visualize app', function() {
this.tags('smoke');

View file

@ -24,7 +24,7 @@ export default function({ getService, getPageObjects }) {
const retry = getService('retry');
const inspector = getService('inspector');
const testSubjects = getService('testSubjects');
const PageObjects = getPageObjects(['common', 'visualize', 'timePicker']);
const PageObjects = getPageObjects(['visualize', 'visEditor', 'visChart', 'timePicker']);
// FLAKY: https://github.com/elastic/kibana/issues/45089
describe('gauge chart', function indexPatternCreation() {
@ -50,24 +50,24 @@ export default function({ getService, getPageObjects }) {
// initial metric of "Count" is selected by default
return retry.try(async function tryingForTime() {
const metricValue = await PageObjects.visualize.getGaugeValue();
const metricValue = await PageObjects.visChart.getGaugeValue();
expect(expectedCount).to.eql(metricValue);
});
});
it('should show Split Gauges', async function() {
log.debug('Bucket = Split Group');
await PageObjects.visualize.clickBucket('Split group');
await PageObjects.visEditor.clickBucket('Split group');
log.debug('Aggregation = Terms');
await PageObjects.visualize.selectAggregation('Terms');
await PageObjects.visEditor.selectAggregation('Terms');
log.debug('Field = machine.os.raw');
await PageObjects.visualize.selectField('machine.os.raw');
await PageObjects.visEditor.selectField('machine.os.raw');
log.debug('Size = 4');
await PageObjects.visualize.setSize('4');
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.setSize('4');
await PageObjects.visEditor.clickGo();
await retry.try(async () => {
expect(await PageObjects.visualize.getGaugeValue()).to.eql([
expect(await PageObjects.visChart.getGaugeValue()).to.eql([
'2,904',
'win 8',
'2,858',
@ -83,34 +83,34 @@ export default function({ getService, getPageObjects }) {
it('should show correct values for fields with fieldFormatters', async function() {
const expectedTexts = ['2,904', 'win 8: Count', '0B', 'win 8: Min bytes'];
await PageObjects.visualize.selectAggregation('Terms');
await PageObjects.visualize.selectField('machine.os.raw');
await PageObjects.visualize.setSize('1');
await PageObjects.visualize.clickBucket('Metric', 'metrics');
await PageObjects.visualize.selectAggregation('Min', 'metrics');
await PageObjects.visualize.selectField('bytes', 'metrics');
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.selectAggregation('Terms');
await PageObjects.visEditor.selectField('machine.os.raw');
await PageObjects.visEditor.setSize('1');
await PageObjects.visEditor.clickBucket('Metric', 'metrics');
await PageObjects.visEditor.selectAggregation('Min', 'metrics');
await PageObjects.visEditor.selectField('bytes', 'metrics');
await PageObjects.visEditor.clickGo();
await retry.try(async function tryingForTime() {
const metricValue = await PageObjects.visualize.getGaugeValue();
const metricValue = await PageObjects.visChart.getGaugeValue();
expect(expectedTexts).to.eql(metricValue);
});
});
it('should format the metric correctly in percentage mode', async function() {
await initGaugeVis();
await PageObjects.visualize.clickMetricEditor();
await PageObjects.visualize.selectAggregation('Average', 'metrics');
await PageObjects.visualize.selectField('bytes', 'metrics');
await PageObjects.visualize.clickOptionsTab();
await PageObjects.visEditor.clickMetricEditor();
await PageObjects.visEditor.selectAggregation('Average', 'metrics');
await PageObjects.visEditor.selectField('bytes', 'metrics');
await PageObjects.visEditor.clickOptionsTab();
await testSubjects.setValue('gaugeColorRange2__to', '10000');
await testSubjects.click('gaugePercentageMode');
await PageObjects.visualize.waitForVisualizationRenderingStabilized();
await PageObjects.visualize.clickGo();
await PageObjects.visChart.waitForVisualizationRenderingStabilized();
await PageObjects.visEditor.clickGo();
await retry.try(async function tryingForTime() {
const expectedTexts = ['57.273%', 'Average bytes'];
const metricValue = await PageObjects.visualize.getGaugeValue();
const metricValue = await PageObjects.visChart.getGaugeValue();
expect(expectedTexts).to.eql(metricValue);
});
});

View file

@ -22,7 +22,7 @@ import expect from '@kbn/expect';
export default function({ getService, getPageObjects }) {
const log = getService('log');
const inspector = getService('inspector');
const PageObjects = getPageObjects(['common', 'visualize', 'timePicker']);
const PageObjects = getPageObjects(['visualize', 'visEditor', 'visChart', 'timePicker']);
describe('heatmap chart', function indexPatternCreation() {
this.tags('smoke');
@ -36,20 +36,20 @@ export default function({ getService, getPageObjects }) {
await PageObjects.visualize.clickNewSearch();
await PageObjects.timePicker.setDefaultAbsoluteRange();
log.debug('Bucket = X-Axis');
await PageObjects.visualize.clickBucket('X-axis');
await PageObjects.visEditor.clickBucket('X-axis');
log.debug('Aggregation = Date Histogram');
await PageObjects.visualize.selectAggregation('Date Histogram');
await PageObjects.visEditor.selectAggregation('Date Histogram');
log.debug('Field = @timestamp');
await PageObjects.visualize.selectField('@timestamp');
await PageObjects.visEditor.selectField('@timestamp');
// leaving Interval set to Auto
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.clickGo();
});
it('should save and load', async function() {
await PageObjects.visualize.saveVisualizationExpectSuccessAndBreadcrumb(vizName1);
await PageObjects.visualize.loadSavedVisualization(vizName1);
await PageObjects.visualize.waitForVisualization();
await PageObjects.visChart.waitForVisualization();
});
it('should have inspector enabled', async function() {
@ -87,16 +87,16 @@ export default function({ getService, getPageObjects }) {
});
it('should show 4 color ranges as default colorNumbers param', async function() {
const legends = await PageObjects.visualize.getLegendEntries();
const legends = await PageObjects.visChart.getLegendEntries();
const expectedLegends = ['0 - 400', '400 - 800', '800 - 1,200', '1,200 - 1,600'];
expect(legends).to.eql(expectedLegends);
});
it('should show 6 color ranges if changed on options', async function() {
await PageObjects.visualize.clickOptionsTab();
await PageObjects.visualize.changeHeatmapColorNumbers(6);
await PageObjects.visualize.clickGo();
const legends = await PageObjects.visualize.getLegendEntries();
await PageObjects.visEditor.clickOptionsTab();
await PageObjects.visEditor.changeHeatmapColorNumbers(6);
await PageObjects.visEditor.clickGo();
const legends = await PageObjects.visChart.getLegendEntries();
const expectedLegends = [
'0 - 267',
'267 - 534',
@ -108,23 +108,23 @@ export default function({ getService, getPageObjects }) {
expect(legends).to.eql(expectedLegends);
});
it('should show 6 custom color ranges', async function() {
await PageObjects.visualize.clickOptionsTab();
await PageObjects.visualize.clickEnableCustomRanges();
await PageObjects.visualize.clickAddRange();
await PageObjects.visualize.clickAddRange();
await PageObjects.visualize.clickAddRange();
await PageObjects.visualize.clickAddRange();
await PageObjects.visualize.clickAddRange();
await PageObjects.visualize.clickAddRange();
await PageObjects.visualize.clickAddRange();
await PageObjects.visEditor.clickOptionsTab();
await PageObjects.visEditor.clickEnableCustomRanges();
await PageObjects.visEditor.clickAddRange();
await PageObjects.visEditor.clickAddRange();
await PageObjects.visEditor.clickAddRange();
await PageObjects.visEditor.clickAddRange();
await PageObjects.visEditor.clickAddRange();
await PageObjects.visEditor.clickAddRange();
await PageObjects.visEditor.clickAddRange();
log.debug('customize 2 last ranges');
await PageObjects.visualize.setCustomRangeByIndex(6, '650', '720');
await PageObjects.visualize.setCustomRangeByIndex(7, '800', '905');
await PageObjects.visEditor.setCustomRangeByIndex(6, '650', '720');
await PageObjects.visEditor.setCustomRangeByIndex(7, '800', '905');
await PageObjects.visualize.waitForVisualizationRenderingStabilized();
await PageObjects.visualize.clickGo();
const legends = await PageObjects.visualize.getLegendEntries();
await PageObjects.visChart.waitForVisualizationRenderingStabilized();
await PageObjects.visEditor.clickGo();
const legends = await PageObjects.visChart.getLegendEntries();
const expectedLegends = [
'0 - 100',
'100 - 200',

View file

@ -22,7 +22,13 @@ import expect from '@kbn/expect';
export default function({ getService, getPageObjects }) {
const log = getService('log');
const retry = getService('retry');
const PageObjects = getPageObjects(['common', 'visualize', 'timePicker']);
const PageObjects = getPageObjects([
'common',
'visualize',
'visEditor',
'visChart',
'timePicker',
]);
describe('histogram agg onSearchRequestStart', function() {
before(async function() {
@ -33,21 +39,21 @@ export default function({ getService, getPageObjects }) {
await PageObjects.visualize.clickNewSearch();
await PageObjects.timePicker.setDefaultAbsoluteRange();
log.debug('Bucket = Split Rows');
await PageObjects.visualize.clickBucket('Split rows');
await PageObjects.visEditor.clickBucket('Split rows');
log.debug('Aggregation = Histogram');
await PageObjects.visualize.selectAggregation('Histogram');
await PageObjects.visEditor.selectAggregation('Histogram');
log.debug('Field = machine.ram');
await PageObjects.visualize.selectField('machine.ram');
await PageObjects.visEditor.selectField('machine.ram');
});
describe('interval parameter uses autoBounds', function() {
it('should use provided value when number of generated buckets is less than histogram:maxBars', async function() {
const providedInterval = 2400000000;
log.debug(`Interval = ${providedInterval}`);
await PageObjects.visualize.setNumericInterval(providedInterval);
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.setInterval(providedInterval, { type: 'numeric' });
await PageObjects.visEditor.clickGo();
await retry.try(async () => {
const data = await PageObjects.visualize.getTableVisData();
const data = await PageObjects.visChart.getTableVisData();
const dataArray = data.replace(/,/g, '').split('\n');
expect(dataArray.length).to.eql(20);
const bucketStart = parseInt(dataArray[0], 10);
@ -60,11 +66,11 @@ export default function({ getService, getPageObjects }) {
it('should scale value to round number when number of generated buckets is greater than histogram:maxBars', async function() {
const providedInterval = 100;
log.debug(`Interval = ${providedInterval}`);
await PageObjects.visualize.setNumericInterval(providedInterval);
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.setInterval(providedInterval, { type: 'numeric' });
await PageObjects.visEditor.clickGo();
await PageObjects.common.sleep(1000); //fix this
await retry.try(async () => {
const data = await PageObjects.visualize.getTableVisData();
const data = await PageObjects.visChart.getTableVisData();
const dataArray = data.replace(/,/g, '').split('\n');
expect(dataArray.length).to.eql(20);
const bucketStart = parseInt(dataArray[0], 10);

View file

@ -21,7 +21,7 @@ export default function({ getService, getPageObjects }) {
const log = getService('log');
const inspector = getService('inspector');
const filterBar = getService('filterBar');
const PageObjects = getPageObjects(['common', 'visualize', 'timePicker']);
const PageObjects = getPageObjects(['visualize', 'visEditor', 'visChart', 'timePicker']);
describe('inspector', function describeIndexTests() {
this.tags('smoke');
@ -39,10 +39,10 @@ export default function({ getService, getPageObjects }) {
await inspector.expectTableHeaders(['Count']);
log.debug('Add Average Metric on machine.ram field');
await PageObjects.visualize.clickBucket('Y-axis', 'metrics');
await PageObjects.visualize.selectAggregation('Average', 'metrics');
await PageObjects.visualize.selectField('machine.ram', 'metrics');
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.clickBucket('Y-axis', 'metrics');
await PageObjects.visEditor.selectAggregation('Average', 'metrics');
await PageObjects.visEditor.selectField('machine.ram', 'metrics');
await PageObjects.visEditor.clickGo();
await inspector.open();
await inspector.expectTableHeaders(['Count', 'Average machine.ram']);
});
@ -50,23 +50,23 @@ export default function({ getService, getPageObjects }) {
describe('filtering on inspector table values', function() {
before(async function() {
log.debug('Add X-axis terms agg on machine.os.raw');
await PageObjects.visualize.clickBucket('X-axis');
await PageObjects.visualize.selectAggregation('Terms');
await PageObjects.visualize.selectField('machine.os.raw');
await PageObjects.visualize.setSize(2);
await PageObjects.visualize.toggleOtherBucket(3);
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.clickBucket('X-axis');
await PageObjects.visEditor.selectAggregation('Terms');
await PageObjects.visEditor.selectField('machine.os.raw');
await PageObjects.visEditor.setSize(2);
await PageObjects.visEditor.toggleOtherBucket(3);
await PageObjects.visEditor.clickGo();
});
beforeEach(async function() {
await inspector.open();
await PageObjects.visualize.waitForVisualizationRenderingStabilized();
await PageObjects.visChart.waitForVisualizationRenderingStabilized();
});
afterEach(async function() {
await inspector.close();
await filterBar.removeFilter('machine.os.raw');
await PageObjects.visualize.waitForVisualizationRenderingStabilized();
await PageObjects.visChart.waitForVisualizationRenderingStabilized();
});
it('should allow filtering for values', async function() {

View file

@ -24,7 +24,13 @@ export default function({ getService, getPageObjects }) {
const inspector = getService('inspector');
const retry = getService('retry');
const testSubjects = getService('testSubjects');
const PageObjects = getPageObjects(['common', 'visualize', 'timePicker']);
const PageObjects = getPageObjects([
'common',
'visualize',
'visEditor',
'visChart',
'timePicker',
]);
describe('line charts', function() {
const vizName1 = 'Visualization LineChart';
@ -37,14 +43,14 @@ export default function({ getService, getPageObjects }) {
await PageObjects.visualize.clickNewSearch();
await PageObjects.timePicker.setDefaultAbsoluteRange();
log.debug('Bucket = Split chart');
await PageObjects.visualize.clickBucket('Split chart');
await PageObjects.visEditor.clickBucket('Split chart');
log.debug('Aggregation = Terms');
await PageObjects.visualize.selectAggregation('Terms');
await PageObjects.visEditor.selectAggregation('Terms');
log.debug('Field = extension');
await PageObjects.visualize.selectField('extension.raw');
await PageObjects.visEditor.selectField('extension.raw');
log.debug('switch from Rows to Columns');
await PageObjects.visualize.clickSplitDirection('Columns');
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.clickSplitDirection('Columns');
await PageObjects.visEditor.clickGo();
};
before(initLineChart);
@ -60,7 +66,7 @@ export default function({ getService, getPageObjects }) {
// sleep a bit before trying to get the chart data
await PageObjects.common.sleep(3000);
const data = await PageObjects.visualize.getLineChartData();
const data = await PageObjects.visChart.getLineChartData();
log.debug('data=' + data);
const tolerance = 10; // the y-axis scale is 10000 so 10 is 0.1%
for (let x = 0; x < data.length; x++) {
@ -91,10 +97,10 @@ export default function({ getService, getPageObjects }) {
const expectedChartData = ['png 1,373', 'php 445', 'jpg 9,109', 'gif 918', 'css 2,159'];
log.debug('Order By = Term');
await PageObjects.visualize.selectOrderByMetric(2, '_key');
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.selectOrderByMetric(2, '_key');
await PageObjects.visEditor.clickGo();
await retry.try(async function() {
const data = await PageObjects.visualize.getLineChartData();
const data = await PageObjects.visChart.getLineChartData();
log.debug('data=' + data);
const tolerance = 10; // the y-axis scale is 10000 so 10 is 0.1%
for (let x = 0; x < data.length; x++) {
@ -172,7 +178,7 @@ export default function({ getService, getPageObjects }) {
await PageObjects.visualize.saveVisualizationExpectSuccessAndBreadcrumb(vizName1);
await PageObjects.visualize.loadSavedVisualization(vizName1);
await PageObjects.visualize.waitForVisualization();
await PageObjects.visChart.waitForVisualization();
});
describe.skip('switch between Y axis scale types', () => {
@ -180,13 +186,13 @@ export default function({ getService, getPageObjects }) {
const axisId = 'ValueAxis-1';
it('should show ticks on selecting log scale', async () => {
await PageObjects.visualize.clickMetricsAndAxes();
await PageObjects.visualize.clickYAxisOptions(axisId);
await PageObjects.visualize.selectYAxisScaleType(axisId, 'log');
await PageObjects.visualize.clickYAxisAdvancedOptions(axisId);
await PageObjects.visualize.changeYAxisFilterLabelsCheckbox(axisId, false);
await PageObjects.visualize.clickGo();
const labels = await PageObjects.visualize.getYAxisLabels();
await PageObjects.visEditor.clickMetricsAndAxes();
await PageObjects.visEditor.clickYAxisOptions(axisId);
await PageObjects.visEditor.selectYAxisScaleType(axisId, 'log');
await PageObjects.visEditor.clickYAxisAdvancedOptions(axisId);
await PageObjects.visEditor.changeYAxisFilterLabelsCheckbox(axisId, false);
await PageObjects.visEditor.clickGo();
const labels = await PageObjects.visChart.getYAxisLabels();
const expectedLabels = [
'2',
'3',
@ -212,9 +218,9 @@ export default function({ getService, getPageObjects }) {
});
it('should show filtered ticks on selecting log scale', async () => {
await PageObjects.visualize.changeYAxisFilterLabelsCheckbox(axisId, true);
await PageObjects.visualize.clickGo();
const labels = await PageObjects.visualize.getYAxisLabels();
await PageObjects.visEditor.changeYAxisFilterLabelsCheckbox(axisId, true);
await PageObjects.visEditor.clickGo();
const labels = await PageObjects.visChart.getYAxisLabels();
const expectedLabels = [
'2',
'3',
@ -240,36 +246,36 @@ export default function({ getService, getPageObjects }) {
});
it('should show ticks on selecting square root scale', async () => {
await PageObjects.visualize.selectYAxisScaleType(axisId, 'square root');
await PageObjects.visualize.changeYAxisFilterLabelsCheckbox(axisId, false);
await PageObjects.visualize.clickGo();
const labels = await PageObjects.visualize.getYAxisLabels();
await PageObjects.visEditor.selectYAxisScaleType(axisId, 'square root');
await PageObjects.visEditor.changeYAxisFilterLabelsCheckbox(axisId, false);
await PageObjects.visEditor.clickGo();
const labels = await PageObjects.visChart.getYAxisLabels();
const expectedLabels = ['0', '2,000', '4,000', '6,000', '8,000', '10,000'];
expect(labels).to.eql(expectedLabels);
});
it('should show filtered ticks on selecting square root scale', async () => {
await PageObjects.visualize.changeYAxisFilterLabelsCheckbox(axisId, true);
await PageObjects.visualize.clickGo();
const labels = await PageObjects.visualize.getYAxisLabels();
await PageObjects.visEditor.changeYAxisFilterLabelsCheckbox(axisId, true);
await PageObjects.visEditor.clickGo();
const labels = await PageObjects.visChart.getYAxisLabels();
const expectedLabels = ['2,000', '4,000', '6,000', '8,000'];
expect(labels).to.eql(expectedLabels);
});
it('should show ticks on selecting linear scale', async () => {
await PageObjects.visualize.selectYAxisScaleType(axisId, 'linear');
await PageObjects.visualize.changeYAxisFilterLabelsCheckbox(axisId, false);
await PageObjects.visualize.clickGo();
const labels = await PageObjects.visualize.getYAxisLabels();
await PageObjects.visEditor.selectYAxisScaleType(axisId, 'linear');
await PageObjects.visEditor.changeYAxisFilterLabelsCheckbox(axisId, false);
await PageObjects.visEditor.clickGo();
const labels = await PageObjects.visChart.getYAxisLabels();
log.debug(labels);
const expectedLabels = ['0', '2,000', '4,000', '6,000', '8,000', '10,000'];
expect(labels).to.eql(expectedLabels);
});
it('should show filtered ticks on selecting linear scale', async () => {
await PageObjects.visualize.changeYAxisFilterLabelsCheckbox(axisId, true);
await PageObjects.visualize.clickGo();
const labels = await PageObjects.visualize.getYAxisLabels();
await PageObjects.visEditor.changeYAxisFilterLabelsCheckbox(axisId, true);
await PageObjects.visEditor.clickGo();
const labels = await PageObjects.visChart.getYAxisLabels();
const expectedLabels = ['2,000', '4,000', '6,000', '8,000'];
expect(labels).to.eql(expectedLabels);
});

View file

@ -22,7 +22,14 @@ import expect from '@kbn/expect';
export default function({ getService, getPageObjects }) {
const filterBar = getService('filterBar');
const retry = getService('retry');
const PageObjects = getPageObjects(['common', 'discover', 'visualize', 'header', 'timePicker']);
const PageObjects = getPageObjects([
'common',
'discover',
'visualize',
'header',
'timePicker',
'visChart',
]);
describe('visualize app', function describeIndexTests() {
describe('linked saved searched', () => {
@ -43,7 +50,7 @@ export default function({ getService, getPageObjects }) {
await PageObjects.visualize.clickSavedSearch(savedSearchName);
await PageObjects.timePicker.setDefaultAbsoluteRange();
await retry.waitFor('wait for count to equal 9,109', async () => {
const data = await PageObjects.visualize.getTableVisData();
const data = await PageObjects.visChart.getTableVisData();
return data.trim() === '9,109';
});
});
@ -54,7 +61,7 @@ export default function({ getService, getPageObjects }) {
'Sep 21, 2015 @ 10:00:00.000'
);
await retry.waitFor('wait for count to equal 3,950', async () => {
const data = await PageObjects.visualize.getTableVisData();
const data = await PageObjects.visChart.getTableVisData();
return data.trim() === '3,950';
});
});
@ -63,7 +70,7 @@ export default function({ getService, getPageObjects }) {
await filterBar.addFilter('bytes', 'is between', '100', '3000');
await PageObjects.header.waitUntilLoadingHasFinished();
await retry.waitFor('wait for count to equal 707', async () => {
const data = await PageObjects.visualize.getTableVisData();
const data = await PageObjects.visChart.getTableVisData();
return data.trim() === '707';
});
});
@ -71,7 +78,7 @@ export default function({ getService, getPageObjects }) {
it('should allow unlinking from a linked search', async () => {
await PageObjects.visualize.clickUnlinkSavedSearch();
await retry.waitFor('wait for count to equal 707', async () => {
const data = await PageObjects.visualize.getTableVisData();
const data = await PageObjects.visChart.getTableVisData();
return data.trim() === '707';
});
// The filter on the saved search should now be in the editor
@ -82,7 +89,7 @@ export default function({ getService, getPageObjects }) {
await filterBar.toggleFilterEnabled('extension.raw');
await PageObjects.header.waitUntilLoadingHasFinished();
await retry.waitFor('wait for count to equal 1,293', async () => {
const unfilteredData = await PageObjects.visualize.getTableVisData();
const unfilteredData = await PageObjects.visChart.getTableVisData();
return unfilteredData.trim() === '1,293';
});
});
@ -91,7 +98,7 @@ export default function({ getService, getPageObjects }) {
await PageObjects.visualize.saveVisualizationExpectSuccess('Unlinked before saved');
await PageObjects.header.waitUntilLoadingHasFinished();
await retry.waitFor('wait for count to equal 1,293', async () => {
const data = await PageObjects.visualize.getTableVisData();
const data = await PageObjects.visChart.getTableVisData();
return data.trim() === '1,293';
});
});

View file

@ -20,7 +20,7 @@
import expect from '@kbn/expect';
export default function({ getPageObjects, getService }) {
const PageObjects = getPageObjects(['common', 'visualize', 'header']);
const PageObjects = getPageObjects(['visualize', 'visEditor', 'visChart', 'header']);
const find = getService('find');
const inspector = getService('inspector');
const markdown = `
@ -33,8 +33,8 @@ export default function({ getPageObjects, getService }) {
before(async function() {
await PageObjects.visualize.navigateToNewVisualization();
await PageObjects.visualize.clickMarkdownWidget();
await PageObjects.visualize.setMarkdownTxt(markdown);
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.setMarkdownTxt(markdown);
await PageObjects.visEditor.clickGo();
});
describe('markdown vis', () => {
@ -43,29 +43,29 @@ export default function({ getPageObjects, getService }) {
});
it('should render markdown as html', async function() {
const h1Txt = await PageObjects.visualize.getMarkdownBodyDescendentText('h1');
const h1Txt = await PageObjects.visChart.getMarkdownBodyDescendentText('h1');
expect(h1Txt).to.equal('Heading 1');
});
it('should not render html in markdown as html', async function() {
const expected = 'Heading 1\n<h3>Inline HTML that should not be rendered as html</h3>';
const actual = await PageObjects.visualize.getMarkdownText();
const actual = await PageObjects.visChart.getMarkdownText();
expect(actual).to.equal(expected);
});
it('should auto apply changes if auto mode is turned on', async function() {
const markdown2 = '## Heading 2';
await PageObjects.visualize.toggleAutoMode();
await PageObjects.visualize.setMarkdownTxt(markdown2);
await PageObjects.visEditor.toggleAutoMode();
await PageObjects.visEditor.setMarkdownTxt(markdown2);
await PageObjects.header.waitUntilLoadingHasFinished();
const h1Txt = await PageObjects.visualize.getMarkdownBodyDescendentText('h2');
const h1Txt = await PageObjects.visChart.getMarkdownBodyDescendentText('h2');
expect(h1Txt).to.equal('Heading 2');
});
it('should resize the editor', async function() {
const editorSidebar = await find.byCssSelector('.visEditor__sidebar');
const initialSize = await editorSidebar.getSize();
await PageObjects.visualize.sizeUpEditor();
await PageObjects.visEditor.sizeUpEditor();
const afterSize = await editorSidebar.getSize();
expect(afterSize.width).to.be.greaterThan(initialSize.width);
});

View file

@ -24,7 +24,7 @@ export default function({ getService, getPageObjects }) {
const retry = getService('retry');
const filterBar = getService('filterBar');
const inspector = getService('inspector');
const PageObjects = getPageObjects(['common', 'visualize', 'timePicker']);
const PageObjects = getPageObjects(['visualize', 'visEditor', 'visChart', 'timePicker']);
describe('metric chart', function() {
before(async function() {
@ -45,21 +45,21 @@ export default function({ getService, getPageObjects }) {
// initial metric of "Count" is selected by default
await retry.try(async function tryingForTime() {
const metricValue = await PageObjects.visualize.getMetric();
const metricValue = await PageObjects.visChart.getMetric();
expect(expectedCount).to.eql(metricValue);
});
});
it('should show Average', async function() {
const avgMachineRam = ['13,104,036,080.615', 'Average machine.ram'];
await PageObjects.visualize.clickMetricEditor();
await PageObjects.visEditor.clickMetricEditor();
log.debug('Aggregation = Average');
await PageObjects.visualize.selectAggregation('Average', 'metrics');
await PageObjects.visEditor.selectAggregation('Average', 'metrics');
log.debug('Field = machine.ram');
await PageObjects.visualize.selectField('machine.ram', 'metrics');
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.selectField('machine.ram', 'metrics');
await PageObjects.visEditor.clickGo();
await retry.try(async function tryingForTime() {
const metricValue = await PageObjects.visualize.getMetric();
const metricValue = await PageObjects.visChart.getMetric();
expect(avgMachineRam).to.eql(metricValue);
});
});
@ -67,12 +67,12 @@ export default function({ getService, getPageObjects }) {
it('should show Sum', async function() {
const sumPhpMemory = ['85,865,880', 'Sum of phpmemory'];
log.debug('Aggregation = Sum');
await PageObjects.visualize.selectAggregation('Sum', 'metrics');
await PageObjects.visEditor.selectAggregation('Sum', 'metrics');
log.debug('Field = phpmemory');
await PageObjects.visualize.selectField('phpmemory', 'metrics');
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.selectField('phpmemory', 'metrics');
await PageObjects.visEditor.clickGo();
await retry.try(async function tryingForTime() {
const metricValue = await PageObjects.visualize.getMetric();
const metricValue = await PageObjects.visChart.getMetric();
expect(sumPhpMemory).to.eql(metricValue);
});
});
@ -81,12 +81,12 @@ export default function({ getService, getPageObjects }) {
const medianBytes = ['5,565.263', '50th percentile of bytes'];
// For now, only comparing the text label part of the metric
log.debug('Aggregation = Median');
await PageObjects.visualize.selectAggregation('Median', 'metrics');
await PageObjects.visEditor.selectAggregation('Median', 'metrics');
log.debug('Field = bytes');
await PageObjects.visualize.selectField('bytes', 'metrics');
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.selectField('bytes', 'metrics');
await PageObjects.visEditor.clickGo();
await retry.try(async function tryingForTime() {
const metricValue = await PageObjects.visualize.getMetric();
const metricValue = await PageObjects.visChart.getMetric();
// only comparing the text label!
expect(medianBytes[1]).to.eql(metricValue[1]);
});
@ -95,12 +95,12 @@ export default function({ getService, getPageObjects }) {
it('should show Min', async function() {
const minTimestamp = ['Sep 20, 2015 @ 00:00:00.000', 'Min @timestamp'];
log.debug('Aggregation = Min');
await PageObjects.visualize.selectAggregation('Min', 'metrics');
await PageObjects.visEditor.selectAggregation('Min', 'metrics');
log.debug('Field = @timestamp');
await PageObjects.visualize.selectField('@timestamp', 'metrics');
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.selectField('@timestamp', 'metrics');
await PageObjects.visEditor.clickGo();
await retry.try(async function tryingForTime() {
const metricValue = await PageObjects.visualize.getMetric();
const metricValue = await PageObjects.visChart.getMetric();
expect(minTimestamp).to.eql(metricValue);
});
});
@ -111,12 +111,12 @@ export default function({ getService, getPageObjects }) {
'Max relatedContent.article:modified_time',
];
log.debug('Aggregation = Max');
await PageObjects.visualize.selectAggregation('Max', 'metrics');
await PageObjects.visEditor.selectAggregation('Max', 'metrics');
log.debug('Field = relatedContent.article:modified_time');
await PageObjects.visualize.selectField('relatedContent.article:modified_time', 'metrics');
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.selectField('relatedContent.article:modified_time', 'metrics');
await PageObjects.visEditor.clickGo();
await retry.try(async function tryingForTime() {
const metricValue = await PageObjects.visualize.getMetric();
const metricValue = await PageObjects.visChart.getMetric();
expect(maxRelatedContentArticleModifiedTime).to.eql(metricValue);
});
});
@ -124,12 +124,12 @@ export default function({ getService, getPageObjects }) {
it('should show Unique Count', async function() {
const uniqueCountClientip = ['1,000', 'Unique count of clientip'];
log.debug('Aggregation = Unique Count');
await PageObjects.visualize.selectAggregation('Unique Count', 'metrics');
await PageObjects.visEditor.selectAggregation('Unique Count', 'metrics');
log.debug('Field = clientip');
await PageObjects.visualize.selectField('clientip', 'metrics');
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.selectField('clientip', 'metrics');
await PageObjects.visEditor.clickGo();
await retry.try(async function tryingForTime() {
const metricValue = await PageObjects.visualize.getMetric();
const metricValue = await PageObjects.visChart.getMetric();
expect(uniqueCountClientip).to.eql(metricValue);
});
});
@ -153,12 +153,12 @@ export default function({ getService, getPageObjects }) {
];
log.debug('Aggregation = Percentiles');
await PageObjects.visualize.selectAggregation('Percentiles', 'metrics');
await PageObjects.visEditor.selectAggregation('Percentiles', 'metrics');
log.debug('Field = machine.ram');
await PageObjects.visualize.selectField('machine.ram', 'metrics');
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.selectField('machine.ram', 'metrics');
await PageObjects.visEditor.clickGo();
await retry.try(async function tryingForTime() {
const metricValue = await PageObjects.visualize.getMetric();
const metricValue = await PageObjects.visChart.getMetric();
expect(percentileMachineRam).to.eql(metricValue);
});
});
@ -166,14 +166,14 @@ export default function({ getService, getPageObjects }) {
it('should show Percentile Ranks', async function() {
const percentileRankBytes = ['2.036%', 'Percentile rank 99 of "memory"'];
log.debug('Aggregation = Percentile Ranks');
await PageObjects.visualize.selectAggregation('Percentile Ranks', 'metrics');
await PageObjects.visEditor.selectAggregation('Percentile Ranks', 'metrics');
log.debug('Field = bytes');
await PageObjects.visualize.selectField('memory', 'metrics');
await PageObjects.visEditor.selectField('memory', 'metrics');
log.debug('Values = 99');
await PageObjects.visualize.setValue('99');
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.setValue('99');
await PageObjects.visEditor.clickGo();
await retry.try(async function tryingForTime() {
const metricValue = await PageObjects.visualize.getMetric();
const metricValue = await PageObjects.visChart.getMetric();
expect(percentileRankBytes).to.eql(metricValue);
});
});
@ -183,7 +183,7 @@ export default function({ getService, getPageObjects }) {
let filterCount = 0;
await retry.try(async function tryingForTime() {
// click first metric bucket
await PageObjects.visualize.clickMetricByIndex(0);
await PageObjects.visEditor.clickMetricByIndex(0);
filterCount = await filterBar.getFilterCount();
});
expect(filterCount).to.equal(0);
@ -191,17 +191,17 @@ export default function({ getService, getPageObjects }) {
it('should allow filtering with buckets', async function() {
log.debug('Bucket = Split Group');
await PageObjects.visualize.clickBucket('Split group');
await PageObjects.visEditor.clickBucket('Split group');
log.debug('Aggregation = Terms');
await PageObjects.visualize.selectAggregation('Terms');
await PageObjects.visEditor.selectAggregation('Terms');
log.debug('Field = machine.os.raw');
await PageObjects.visualize.selectField('machine.os.raw');
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.selectField('machine.os.raw');
await PageObjects.visEditor.clickGo();
let filterCount = 0;
await retry.try(async function tryingForTime() {
// click first metric bucket
await PageObjects.visualize.clickMetricByIndex(0);
await PageObjects.visEditor.clickMetricByIndex(0);
filterCount = await filterBar.getFilterCount();
});
await filterBar.removeAllFilters();

View file

@ -24,7 +24,14 @@ export default function({ getService, getPageObjects }) {
const filterBar = getService('filterBar');
const pieChart = getService('pieChart');
const inspector = getService('inspector');
const PageObjects = getPageObjects(['common', 'visualize', 'header', 'settings', 'timePicker']);
const PageObjects = getPageObjects([
'common',
'visualize',
'visEditor',
'visChart',
'header',
'timePicker',
]);
describe('pie chart', function() {
const vizName1 = 'Visualization PieChart';
@ -36,24 +43,24 @@ export default function({ getService, getPageObjects }) {
await PageObjects.visualize.clickNewSearch();
await PageObjects.timePicker.setDefaultAbsoluteRange();
log.debug('select bucket Split slices');
await PageObjects.visualize.clickBucket('Split slices');
await PageObjects.visEditor.clickBucket('Split slices');
log.debug('Click aggregation Histogram');
await PageObjects.visualize.selectAggregation('Histogram');
await PageObjects.visEditor.selectAggregation('Histogram');
log.debug('Click field memory');
await PageObjects.visualize.selectField('memory');
await PageObjects.visEditor.selectField('memory');
await PageObjects.header.waitUntilLoadingHasFinished();
await PageObjects.common.sleep(1003);
log.debug('setNumericInterval 4000');
await PageObjects.visualize.setNumericInterval('40000');
await PageObjects.visEditor.setInterval('40000', { type: 'numeric' });
log.debug('clickGo');
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.clickGo();
});
it('should save and load', async function() {
await PageObjects.visualize.saveVisualizationExpectSuccessAndBreadcrumb(vizName1);
await PageObjects.visualize.loadSavedVisualization(vizName1);
await PageObjects.visualize.waitForVisualization();
await PageObjects.visChart.waitForVisualization();
});
it('should have inspector enabled', async function() {
@ -93,15 +100,15 @@ export default function({ getService, getPageObjects }) {
await PageObjects.visualize.clickNewSearch();
await PageObjects.timePicker.setDefaultAbsoluteRange();
log.debug('select bucket Split slices');
await PageObjects.visualize.clickBucket('Split slices');
await PageObjects.visEditor.clickBucket('Split slices');
log.debug('Click aggregation Terms');
await PageObjects.visualize.selectAggregation('Terms');
await PageObjects.visEditor.selectAggregation('Terms');
log.debug('Click field machine.os.raw');
await PageObjects.visualize.selectField('machine.os.raw');
await PageObjects.visualize.toggleOtherBucket(2);
await PageObjects.visualize.toggleMissingBucket(2);
await PageObjects.visEditor.selectField('machine.os.raw');
await PageObjects.visEditor.toggleOtherBucket(2);
await PageObjects.visEditor.toggleMissingBucket(2);
log.debug('clickGo');
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.clickGo();
await pieChart.expectPieChartLabels(expectedTableData);
});
@ -109,20 +116,20 @@ export default function({ getService, getPageObjects }) {
const expectedTableData = ['Missing', 'osx'];
await pieChart.filterOnPieSlice('Other');
await PageObjects.visualize.waitForVisualization();
await PageObjects.visChart.waitForVisualization();
await pieChart.expectPieChartLabels(expectedTableData);
await filterBar.removeFilter('machine.os.raw');
await PageObjects.visualize.waitForVisualization();
await PageObjects.visChart.waitForVisualization();
});
it('should apply correct filter on other bucket by clicking on a legend', async () => {
const expectedTableData = ['Missing', 'osx'];
await PageObjects.visualize.filterLegend('Other');
await PageObjects.visualize.waitForVisualization();
await PageObjects.visChart.filterLegend('Other');
await PageObjects.visChart.waitForVisualization();
await pieChart.expectPieChartLabels(expectedTableData);
await filterBar.removeFilter('machine.os.raw');
await PageObjects.visualize.waitForVisualization();
await PageObjects.visChart.waitForVisualization();
});
it('should show two levels of other buckets', async () => {
@ -171,15 +178,15 @@ export default function({ getService, getPageObjects }) {
'Other',
];
await PageObjects.visualize.toggleOpenEditor(2, 'false');
await PageObjects.visualize.clickBucket('Split slices');
await PageObjects.visualize.selectAggregation('Terms');
await PageObjects.visEditor.toggleOpenEditor(2, 'false');
await PageObjects.visEditor.clickBucket('Split slices');
await PageObjects.visEditor.selectAggregation('Terms');
log.debug('Click field geo.src');
await PageObjects.visualize.selectField('geo.src');
await PageObjects.visualize.toggleOtherBucket(3);
await PageObjects.visualize.toggleMissingBucket(3);
await PageObjects.visEditor.selectField('geo.src');
await PageObjects.visEditor.toggleOtherBucket(3);
await PageObjects.visEditor.toggleMissingBucket(3);
log.debug('clickGo');
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.clickGo();
await pieChart.expectPieChartLabels(expectedTableData);
});
});
@ -187,17 +194,17 @@ export default function({ getService, getPageObjects }) {
describe('disabled aggs', () => {
before(async () => {
await PageObjects.visualize.loadSavedVisualization(vizName1);
await PageObjects.visualize.waitForRenderingCount();
await PageObjects.visChart.waitForRenderingCount();
});
it('should show correct result with one agg disabled', async () => {
const expectedTableData = ['win 8', 'win xp', 'win 7', 'ios', 'osx'];
await PageObjects.visualize.clickBucket('Split slices');
await PageObjects.visualize.selectAggregation('Terms');
await PageObjects.visualize.selectField('machine.os.raw');
await PageObjects.visualize.toggleDisabledAgg(2);
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.clickBucket('Split slices');
await PageObjects.visEditor.selectAggregation('Terms');
await PageObjects.visEditor.selectField('machine.os.raw');
await PageObjects.visEditor.toggleDisabledAgg(2);
await PageObjects.visEditor.clickGo();
await pieChart.expectPieChartLabels(expectedTableData);
});
@ -206,15 +213,15 @@ export default function({ getService, getPageObjects }) {
await PageObjects.visualize.saveVisualizationExpectSuccessAndBreadcrumb(vizName1);
await PageObjects.visualize.loadSavedVisualization(vizName1);
await PageObjects.visualize.waitForRenderingCount();
await PageObjects.visChart.waitForRenderingCount();
const expectedTableData = ['win 8', 'win xp', 'win 7', 'ios', 'osx'];
await pieChart.expectPieChartLabels(expectedTableData);
});
it('should show correct result when agg is re-enabled', async () => {
await PageObjects.visualize.toggleDisabledAgg(2);
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.toggleDisabledAgg(2);
await PageObjects.visEditor.clickGo();
const expectedTableData = [
'0',
@ -291,24 +298,24 @@ export default function({ getService, getPageObjects }) {
await PageObjects.visualize.clickNewSearch();
await PageObjects.timePicker.setDefaultAbsoluteRange();
log.debug('select bucket Split slices');
await PageObjects.visualize.clickBucket('Split slices');
await PageObjects.visEditor.clickBucket('Split slices');
log.debug('Click aggregation Filters');
await PageObjects.visualize.selectAggregation('Filters');
await PageObjects.visEditor.selectAggregation('Filters');
log.debug('Set the 1st filter value');
await PageObjects.visualize.setFilterAggregationValue('geo.dest:"US"');
await PageObjects.visEditor.setFilterAggregationValue('geo.dest:"US"');
log.debug('Add new filter');
await PageObjects.visualize.addNewFilterAggregation();
await PageObjects.visEditor.addNewFilterAggregation();
log.debug('Set the 2nd filter value');
await PageObjects.visualize.setFilterAggregationValue('geo.dest:"CN"', 1);
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.setFilterAggregationValue('geo.dest:"CN"', 1);
await PageObjects.visEditor.clickGo();
const emptyFromTime = 'Sep 19, 2016 @ 06:31:44.000';
const emptyToTime = 'Sep 23, 2016 @ 18:31:44.000';
log.debug(
'Switch to a different time range from "' + emptyFromTime + '" to "' + emptyToTime + '"'
);
await PageObjects.timePicker.setAbsoluteRange(emptyFromTime, emptyToTime);
await PageObjects.visualize.waitForVisualization();
await PageObjects.visualize.expectError();
await PageObjects.visChart.waitForVisualization();
await PageObjects.visChart.expectError();
});
});
describe('multi series slice', () => {
@ -327,22 +334,22 @@ export default function({ getService, getPageObjects }) {
);
await PageObjects.timePicker.setDefaultAbsoluteRange();
log.debug('select bucket Split slices');
await PageObjects.visualize.clickBucket('Split slices');
await PageObjects.visEditor.clickBucket('Split slices');
log.debug('Click aggregation Histogram');
await PageObjects.visualize.selectAggregation('Histogram');
await PageObjects.visEditor.selectAggregation('Histogram');
log.debug('Click field memory');
await PageObjects.visualize.selectField('memory');
await PageObjects.visEditor.selectField('memory');
await PageObjects.header.waitUntilLoadingHasFinished();
await PageObjects.common.sleep(1003);
log.debug('setNumericInterval 4000');
await PageObjects.visualize.setNumericInterval('40000');
await PageObjects.visEditor.setInterval('40000', { type: 'numeric' });
log.debug('Toggle previous editor');
await PageObjects.visualize.toggleAggregationEditor(2);
await PageObjects.visEditor.toggleAggregationEditor(2);
log.debug('select bucket Split slices');
await PageObjects.visualize.clickBucket('Split slices');
await PageObjects.visualize.selectAggregation('Terms');
await PageObjects.visualize.selectField('geo.dest');
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.clickBucket('Split slices');
await PageObjects.visEditor.selectAggregation('Terms');
await PageObjects.visEditor.selectField('geo.dest');
await PageObjects.visEditor.clickGo();
});
it('should show correct chart', async () => {
@ -428,11 +435,11 @@ export default function({ getService, getPageObjects }) {
'360,000',
'CN',
];
await PageObjects.visualize.filterLegend('CN');
await PageObjects.visualize.waitForVisualization();
await PageObjects.visChart.filterLegend('CN');
await PageObjects.visChart.waitForVisualization();
await pieChart.expectPieChartLabels(expectedTableData);
await filterBar.removeFilter('geo.dest');
await PageObjects.visualize.waitForVisualization();
await PageObjects.visChart.waitForVisualization();
});
it('should still showing pie chart when a subseries have zero data', async function() {
@ -442,21 +449,21 @@ export default function({ getService, getPageObjects }) {
await PageObjects.visualize.clickNewSearch();
await PageObjects.timePicker.setDefaultAbsoluteRange();
log.debug('select bucket Split slices');
await PageObjects.visualize.clickBucket('Split slices');
await PageObjects.visEditor.clickBucket('Split slices');
log.debug('Click aggregation Filters');
await PageObjects.visualize.selectAggregation('Filters');
await PageObjects.visEditor.selectAggregation('Filters');
log.debug('Set the 1st filter value');
await PageObjects.visualize.setFilterAggregationValue('geo.dest:"US"');
await PageObjects.visEditor.setFilterAggregationValue('geo.dest:"US"');
log.debug('Toggle previous editor');
await PageObjects.visualize.toggleAggregationEditor(2);
await PageObjects.visEditor.toggleAggregationEditor(2);
log.debug('Add a new series, select bucket Split slices');
await PageObjects.visualize.clickBucket('Split slices');
await PageObjects.visEditor.clickBucket('Split slices');
log.debug('Click aggregation Filters');
await PageObjects.visualize.selectAggregation('Filters');
await PageObjects.visEditor.selectAggregation('Filters');
log.debug('Set the 1st filter value of the aggregation id 3');
await PageObjects.visualize.setFilterAggregationValue('geo.dest:"UX"', 0, 3);
await PageObjects.visualize.clickGo();
const legends = await PageObjects.visualize.getLegendEntries();
await PageObjects.visEditor.setFilterAggregationValue('geo.dest:"UX"', 0, 3);
await PageObjects.visEditor.clickGo();
const legends = await PageObjects.visChart.getLegendEntries();
const expectedLegends = ['geo.dest:"US"', 'geo.dest:"UX"'];
expect(legends).to.eql(expectedLegends);
});
@ -469,15 +476,15 @@ export default function({ getService, getPageObjects }) {
await PageObjects.visualize.clickNewSearch();
await PageObjects.timePicker.setDefaultAbsoluteRange();
log.debug('select bucket Split chart');
await PageObjects.visualize.clickBucket('Split chart');
await PageObjects.visualize.selectAggregation('Terms');
await PageObjects.visualize.selectField('machine.os.raw');
await PageObjects.visualize.toggleAggregationEditor(2);
await PageObjects.visEditor.clickBucket('Split chart');
await PageObjects.visEditor.selectAggregation('Terms');
await PageObjects.visEditor.selectField('machine.os.raw');
await PageObjects.visEditor.toggleAggregationEditor(2);
log.debug('Add a new series, select bucket Split slices');
await PageObjects.visualize.clickBucket('Split slices');
await PageObjects.visualize.selectAggregation('Terms');
await PageObjects.visualize.selectField('geo.src');
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.clickBucket('Split slices');
await PageObjects.visEditor.selectAggregation('Terms');
await PageObjects.visEditor.selectField('geo.src');
await PageObjects.visEditor.clickGo();
});
it('shows correct split chart', async () => {
@ -522,7 +529,7 @@ export default function({ getService, getPageObjects }) {
['ios', '478', 'CN', '478'],
['osx', '228', 'CN', '228'],
];
await PageObjects.visualize.filterLegend('CN');
await PageObjects.visChart.filterLegend('CN');
await PageObjects.header.waitUntilLoadingHasFinished();
await inspector.open();
await inspector.setTablePageSize(50);

View file

@ -25,11 +25,12 @@ export default function({ getService, getPageObjects }) {
const kibanaServer = getService('kibanaServer');
const browser = getService('browser');
const PageObjects = getPageObjects([
'common',
'visualize',
'header',
'pointSeries',
'timePicker',
'visEditor',
'visChart',
]);
const pointSeriesVis = PageObjects.pointSeries;
const inspector = getService('inspector');
@ -42,18 +43,18 @@ export default function({ getService, getPageObjects }) {
await PageObjects.visualize.clickNewSearch();
await PageObjects.timePicker.setDefaultAbsoluteRange();
log.debug('Bucket = X-axis');
await PageObjects.visualize.clickBucket('X-axis');
await PageObjects.visEditor.clickBucket('X-axis');
log.debug('Aggregation = Date Histogram');
await PageObjects.visualize.selectAggregation('Date Histogram');
await PageObjects.visEditor.selectAggregation('Date Histogram');
log.debug('Field = @timestamp');
await PageObjects.visualize.selectField('@timestamp');
await PageObjects.visEditor.selectField('@timestamp');
// add another metrics
log.debug('Metric = Value Axis');
await PageObjects.visualize.clickBucket('Y-axis', 'metrics');
await PageObjects.visEditor.clickBucket('Y-axis', 'metrics');
log.debug('Aggregation = Average');
await PageObjects.visualize.selectAggregation('Average', 'metrics');
await PageObjects.visEditor.selectAggregation('Average', 'metrics');
log.debug('Field = memory');
await PageObjects.visualize.selectField('machine.ram', 'metrics');
await PageObjects.visEditor.selectField('machine.ram', 'metrics');
// go to options page
log.debug('Going to axis options');
await pointSeriesVis.clickAxisOptions();
@ -61,11 +62,11 @@ export default function({ getService, getPageObjects }) {
log.debug('adding axis');
await pointSeriesVis.clickAddAxis();
// set average count to use second value axis
await PageObjects.visualize.toggleAccordion('visEditorSeriesAccordion3');
await PageObjects.visEditor.toggleAccordion('visEditorSeriesAccordion3');
log.debug('Average memory value axis - ValueAxis-2');
await pointSeriesVis.setSeriesAxis(1, 'ValueAxis-2');
await PageObjects.visualize.waitForVisualizationRenderingStabilized();
await PageObjects.visualize.clickGo();
await PageObjects.visChart.waitForVisualizationRenderingStabilized();
await PageObjects.visEditor.clickGo();
}
describe('point series', function describeIndexTests() {
@ -129,14 +130,14 @@ export default function({ getService, getPageObjects }) {
];
await retry.try(async () => {
const data = await PageObjects.visualize.getLineChartData('Count');
const data = await PageObjects.visChart.getLineChartData('Count');
log.debug('count data=' + data);
log.debug('data.length=' + data.length);
expect(data).to.eql(expectedChartValues[0]);
});
await retry.try(async () => {
const avgMemoryData = await PageObjects.visualize.getLineChartData(
const avgMemoryData = await PageObjects.visChart.getLineChartData(
'Average machine.ram',
'ValueAxis-2'
);
@ -158,7 +159,7 @@ export default function({ getService, getPageObjects }) {
describe('multiple chart types', function() {
it('should change average series type to histogram', async function() {
await pointSeriesVis.setSeriesType(1, 'histogram');
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.clickGo();
const length = await pointSeriesVis.getHistogramSeries();
expect(length).to.be(1);
});
@ -166,12 +167,12 @@ export default function({ getService, getPageObjects }) {
describe('grid lines', function() {
before(async function() {
await pointSeriesVis.clickOptions();
await PageObjects.visEditor.clickOptionsTab();
});
it('should show category grid lines', async function() {
await pointSeriesVis.toggleGridCategoryLines();
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.clickGo();
const gridLines = await pointSeriesVis.getGridLines();
expect(gridLines.length).to.be(9);
gridLines.forEach(gridLine => {
@ -182,7 +183,7 @@ export default function({ getService, getPageObjects }) {
it('should show value axis grid lines', async function() {
await pointSeriesVis.setGridValueAxis('ValueAxis-2');
await pointSeriesVis.toggleGridCategoryLines();
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.clickGo();
const gridLines = await pointSeriesVis.getGridLines();
expect(gridLines.length).to.be(9);
gridLines.forEach(gridLine => {
@ -199,36 +200,36 @@ export default function({ getService, getPageObjects }) {
await PageObjects.visualize.navigateToNewVisualization();
await PageObjects.visualize.clickLineChart();
await PageObjects.visualize.clickNewSearch();
await PageObjects.visualize.selectYAxisAggregation('Average', 'bytes', customLabel, 1);
await PageObjects.visualize.clickGo();
await PageObjects.visualize.clickMetricsAndAxes();
await PageObjects.visualize.clickYAxisOptions('ValueAxis-1');
await PageObjects.visEditor.selectYAxisAggregation('Average', 'bytes', customLabel, 1);
await PageObjects.visEditor.clickGo();
await PageObjects.visEditor.clickMetricsAndAxes();
await PageObjects.visEditor.clickYAxisOptions('ValueAxis-1');
});
it('should render a custom label when one is set', async function() {
const title = await PageObjects.visualize.getYAxisTitle();
const title = await PageObjects.visChart.getYAxisTitle();
expect(title).to.be(customLabel);
});
it('should render a custom axis title when one is set, overriding the custom label', async function() {
await pointSeriesVis.setAxisTitle(axisTitle);
await PageObjects.visualize.clickGo();
const title = await PageObjects.visualize.getYAxisTitle();
await PageObjects.visEditor.clickGo();
const title = await PageObjects.visChart.getYAxisTitle();
expect(title).to.be(axisTitle);
});
it('should preserve saved axis titles after a vis is saved and reopened', async function() {
await PageObjects.visualize.saveVisualizationExpectSuccess(visName);
await PageObjects.visualize.waitForVisualization();
await PageObjects.visChart.waitForVisualization();
await PageObjects.visualize.loadSavedVisualization(visName);
await PageObjects.visualize.waitForRenderingCount();
await PageObjects.visualize.clickData();
await PageObjects.visualize.toggleOpenEditor(1);
await PageObjects.visualize.setCustomLabel('test', 1);
await PageObjects.visualize.clickGo();
await PageObjects.visualize.clickMetricsAndAxes();
await PageObjects.visualize.clickYAxisOptions('ValueAxis-1');
const title = await PageObjects.visualize.getYAxisTitle();
await PageObjects.visChart.waitForRenderingCount();
await PageObjects.visEditor.clickDataTab();
await PageObjects.visEditor.toggleOpenEditor(1);
await PageObjects.visEditor.setCustomLabel('test', 1);
await PageObjects.visEditor.clickGo();
await PageObjects.visEditor.clickMetricsAndAxes();
await PageObjects.visEditor.clickYAxisOptions('ValueAxis-1');
const title = await PageObjects.visChart.getYAxisTitle();
expect(title).to.be(axisTitle);
});
});
@ -238,7 +239,7 @@ export default function({ getService, getPageObjects }) {
it('should show round labels in default timezone', async function() {
await initChart();
const labels = await PageObjects.visualize.getXAxisLabels();
const labels = await PageObjects.visChart.getXAxisLabels();
expect(labels.join()).to.contain(expectedLabels.join());
});
@ -248,7 +249,7 @@ export default function({ getService, getPageObjects }) {
await PageObjects.header.awaitKibanaChrome();
await initChart();
const labels = await PageObjects.visualize.getXAxisLabels();
const labels = await PageObjects.visChart.getXAxisLabels();
expect(labels.join()).to.contain(expectedLabels.join());
});
@ -258,10 +259,10 @@ export default function({ getService, getPageObjects }) {
const toTime = 'Sep 22, 2015 @ 16:08:34.554';
// note that we're setting the absolute time range while we're in 'America/Phoenix' tz
await PageObjects.timePicker.setAbsoluteRange(fromTime, toTime);
await PageObjects.visualize.waitForRenderingCount();
await PageObjects.visChart.waitForRenderingCount();
await retry.waitFor('wait for x-axis labels to match expected for Phoenix', async () => {
const labels = await PageObjects.visualize.getXAxisLabels();
const labels = await PageObjects.visChart.getXAxisLabels();
log.debug(`Labels: ${labels}`);
return (
labels.toString() === ['10:00', '11:00', '12:00', '13:00', '14:00', '15:00'].toString()
@ -303,11 +304,11 @@ export default function({ getService, getPageObjects }) {
await browser.refresh();
// wait some time before trying to check for rendering count
await PageObjects.header.awaitKibanaChrome();
await PageObjects.visualize.waitForRenderingCount();
await PageObjects.visChart.waitForRenderingCount();
log.debug('getXAxisLabels');
await retry.waitFor('wait for x-axis labels to match expected for UTC', async () => {
const labels2 = await PageObjects.visualize.getXAxisLabels();
const labels2 = await PageObjects.visChart.getXAxisLabels();
log.debug(`Labels: ${labels2}`);
return (
labels2.toString() === ['17:00', '18:00', '19:00', '20:00', '21:00', '22:00'].toString()

View file

@ -24,7 +24,7 @@ export default function({ getService, getPageObjects }) {
const inspector = getService('inspector');
const log = getService('log');
const find = getService('find');
const PageObjects = getPageObjects(['common', 'visualize', 'timePicker', 'settings']);
const PageObjects = getPageObjects(['visualize', 'visEditor', 'timePicker']);
before(async function() {
log.debug('navigateToApp visualize');
@ -34,12 +34,12 @@ export default function({ getService, getPageObjects }) {
await PageObjects.visualize.clickNewSearch();
await PageObjects.timePicker.setDefaultAbsoluteRange();
log.debug('Bucket = Shape field');
await PageObjects.visualize.clickBucket('Shape field');
await PageObjects.visEditor.clickBucket('Shape field');
log.debug('Aggregation = Terms');
await PageObjects.visualize.selectAggregation('Terms');
await PageObjects.visEditor.selectAggregation('Terms');
log.debug('Field = geo.src');
await PageObjects.visualize.selectField('geo.src');
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.selectField('geo.src');
await PageObjects.visEditor.clickGo();
});
describe('vector map', function indexPatternCreation() {
@ -60,26 +60,26 @@ export default function({ getService, getPageObjects }) {
});
it('should change results after changing layer to world', async function() {
await PageObjects.visualize.clickOptions();
await PageObjects.visualize.setSelectByOptionText(
await PageObjects.visEditor.clickOptionsTab();
await PageObjects.visEditor.setSelectByOptionText(
'regionMapOptionsSelectLayer',
'World Countries'
);
//ensure all fields are there
await PageObjects.visualize.setSelectByOptionText(
await PageObjects.visEditor.setSelectByOptionText(
'regionMapOptionsSelectJoinField',
'ISO 3166-1 alpha-2 code'
);
await PageObjects.visualize.setSelectByOptionText(
await PageObjects.visEditor.setSelectByOptionText(
'regionMapOptionsSelectJoinField',
'ISO 3166-1 alpha-3 code'
);
await PageObjects.visualize.setSelectByOptionText(
await PageObjects.visEditor.setSelectByOptionText(
'regionMapOptionsSelectJoinField',
'name'
);
await PageObjects.visualize.setSelectByOptionText(
await PageObjects.visEditor.setSelectByOptionText(
'regionMapOptionsSelectJoinField',
'ISO 3166-1 alpha-2 code'
);

View file

@ -26,7 +26,16 @@ export default function({ getService, getPageObjects }) {
const browser = getService('browser');
const retry = getService('retry');
const find = getService('find');
const PageObjects = getPageObjects(['common', 'visualize', 'header', 'settings', 'timePicker']);
const PageObjects = getPageObjects([
'common',
'visualize',
'visEditor',
'visChart',
'header',
'settings',
'timePicker',
'tagCloud',
]);
describe('tag cloud chart', function() {
const vizName1 = 'Visualization tagCloud';
@ -40,15 +49,15 @@ export default function({ getService, getPageObjects }) {
await PageObjects.visualize.clickNewSearch();
await PageObjects.timePicker.setDefaultAbsoluteRange();
log.debug('select Tags');
await PageObjects.visualize.clickBucket('Tags');
await PageObjects.visEditor.clickBucket('Tags');
log.debug('Click aggregation Terms');
await PageObjects.visualize.selectAggregation('Terms');
await PageObjects.visEditor.selectAggregation('Terms');
log.debug('Click field machine.ram');
await retry.try(async function tryingForTime() {
await PageObjects.visualize.selectField(termsField);
await PageObjects.visEditor.selectField(termsField);
});
await PageObjects.visualize.selectOrderByMetric(2, '_key');
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.selectOrderByMetric(2, '_key');
await PageObjects.visEditor.clickGo();
});
it('should have inspector enabled', async function() {
@ -56,7 +65,7 @@ export default function({ getService, getPageObjects }) {
});
it('should show correct tag cloud data', async function() {
const data = await PageObjects.visualize.getTextTag();
const data = await PageObjects.tagCloud.getTextTag();
log.debug(data);
expect(data).to.eql([
'32,212,254,720',
@ -69,22 +78,22 @@ export default function({ getService, getPageObjects }) {
it('should collapse the sidebar', async function() {
const editorSidebar = await find.byCssSelector('.collapsible-sidebar');
await PageObjects.visualize.clickEditorSidebarCollapse();
await PageObjects.visEditor.clickEditorSidebarCollapse();
// Give d3 tag cloud some time to rearrange tags
await PageObjects.common.sleep(1000);
const afterSize = await editorSidebar.getSize();
expect(afterSize.width).to.be(0);
await PageObjects.visualize.clickEditorSidebarCollapse();
await PageObjects.visEditor.clickEditorSidebarCollapse();
});
it('should still show all tags after sidebar has been collapsed', async function() {
await PageObjects.visualize.clickEditorSidebarCollapse();
await PageObjects.visEditor.clickEditorSidebarCollapse();
// Give d3 tag cloud some time to rearrange tags
await PageObjects.common.sleep(1000);
await PageObjects.visualize.clickEditorSidebarCollapse();
await PageObjects.visEditor.clickEditorSidebarCollapse();
// Give d3 tag cloud some time to rearrange tags
await PageObjects.common.sleep(1000);
const data = await PageObjects.visualize.getTextTag();
const data = await PageObjects.tagCloud.getTextTag();
log.debug(data);
expect(data).to.eql([
'32,212,254,720',
@ -100,7 +109,7 @@ export default function({ getService, getPageObjects }) {
await PageObjects.common.sleep(1000);
await browser.setWindowSize(1200, 800);
await PageObjects.common.sleep(1000);
const data = await PageObjects.visualize.getTextTag();
const data = await PageObjects.tagCloud.getTextTag();
expect(data).to.eql([
'32,212,254,720',
'21,474,836,480',
@ -114,11 +123,11 @@ export default function({ getService, getPageObjects }) {
await PageObjects.visualize.saveVisualizationExpectSuccessAndBreadcrumb(vizName1);
await PageObjects.visualize.loadSavedVisualization(vizName1);
await PageObjects.visualize.waitForVisualization();
await PageObjects.visChart.waitForVisualization();
});
it('should show the tags and relative size', function() {
return PageObjects.visualize.getTextSizes().then(function(results) {
return PageObjects.tagCloud.getTextSizes().then(function(results) {
log.debug('results here ' + results);
expect(results).to.eql(['72px', '63px', '25px', '32px', '18px']);
});
@ -153,7 +162,7 @@ export default function({ getService, getPageObjects }) {
});
await PageObjects.header.waitUntilLoadingHasFinished();
await PageObjects.timePicker.setDefaultAbsoluteRange();
await PageObjects.visualize.waitForVisualization();
await PageObjects.visChart.waitForVisualization();
});
after(async function() {
@ -168,15 +177,15 @@ export default function({ getService, getPageObjects }) {
});
it('should format tags with field formatter', async function() {
const data = await PageObjects.visualize.getTextTag();
const data = await PageObjects.tagCloud.getTextTag();
log.debug(data);
expect(data).to.eql(['30GB', '20GB', '19GB', '18GB', '17GB']);
});
it('should apply filter with unformatted value', async function() {
await PageObjects.visualize.selectTagCloudTag('30GB');
await PageObjects.tagCloud.selectTagCloudTag('30GB');
await PageObjects.header.waitUntilLoadingHasFinished();
const data = await PageObjects.visualize.getTextTag();
const data = await PageObjects.tagCloud.getTextTag();
expect(data).to.eql(['30GB']);
});
});

View file

@ -27,7 +27,14 @@ export default function({ getService, getPageObjects }) {
const filterBar = getService('filterBar');
const testSubjects = getService('testSubjects');
const browser = getService('browser');
const PageObjects = getPageObjects(['common', 'visualize', 'timePicker', 'settings']);
const PageObjects = getPageObjects([
'common',
'visualize',
'visEditor',
'visChart',
'timePicker',
'tileMap',
]);
describe('tile map visualize app', function() {
describe('incomplete config', function describeIndexTests() {
@ -45,8 +52,8 @@ export default function({ getService, getPageObjects }) {
it('should be able to zoom in twice', async () => {
//should not throw
await PageObjects.visualize.clickMapZoomIn();
await PageObjects.visualize.clickMapZoomIn();
await PageObjects.tileMap.clickMapZoomIn();
await PageObjects.tileMap.clickMapZoomIn();
});
});
@ -61,14 +68,14 @@ export default function({ getService, getPageObjects }) {
await PageObjects.visualize.clickNewSearch();
await PageObjects.timePicker.setDefaultAbsoluteRange();
log.debug('select bucket Geo Coordinates');
await PageObjects.visualize.clickBucket('Geo coordinates');
await PageObjects.visEditor.clickBucket('Geo coordinates');
log.debug('Click aggregation Geohash');
await PageObjects.visualize.selectAggregation('Geohash');
await PageObjects.visEditor.selectAggregation('Geohash');
log.debug('Click field geo.coordinates');
await retry.try(async function tryingForTime() {
await PageObjects.visualize.selectField('geo.coordinates');
await PageObjects.visEditor.selectField('geo.coordinates');
});
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.clickGo();
});
/**
@ -106,9 +113,9 @@ export default function({ getService, getPageObjects }) {
['-', '8', '108', { lat: 18, lon: -157 }],
];
//level 1
await PageObjects.visualize.clickMapZoomOut();
await PageObjects.tileMap.clickMapZoomOut();
//level 0
await PageObjects.visualize.clickMapZoomOut();
await PageObjects.tileMap.clickMapZoomOut();
await inspector.open();
await inspector.setTablePageSize(50);
@ -118,8 +125,8 @@ export default function({ getService, getPageObjects }) {
});
it('should not be able to zoom out beyond 0', async function() {
await PageObjects.visualize.zoomAllTheWayOut();
const enabled = await PageObjects.visualize.getMapZoomOutEnabled();
await PageObjects.tileMap.zoomAllTheWayOut();
const enabled = await PageObjects.tileMap.getMapZoomOutEnabled();
expect(enabled).to.be(false);
});
@ -148,7 +155,7 @@ export default function({ getService, getPageObjects }) {
['-', 'b7', '167', { lat: 64, lon: -163 }],
];
await PageObjects.visualize.clickMapFitDataBounds();
await PageObjects.tileMap.clickMapFitDataBounds();
await inspector.open();
const data = await inspector.getTableData();
await inspector.close();
@ -164,8 +171,8 @@ export default function({ getService, getPageObjects }) {
await filterBar.addFilter('bytes', 'is between', '19980', '19990');
await filterBar.toggleFilterPinned('bytes');
await PageObjects.visualize.zoomAllTheWayOut();
await PageObjects.visualize.clickMapFitDataBounds();
await PageObjects.tileMap.zoomAllTheWayOut();
await PageObjects.tileMap.clickMapFitDataBounds();
await inspector.open();
const data = await inspector.getTableData();
@ -178,15 +185,15 @@ export default function({ getService, getPageObjects }) {
it('Newly saved visualization retains map bounds', async () => {
const vizName1 = 'Visualization TileMap';
await PageObjects.visualize.clickMapZoomIn();
await PageObjects.visualize.clickMapZoomIn();
await PageObjects.tileMap.clickMapZoomIn();
await PageObjects.tileMap.clickMapZoomIn();
const mapBounds = await PageObjects.visualize.getMapBounds();
const mapBounds = await PageObjects.tileMap.getMapBounds();
await inspector.close();
await PageObjects.visualize.saveVisualizationExpectSuccess(vizName1);
const afterSaveMapBounds = await PageObjects.visualize.getMapBounds();
const afterSaveMapBounds = await PageObjects.tileMap.getMapBounds();
await inspector.close();
// For some reason the values are slightly different, so we can't check that they are equal. But we did
@ -207,17 +214,17 @@ export default function({ getService, getPageObjects }) {
});
it('when not checked does not add filters to aggregation', async () => {
await PageObjects.visualize.toggleOpenEditor(2);
await PageObjects.visualize.setIsFilteredByCollarCheckbox(false);
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.toggleOpenEditor(2);
await PageObjects.visEditor.setIsFilteredByCollarCheckbox(false);
await PageObjects.visEditor.clickGo();
await inspector.open();
await inspector.expectTableHeaders(['geohash_grid', 'Count', 'Geo Centroid']);
await inspector.close();
});
after(async () => {
await PageObjects.visualize.setIsFilteredByCollarCheckbox(true);
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.setIsFilteredByCollarCheckbox(true);
await PageObjects.visEditor.clickGo();
});
});
});
@ -245,18 +252,18 @@ export default function({ getService, getPageObjects }) {
const zoomLevel = 9;
for (let i = 0; i < zoomLevel; i++) {
await PageObjects.visualize.clickMapZoomIn();
await PageObjects.tileMap.clickMapZoomIn();
}
});
beforeEach(async function() {
await PageObjects.visualize.clickMapZoomIn(waitForLoading);
await PageObjects.tileMap.clickMapZoomIn(waitForLoading);
});
afterEach(async function() {
if (!last) {
await PageObjects.common.sleep(toastDefaultLife);
await PageObjects.visualize.clickMapZoomOut(waitForLoading);
await PageObjects.tileMap.clickMapZoomOut(waitForLoading);
}
});
@ -270,11 +277,11 @@ export default function({ getService, getPageObjects }) {
it('should suppress zoom warning if suppress warnings button clicked', async () => {
last = true;
await PageObjects.visualize.waitForVisualization();
await PageObjects.visChart.waitForVisualization();
await find.clickByCssSelector('[data-test-subj="suppressZoomWarnings"]');
await PageObjects.visualize.clickMapZoomOut(waitForLoading);
await PageObjects.tileMap.clickMapZoomOut(waitForLoading);
await testSubjects.waitForDeleted('suppressZoomWarnings');
await PageObjects.visualize.clickMapZoomIn(waitForLoading);
await PageObjects.tileMap.clickMapZoomIn(waitForLoading);
await testSubjects.missingOrFail('maxZoomWarning');
});

View file

@ -25,7 +25,7 @@ export default function({ getService, getPageObjects }: FtrProviderContext) {
const esArchiver = getService('esArchiver');
const log = getService('log');
const inspector = getService('inspector');
const PageObjects = getPageObjects(['visualize', 'visualBuilder', 'timePicker']);
const PageObjects = getPageObjects(['visualize', 'visualBuilder', 'timePicker', 'visChart']);
describe('visual builder', function describeIndexTests() {
this.tags('smoke');
@ -80,7 +80,7 @@ export default function({ getService, getPageObjects }: FtrProviderContext) {
});
it('should verify gauge label and count display', async () => {
await PageObjects.visualize.waitForVisualizationRenderingStabilized();
await PageObjects.visChart.waitForVisualizationRenderingStabilized();
const labelString = await PageObjects.visualBuilder.getGaugeLabel();
expect(labelString).to.be('Count');
const gaugeCount = await PageObjects.visualBuilder.getGaugeCount();
@ -96,7 +96,7 @@ export default function({ getService, getPageObjects }: FtrProviderContext) {
});
it('should verify topN label and count display', async () => {
await PageObjects.visualize.waitForVisualizationRenderingStabilized();
await PageObjects.visChart.waitForVisualizationRenderingStabilized();
const labelString = await PageObjects.visualBuilder.getTopNLabel();
expect(labelString).to.be('Count');
const gaugeCount = await PageObjects.visualBuilder.getTopNCount();

View file

@ -21,7 +21,11 @@ import expect from '@kbn/expect';
import { FtrProviderContext } from '../../ftr_provider_context';
export default function({ getPageObjects }: FtrProviderContext) {
const { visualBuilder, visualize } = getPageObjects(['visualBuilder', 'visualize']);
const { visualBuilder, visualize, visChart } = getPageObjects([
'visualBuilder',
'visualize',
'visChart',
]);
describe('visual builder', function describeIndexTests() {
describe('table', () => {
@ -32,7 +36,7 @@ export default function({ getPageObjects }: FtrProviderContext) {
await visualBuilder.checkTableTabIsPresent();
await visualBuilder.selectGroupByField('machine.os.raw');
await visualBuilder.setColumnLabelValue('OS');
await visualize.waitForVisualizationRenderingStabilized();
await visChart.waitForVisualizationRenderingStabilized();
});
it('should display correct values on changing group by field and column name', async () => {

View file

@ -20,7 +20,7 @@
import expect from '@kbn/expect';
export default function({ getService, getPageObjects }) {
const PageObjects = getPageObjects(['common', 'header', 'timePicker', 'visualize']);
const PageObjects = getPageObjects(['timePicker', 'visualize', 'visChart', 'vegaChart']);
const filterBar = getService('filterBar');
const inspector = getService('inspector');
const log = getService('log');
@ -40,7 +40,7 @@ export default function({ getService, getPageObjects }) {
});
it.skip('should have some initial vega spec text', async function() {
const vegaSpec = await PageObjects.visualize.getVegaSpec();
const vegaSpec = await PageObjects.vegaChart.getSpec();
expect(vegaSpec)
.to.contain('{')
.and.to.contain('data');
@ -48,7 +48,7 @@ export default function({ getService, getPageObjects }) {
});
it('should have view and control containers', async function() {
const view = await PageObjects.visualize.getVegaViewContainer();
const view = await PageObjects.vegaChart.getViewContainer();
expect(view).to.be.ok();
const size = await view.getSize();
expect(size)
@ -57,7 +57,7 @@ export default function({ getService, getPageObjects }) {
expect(size.width).to.be.above(0);
expect(size.height).to.be.above(0);
const controls = await PageObjects.visualize.getVegaControlContainer();
const controls = await PageObjects.vegaChart.getControlContainer();
expect(controls).to.be.ok();
});
});
@ -73,9 +73,9 @@ export default function({ getService, getPageObjects }) {
});
it.skip('should render different data in response to filter change', async function() {
await PageObjects.visualize.expectVisToMatchScreenshot('vega_chart');
await PageObjects.vegaChart.expectVisToMatchScreenshot('vega_chart');
await filterBar.addFilter('@tags.raw', 'is', 'error');
await PageObjects.visualize.expectVisToMatchScreenshot('vega_chart_filtered');
await PageObjects.vegaChart.expectVisToMatchScreenshot('vega_chart_filtered');
});
});
});

View file

@ -23,8 +23,9 @@ export default function({ getService, getPageObjects }) {
const log = getService('log');
const retry = getService('retry');
const inspector = getService('inspector');
const testSubjects = getService('testSubjects');
const filterBar = getService('filterBar');
const PageObjects = getPageObjects(['common', 'visualize', 'header', 'timePicker']);
const PageObjects = getPageObjects(['visualize', 'visEditor', 'visChart', 'timePicker']);
// FLAKY: https://github.com/elastic/kibana/issues/22322
describe('vertical bar chart', function() {
@ -38,13 +39,13 @@ export default function({ getService, getPageObjects }) {
await PageObjects.visualize.clickNewSearch();
await PageObjects.timePicker.setDefaultAbsoluteRange();
log.debug('Bucket = X-Axis');
await PageObjects.visualize.clickBucket('X-axis');
await PageObjects.visEditor.clickBucket('X-axis');
log.debug('Aggregation = Date Histogram');
await PageObjects.visualize.selectAggregation('Date Histogram');
await PageObjects.visEditor.selectAggregation('Date Histogram');
log.debug('Field = @timestamp');
await PageObjects.visualize.selectField('@timestamp');
await PageObjects.visEditor.selectField('@timestamp');
// leaving Interval set to Auto
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.clickGo();
};
before(initBarChart);
@ -53,7 +54,7 @@ export default function({ getService, getPageObjects }) {
await PageObjects.visualize.saveVisualizationExpectSuccessAndBreadcrumb(vizName1);
await PageObjects.visualize.loadSavedVisualization(vizName1);
await PageObjects.visualize.waitForVisualization();
await PageObjects.visChart.waitForVisualization();
});
it('should have inspector enabled', async function() {
@ -92,7 +93,7 @@ export default function({ getService, getPageObjects }) {
// return arguments[0].getAttribute(arguments[1]);","args":[{"ELEMENT":"592"},"fill"]}] arguments[0].getAttribute is not a function
// try sleeping a bit before getting that data
await retry.try(async () => {
const data = await PageObjects.visualize.getBarChartData();
const data = await PageObjects.visChart.getBarChartData();
log.debug('data=' + data);
log.debug('data.length=' + data.length);
expect(data).to.eql(expectedChartValues);
@ -203,15 +204,15 @@ export default function({ getService, getPageObjects }) {
// return arguments[0].getAttribute(arguments[1]);","args":[{"ELEMENT":"592"},"fill"]}] arguments[0].getAttribute is not a function
// try sleeping a bit before getting that data
await retry.try(async () => {
const data = await PageObjects.visualize.getBarChartData();
const data = await PageObjects.visChart.getBarChartData();
log.debug('data=' + data);
log.debug('data.length=' + data.length);
expect(data).to.eql(expectedChartValues);
});
await PageObjects.visualize.toggleOpenEditor(2);
await PageObjects.visualize.clickDropPartialBuckets();
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.toggleOpenEditor(2);
await PageObjects.visEditor.clickDropPartialBuckets();
await PageObjects.visEditor.clickGo();
expectedChartValues = [
218,
@ -279,7 +280,7 @@ export default function({ getService, getPageObjects }) {
// return arguments[0].getAttribute(arguments[1]);","args":[{"ELEMENT":"592"},"fill"]}] arguments[0].getAttribute is not a function
// try sleeping a bit before getting that data
await retry.try(async () => {
const data = await PageObjects.visualize.getBarChartData();
const data = await PageObjects.visChart.getBarChartData();
log.debug('data=' + data);
log.debug('data.length=' + data.length);
expect(data).to.eql(expectedChartValues);
@ -291,13 +292,13 @@ export default function({ getService, getPageObjects }) {
const axisId = 'ValueAxis-1';
it('should show ticks on selecting log scale', async () => {
await PageObjects.visualize.clickMetricsAndAxes();
await PageObjects.visualize.clickYAxisOptions(axisId);
await PageObjects.visualize.selectYAxisScaleType(axisId, 'log');
await PageObjects.visualize.clickYAxisAdvancedOptions(axisId);
await PageObjects.visualize.changeYAxisFilterLabelsCheckbox(axisId, false);
await PageObjects.visualize.clickGo();
const labels = await PageObjects.visualize.getYAxisLabels();
await PageObjects.visEditor.clickMetricsAndAxes();
await PageObjects.visEditor.clickYAxisOptions(axisId);
await PageObjects.visEditor.selectYAxisScaleType(axisId, 'log');
await PageObjects.visEditor.clickYAxisAdvancedOptions(axisId);
await PageObjects.visEditor.changeYAxisFilterLabelsCheckbox(axisId, false);
await PageObjects.visEditor.clickGo();
const labels = await PageObjects.visChart.getYAxisLabels();
const expectedLabels = [
'2',
'3',
@ -323,9 +324,9 @@ export default function({ getService, getPageObjects }) {
});
it('should show filtered ticks on selecting log scale', async () => {
await PageObjects.visualize.changeYAxisFilterLabelsCheckbox(axisId, true);
await PageObjects.visualize.clickGo();
const labels = await PageObjects.visualize.getYAxisLabels();
await PageObjects.visEditor.changeYAxisFilterLabelsCheckbox(axisId, true);
await PageObjects.visEditor.clickGo();
const labels = await PageObjects.visChart.getYAxisLabels();
const expectedLabels = [
'2',
'3',
@ -351,10 +352,10 @@ export default function({ getService, getPageObjects }) {
});
it('should show ticks on selecting square root scale', async () => {
await PageObjects.visualize.selectYAxisScaleType(axisId, 'square root');
await PageObjects.visualize.changeYAxisFilterLabelsCheckbox(axisId, false);
await PageObjects.visualize.clickGo();
const labels = await PageObjects.visualize.getYAxisLabels();
await PageObjects.visEditor.selectYAxisScaleType(axisId, 'square root');
await PageObjects.visEditor.changeYAxisFilterLabelsCheckbox(axisId, false);
await PageObjects.visEditor.clickGo();
const labels = await PageObjects.visChart.getYAxisLabels();
const expectedLabels = [
'0',
'200',
@ -370,18 +371,18 @@ export default function({ getService, getPageObjects }) {
});
it('should show filtered ticks on selecting square root scale', async () => {
await PageObjects.visualize.changeYAxisFilterLabelsCheckbox(axisId, true);
await PageObjects.visualize.clickGo();
const labels = await PageObjects.visualize.getYAxisLabels();
await PageObjects.visEditor.changeYAxisFilterLabelsCheckbox(axisId, true);
await PageObjects.visEditor.clickGo();
const labels = await PageObjects.visChart.getYAxisLabels();
const expectedLabels = ['200', '400', '600', '800', '1,000', '1,200', '1,400'];
expect(labels).to.eql(expectedLabels);
});
it('should show ticks on selecting linear scale', async () => {
await PageObjects.visualize.selectYAxisScaleType(axisId, 'linear');
await PageObjects.visualize.changeYAxisFilterLabelsCheckbox(axisId, false);
await PageObjects.visualize.clickGo();
const labels = await PageObjects.visualize.getYAxisLabels();
await PageObjects.visEditor.selectYAxisScaleType(axisId, 'linear');
await PageObjects.visEditor.changeYAxisFilterLabelsCheckbox(axisId, false);
await PageObjects.visEditor.clickGo();
const labels = await PageObjects.visChart.getYAxisLabels();
log.debug(labels);
const expectedLabels = [
'0',
@ -398,9 +399,9 @@ export default function({ getService, getPageObjects }) {
});
it('should show filtered ticks on selecting linear scale', async () => {
await PageObjects.visualize.changeYAxisFilterLabelsCheckbox(axisId, true);
await PageObjects.visualize.clickGo();
const labels = await PageObjects.visualize.getYAxisLabels();
await PageObjects.visEditor.changeYAxisFilterLabelsCheckbox(axisId, true);
await PageObjects.visEditor.clickGo();
const labels = await PageObjects.visChart.getYAxisLabels();
const expectedLabels = ['200', '400', '600', '800', '1,000', '1,200', '1,400'];
expect(labels).to.eql(expectedLabels);
});
@ -409,11 +410,11 @@ export default function({ getService, getPageObjects }) {
describe('vertical bar in percent mode', async () => {
it('should show ticks with percentage values', async function() {
const axisId = 'ValueAxis-1';
await PageObjects.visualize.clickMetricsAndAxes();
await PageObjects.visualize.clickYAxisOptions(axisId);
await PageObjects.visualize.selectYAxisMode('percentage');
await PageObjects.visualize.clickGo();
const labels = await PageObjects.visualize.getYAxisLabels();
await PageObjects.visEditor.clickMetricsAndAxes();
await PageObjects.visEditor.clickYAxisOptions(axisId);
await PageObjects.visEditor.selectYAxisMode('percentage');
await PageObjects.visEditor.clickGo();
const labels = await PageObjects.visChart.getYAxisLabels();
expect(labels[0]).to.eql('0%');
expect(labels[labels.length - 1]).to.eql('100%');
});
@ -423,36 +424,36 @@ export default function({ getService, getPageObjects }) {
before(initBarChart);
it('should show correct series', async function() {
await PageObjects.visualize.toggleOpenEditor(2, 'false');
await PageObjects.visualize.clickBucket('Split series');
await PageObjects.visualize.selectAggregation('Terms');
await PageObjects.visualize.selectField('response.raw');
await PageObjects.visualize.waitForVisualizationRenderingStabilized();
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.toggleOpenEditor(2, 'false');
await PageObjects.visEditor.clickBucket('Split series');
await PageObjects.visEditor.selectAggregation('Terms');
await PageObjects.visEditor.selectField('response.raw');
await PageObjects.visChart.waitForVisualizationRenderingStabilized();
await PageObjects.visEditor.clickGo();
const expectedEntries = ['200', '404', '503'];
const legendEntries = await PageObjects.visualize.getLegendEntries();
const legendEntries = await PageObjects.visChart.getLegendEntries();
expect(legendEntries).to.eql(expectedEntries);
});
it('should allow custom sorting of series', async () => {
await PageObjects.visualize.toggleOpenEditor(1, 'false');
await PageObjects.visualize.selectCustomSortMetric(3, 'Min', 'bytes');
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.toggleOpenEditor(1, 'false');
await PageObjects.visEditor.selectCustomSortMetric(3, 'Min', 'bytes');
await PageObjects.visEditor.clickGo();
const expectedEntries = ['404', '200', '503'];
const legendEntries = await PageObjects.visualize.getLegendEntries();
const legendEntries = await PageObjects.visChart.getLegendEntries();
expect(legendEntries).to.eql(expectedEntries);
});
it('should correctly filter by legend', async () => {
await PageObjects.visualize.filterLegend('200');
await PageObjects.visualize.waitForVisualization();
const legendEntries = await PageObjects.visualize.getLegendEntries();
await PageObjects.visChart.filterLegend('200');
await PageObjects.visChart.waitForVisualization();
const legendEntries = await PageObjects.visChart.getLegendEntries();
const expectedEntries = ['200'];
expect(legendEntries).to.eql(expectedEntries);
await filterBar.removeFilter('response.raw');
await PageObjects.visualize.waitForVisualization();
await PageObjects.visChart.waitForVisualization();
});
});
@ -460,18 +461,18 @@ export default function({ getService, getPageObjects }) {
before(initBarChart);
it('should show correct series', async function() {
await PageObjects.visualize.toggleOpenEditor(2, 'false');
await PageObjects.visualize.clickBucket('Split series');
await PageObjects.visualize.selectAggregation('Terms');
await PageObjects.visualize.selectField('response.raw');
await PageObjects.visualize.waitForVisualizationRenderingStabilized();
await PageObjects.visEditor.toggleOpenEditor(2, 'false');
await PageObjects.visEditor.clickBucket('Split series');
await PageObjects.visEditor.selectAggregation('Terms');
await PageObjects.visEditor.selectField('response.raw');
await PageObjects.visChart.waitForVisualizationRenderingStabilized();
await PageObjects.visualize.toggleOpenEditor(3, 'false');
await PageObjects.visualize.clickBucket('Split series');
await PageObjects.visualize.selectAggregation('Terms');
await PageObjects.visualize.selectField('machine.os');
await PageObjects.visualize.waitForVisualizationRenderingStabilized();
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.toggleOpenEditor(3, 'false');
await PageObjects.visEditor.clickBucket('Split series');
await PageObjects.visEditor.selectAggregation('Terms');
await PageObjects.visEditor.selectField('machine.os');
await PageObjects.visChart.waitForVisualizationRenderingStabilized();
await PageObjects.visEditor.clickGo();
const expectedEntries = [
'200 - win 8',
@ -490,18 +491,18 @@ export default function({ getService, getPageObjects }) {
'404 - win 8',
'404 - win xp',
];
const legendEntries = await PageObjects.visualize.getLegendEntries();
const legendEntries = await PageObjects.visChart.getLegendEntries();
expect(legendEntries).to.eql(expectedEntries);
});
it('should show correct series when disabling first agg', async function() {
// this will avoid issues with the play tooltip covering the disable agg button
await PageObjects.visualize.scrollSubjectIntoView('metricsAggGroup');
await PageObjects.visualize.toggleDisabledAgg(3);
await PageObjects.visualize.clickGo();
await testSubjects.scrollIntoView('metricsAggGroup');
await PageObjects.visEditor.toggleDisabledAgg(3);
await PageObjects.visEditor.clickGo();
const expectedEntries = ['win 8', 'win xp', 'ios', 'osx', 'win 7'];
const legendEntries = await PageObjects.visualize.getLegendEntries();
const legendEntries = await PageObjects.visChart.getLegendEntries();
expect(legendEntries).to.eql(expectedEntries);
});
});
@ -510,24 +511,24 @@ export default function({ getService, getPageObjects }) {
before(initBarChart);
it('should show correct series', async function() {
await PageObjects.visualize.toggleOpenEditor(2, 'false');
await PageObjects.visualize.toggleOpenEditor(1);
await PageObjects.visualize.selectAggregation('Derivative', 'metrics');
await PageObjects.visualize.waitForVisualizationRenderingStabilized();
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.toggleOpenEditor(2, 'false');
await PageObjects.visEditor.toggleOpenEditor(1);
await PageObjects.visEditor.selectAggregation('Derivative', 'metrics');
await PageObjects.visChart.waitForVisualizationRenderingStabilized();
await PageObjects.visEditor.clickGo();
const expectedEntries = ['Derivative of Count'];
const legendEntries = await PageObjects.visualize.getLegendEntries();
const legendEntries = await PageObjects.visChart.getLegendEntries();
expect(legendEntries).to.eql(expectedEntries);
});
it('should show an error if last bucket aggregation is terms', async () => {
await PageObjects.visualize.toggleOpenEditor(2, 'false');
await PageObjects.visualize.clickBucket('Split series');
await PageObjects.visualize.selectAggregation('Terms');
await PageObjects.visualize.selectField('response.raw');
await PageObjects.visEditor.toggleOpenEditor(2, 'false');
await PageObjects.visEditor.clickBucket('Split series');
await PageObjects.visEditor.selectAggregation('Terms');
await PageObjects.visEditor.selectField('response.raw');
const errorMessage = await PageObjects.visualize.getBucketErrorMessage();
const errorMessage = await PageObjects.visEditor.getBucketErrorMessage();
expect(errorMessage).to.contain('Last bucket aggregation must be "Date Histogram"');
});
});

View file

@ -23,7 +23,7 @@ export default function({ getService, getPageObjects }) {
const log = getService('log');
const retry = getService('retry');
const inspector = getService('inspector');
const PageObjects = getPageObjects(['common', 'visualize', 'header']);
const PageObjects = getPageObjects(['common', 'visualize', 'header', 'visEditor', 'visChart']);
// FLAKY: https://github.com/elastic/kibana/issues/22322
describe.skip('vertical bar chart with index without time filter', function() {
@ -39,13 +39,13 @@ export default function({ getService, getPageObjects }) {
);
await PageObjects.common.sleep(500);
log.debug('Bucket = X-Axis');
await PageObjects.visualize.clickBucket('X-axis');
await PageObjects.visEditor.clickBucket('X-axis');
log.debug('Aggregation = Date Histogram');
await PageObjects.visualize.selectAggregation('Date Histogram');
await PageObjects.visEditor.selectAggregation('Date Histogram');
log.debug('Field = @timestamp');
await PageObjects.visualize.selectField('@timestamp');
await PageObjects.visualize.setCustomInterval('3h');
await PageObjects.visualize.waitForVisualizationRenderingStabilized();
await PageObjects.visEditor.selectField('@timestamp');
await PageObjects.visEditor.setInterval('3h', { type: 'custom' });
await PageObjects.visChart.waitForVisualizationRenderingStabilized();
};
before(initBarChart);
@ -54,7 +54,7 @@ export default function({ getService, getPageObjects }) {
await PageObjects.visualize.saveVisualizationExpectSuccessAndBreadcrumb(vizName1);
await PageObjects.visualize.loadSavedVisualization(vizName1);
await PageObjects.visualize.waitForVisualization();
await PageObjects.visChart.waitForVisualization();
});
it('should have inspector enabled', async function() {
@ -93,7 +93,7 @@ export default function({ getService, getPageObjects }) {
// return arguments[0].getAttribute(arguments[1]);","args":[{"ELEMENT":"592"},"fill"]}] arguments[0].getAttribute is not a function
// try sleeping a bit before getting that data
await retry.try(async () => {
const data = await PageObjects.visualize.getBarChartData();
const data = await PageObjects.visChart.getBarChartData();
log.debug('data=' + data);
log.debug('data.length=' + data.length);
expect(data).to.eql(expectedChartValues);
@ -134,13 +134,13 @@ export default function({ getService, getPageObjects }) {
const axisId = 'ValueAxis-1';
it('should show ticks on selecting log scale', async () => {
await PageObjects.visualize.clickMetricsAndAxes();
await PageObjects.visualize.clickYAxisOptions(axisId);
await PageObjects.visualize.selectYAxisScaleType(axisId, 'log');
await PageObjects.visualize.clickYAxisAdvancedOptions(axisId);
await PageObjects.visualize.changeYAxisFilterLabelsCheckbox(axisId, false);
await PageObjects.visualize.clickGo();
const labels = await PageObjects.visualize.getYAxisLabels();
await PageObjects.visEditor.clickMetricsAndAxes();
await PageObjects.visEditor.clickYAxisOptions(axisId);
await PageObjects.visEditor.selectYAxisScaleType(axisId, 'log');
await PageObjects.visEditor.clickYAxisAdvancedOptions(axisId);
await PageObjects.visEditor.changeYAxisFilterLabelsCheckbox(axisId, false);
await PageObjects.visEditor.clickGo();
const labels = await PageObjects.visChart.getYAxisLabels();
const expectedLabels = [
'2',
'3',
@ -166,9 +166,9 @@ export default function({ getService, getPageObjects }) {
});
it('should show filtered ticks on selecting log scale', async () => {
await PageObjects.visualize.changeYAxisFilterLabelsCheckbox(axisId, true);
await PageObjects.visualize.clickGo();
const labels = await PageObjects.visualize.getYAxisLabels();
await PageObjects.visEditor.changeYAxisFilterLabelsCheckbox(axisId, true);
await PageObjects.visEditor.clickGo();
const labels = await PageObjects.visChart.getYAxisLabels();
const expectedLabels = [
'2',
'3',
@ -194,10 +194,10 @@ export default function({ getService, getPageObjects }) {
});
it('should show ticks on selecting square root scale', async () => {
await PageObjects.visualize.selectYAxisScaleType(axisId, 'square root');
await PageObjects.visualize.changeYAxisFilterLabelsCheckbox(axisId, false);
await PageObjects.visualize.clickGo();
const labels = await PageObjects.visualize.getYAxisLabels();
await PageObjects.visEditor.selectYAxisScaleType(axisId, 'square root');
await PageObjects.visEditor.changeYAxisFilterLabelsCheckbox(axisId, false);
await PageObjects.visEditor.clickGo();
const labels = await PageObjects.visChart.getYAxisLabels();
const expectedLabels = [
'0',
'200',
@ -213,18 +213,18 @@ export default function({ getService, getPageObjects }) {
});
it('should show filtered ticks on selecting square root scale', async () => {
await PageObjects.visualize.changeYAxisFilterLabelsCheckbox(axisId, true);
await PageObjects.visualize.clickGo();
const labels = await PageObjects.visualize.getYAxisLabels();
await PageObjects.visEditor.changeYAxisFilterLabelsCheckbox(axisId, true);
await PageObjects.visEditor.clickGo();
const labels = await PageObjects.visChart.getYAxisLabels();
const expectedLabels = ['200', '400', '600', '800', '1,000', '1,200', '1,400'];
expect(labels).to.eql(expectedLabels);
});
it('should show ticks on selecting linear scale', async () => {
await PageObjects.visualize.selectYAxisScaleType(axisId, 'linear');
await PageObjects.visualize.changeYAxisFilterLabelsCheckbox(axisId, false);
await PageObjects.visualize.clickGo();
const labels = await PageObjects.visualize.getYAxisLabels();
await PageObjects.visEditor.selectYAxisScaleType(axisId, 'linear');
await PageObjects.visEditor.changeYAxisFilterLabelsCheckbox(axisId, false);
await PageObjects.visEditor.clickGo();
const labels = await PageObjects.visChart.getYAxisLabels();
log.debug(labels);
const expectedLabels = [
'0',
@ -241,9 +241,9 @@ export default function({ getService, getPageObjects }) {
});
it('should show filtered ticks on selecting linear scale', async () => {
await PageObjects.visualize.changeYAxisFilterLabelsCheckbox(axisId, true);
await PageObjects.visualize.clickGo();
const labels = await PageObjects.visualize.getYAxisLabels();
await PageObjects.visEditor.changeYAxisFilterLabelsCheckbox(axisId, true);
await PageObjects.visEditor.clickGo();
const labels = await PageObjects.visChart.getYAxisLabels();
const expectedLabels = ['200', '400', '600', '800', '1,000', '1,200', '1,400'];
expect(labels).to.eql(expectedLabels);
});
@ -253,18 +253,18 @@ export default function({ getService, getPageObjects }) {
before(initBarChart);
it('should show correct series', async function() {
await PageObjects.visualize.toggleOpenEditor(2, 'false');
await PageObjects.visualize.clickBucket('Split series');
await PageObjects.visualize.selectAggregation('Terms');
await PageObjects.visualize.selectField('response.raw');
await PageObjects.visEditor.toggleOpenEditor(2, 'false');
await PageObjects.visEditor.clickBucket('Split series');
await PageObjects.visEditor.selectAggregation('Terms');
await PageObjects.visEditor.selectField('response.raw');
await PageObjects.header.waitUntilLoadingHasFinished();
await PageObjects.common.sleep(1003);
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.clickGo();
await PageObjects.header.waitUntilLoadingHasFinished();
const expectedEntries = ['200', '404', '503'];
const legendEntries = await PageObjects.visualize.getLegendEntries();
const legendEntries = await PageObjects.visChart.getLegendEntries();
expect(legendEntries).to.eql(expectedEntries);
});
});
@ -273,20 +273,20 @@ export default function({ getService, getPageObjects }) {
before(initBarChart);
it('should show correct series', async function() {
await PageObjects.visualize.toggleOpenEditor(2, 'false');
await PageObjects.visualize.clickBucket('Split series');
await PageObjects.visualize.selectAggregation('Terms');
await PageObjects.visualize.selectField('response.raw');
await PageObjects.visEditor.toggleOpenEditor(2, 'false');
await PageObjects.visEditor.clickBucket('Split series');
await PageObjects.visEditor.selectAggregation('Terms');
await PageObjects.visEditor.selectField('response.raw');
await PageObjects.header.waitUntilLoadingHasFinished();
await PageObjects.visualize.toggleOpenEditor(3, 'false');
await PageObjects.visualize.clickBucket('Split series');
await PageObjects.visualize.selectAggregation('Terms');
await PageObjects.visualize.selectField('machine.os');
await PageObjects.visEditor.toggleOpenEditor(3, 'false');
await PageObjects.visEditor.clickBucket('Split series');
await PageObjects.visEditor.selectAggregation('Terms');
await PageObjects.visEditor.selectField('machine.os');
await PageObjects.header.waitUntilLoadingHasFinished();
await PageObjects.common.sleep(1003);
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.clickGo();
await PageObjects.header.waitUntilLoadingHasFinished();
const expectedEntries = [
@ -306,17 +306,17 @@ export default function({ getService, getPageObjects }) {
'404 - win 8',
'404 - win xp',
];
const legendEntries = await PageObjects.visualize.getLegendEntries();
const legendEntries = await PageObjects.visChart.getLegendEntries();
expect(legendEntries).to.eql(expectedEntries);
});
it('should show correct series when disabling first agg', async function() {
await PageObjects.visualize.toggleDisabledAgg(3);
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.toggleDisabledAgg(3);
await PageObjects.visEditor.clickGo();
await PageObjects.header.waitUntilLoadingHasFinished();
const expectedEntries = ['win 8', 'win xp', 'ios', 'osx', 'win 7'];
const legendEntries = await PageObjects.visualize.getLegendEntries();
const legendEntries = await PageObjects.visChart.getLegendEntries();
expect(legendEntries).to.eql(expectedEntries);
});
});
@ -325,17 +325,17 @@ export default function({ getService, getPageObjects }) {
before(initBarChart);
it('should show correct series', async function() {
await PageObjects.visualize.toggleOpenEditor(2, 'false');
await PageObjects.visualize.toggleOpenEditor(1);
await PageObjects.visualize.selectAggregation('Derivative', 'metrics');
await PageObjects.visEditor.toggleOpenEditor(2, 'false');
await PageObjects.visEditor.toggleOpenEditor(1);
await PageObjects.visEditor.selectAggregation('Derivative', 'metrics');
await PageObjects.header.waitUntilLoadingHasFinished();
await PageObjects.common.sleep(1003);
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.clickGo();
await PageObjects.header.waitUntilLoadingHasFinished();
const expectedEntries = ['Derivative of Count'];
const legendEntries = await PageObjects.visualize.getLegendEntries();
const legendEntries = await PageObjects.visChart.getLegendEntries();
expect(legendEntries).to.eql(expectedEntries);
});
});

View file

@ -19,8 +19,9 @@
import expect from '@kbn/expect';
export default function({ getPageObjects }) {
const PageObjects = getPageObjects(['visualize', 'header', 'common']);
export default function({ getService, getPageObjects }) {
const PageObjects = getPageObjects(['visualize', 'visEditor']);
const listingTable = getService('listingTable');
// FLAKY: https://github.com/elastic/kibana/issues/40912
describe.skip('visualize listing page', function describeIndexTests() {
@ -36,7 +37,7 @@ export default function({ getPageObjects }) {
// type markdown is used for simplicity
await PageObjects.visualize.createSimpleMarkdownViz(vizName);
await PageObjects.visualize.gotoVisualizationLandingPage();
const visCount = await PageObjects.visualize.getCountOfItemsInListingTable();
const visCount = await listingTable.getItemsCount('visualize');
expect(visCount).to.equal(1);
});
@ -45,11 +46,11 @@ export default function({ getPageObjects }) {
await PageObjects.visualize.createSimpleMarkdownViz(vizName + '2');
await PageObjects.visualize.gotoVisualizationLandingPage();
let visCount = await PageObjects.visualize.getCountOfItemsInListingTable();
let visCount = await listingTable.getItemsCount('visualize');
expect(visCount).to.equal(3);
await PageObjects.visualize.deleteAllVisualizations();
visCount = await PageObjects.visualize.getCountOfItemsInListingTable();
visCount = await listingTable.getItemsCount('visualize');
expect(visCount).to.equal(0);
});
});
@ -60,45 +61,45 @@ export default function({ getPageObjects }) {
await PageObjects.visualize.gotoVisualizationLandingPage();
await PageObjects.visualize.navigateToNewVisualization();
await PageObjects.visualize.clickMarkdownWidget();
await PageObjects.visualize.setMarkdownTxt('HELLO');
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.setMarkdownTxt('HELLO');
await PageObjects.visEditor.clickGo();
await PageObjects.visualize.saveVisualization('Hello World');
await PageObjects.visualize.gotoVisualizationLandingPage();
});
it('matches on the first word', async function() {
await PageObjects.visualize.searchForItemWithName('Hello');
const itemCount = await PageObjects.visualize.getCountOfItemsInListingTable();
await listingTable.searchForItemWithName('Hello');
const itemCount = await listingTable.getItemsCount('visualize');
expect(itemCount).to.equal(1);
});
it('matches the second word', async function() {
await PageObjects.visualize.searchForItemWithName('World');
const itemCount = await PageObjects.visualize.getCountOfItemsInListingTable();
await listingTable.searchForItemWithName('World');
const itemCount = await listingTable.getItemsCount('visualize');
expect(itemCount).to.equal(1);
});
it('matches the second word prefix', async function() {
await PageObjects.visualize.searchForItemWithName('Wor');
const itemCount = await PageObjects.visualize.getCountOfItemsInListingTable();
await listingTable.searchForItemWithName('Wor');
const itemCount = await listingTable.getItemsCount('visualize');
expect(itemCount).to.equal(1);
});
it('does not match mid word', async function() {
await PageObjects.visualize.searchForItemWithName('orld');
const itemCount = await PageObjects.visualize.getCountOfItemsInListingTable();
await listingTable.searchForItemWithName('orld');
const itemCount = await listingTable.getItemsCount('visualize');
expect(itemCount).to.equal(0);
});
it('is case insensitive', async function() {
await PageObjects.visualize.searchForItemWithName('hello world');
const itemCount = await PageObjects.visualize.getCountOfItemsInListingTable();
await listingTable.searchForItemWithName('hello world');
const itemCount = await listingTable.getItemsCount('visualize');
expect(itemCount).to.equal(1);
});
it('is using AND operator', async function() {
await PageObjects.visualize.searchForItemWithName('hello banana');
const itemCount = await PageObjects.visualize.getCountOfItemsInListingTable();
await listingTable.searchForItemWithName('hello banana');
const itemCount = await listingTable.getItemsCount('visualize');
expect(itemCount).to.equal(0);
});
});

View file

@ -21,7 +21,7 @@ import expect from '@kbn/expect';
export default function({ getService, getPageObjects }) {
const filterBar = getService('filterBar');
const PageObjects = getPageObjects(['common', 'visualize', 'header', 'timePicker']);
const PageObjects = getPageObjects(['common', 'visualize', 'visEditor', 'header', 'timePicker']);
const testSubjects = getService('testSubjects');
const find = getService('find');
const comboBox = getService('comboBox');
@ -65,7 +65,7 @@ export default function({ getService, getPageObjects }) {
it('should create a seperate filter pill for parent control and child control', async () => {
await comboBox.set('listControlSelect1', '14.61.182.136');
await PageObjects.visualize.inputControlSubmit();
await PageObjects.visEditor.inputControlSubmit();
const hasParentControlFilter = await filterBar.hasFilter('geo.src', 'BR');
expect(hasParentControlFilter).to.equal(true);

View file

@ -20,7 +20,7 @@
import expect from '@kbn/expect';
export default function({ getService, getPageObjects }) {
const PageObjects = getPageObjects(['common', 'visualize', 'header', 'timePicker']);
const PageObjects = getPageObjects(['common', 'visualize', 'visEditor', 'header', 'timePicker']);
const comboBox = getService('comboBox');
describe('dynamic options', () => {
@ -55,7 +55,7 @@ export default function({ getService, getPageObjects }) {
it('should not fetch new options when non-string is filtered', async () => {
await comboBox.set('fieldSelect-0', 'clientip');
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.clickGo();
const initialOptions = await comboBox.getOptionsList('listControlSelect0');
expect(

View file

@ -21,7 +21,7 @@ import expect from '@kbn/expect';
export default function({ getService, getPageObjects }) {
const filterBar = getService('filterBar');
const PageObjects = getPageObjects(['common', 'visualize', 'header', 'timePicker']);
const PageObjects = getPageObjects(['common', 'visualize', 'visEditor', 'header', 'timePicker']);
const testSubjects = getService('testSubjects');
const inspector = getService('inspector');
const find = getService('find');
@ -38,11 +38,11 @@ export default function({ getService, getPageObjects }) {
'Jan 1, 2017 @ 00:00:00.000',
'Jan 1, 2017 @ 00:00:00.000'
);
await PageObjects.visualize.clickVisEditorTab('controls');
await PageObjects.visualize.addInputControl();
await PageObjects.visEditor.clickVisEditorTab('controls');
await PageObjects.visEditor.addInputControl();
await comboBox.set('indexPatternSelect-0', 'logstash- ');
await comboBox.set('fieldSelect-0', FIELD_NAME);
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.clickGo();
});
it('should not have inspector enabled', async function() {
@ -89,7 +89,7 @@ export default function({ getService, getPageObjects }) {
});
it('should add filter pill when submit button is clicked', async () => {
await PageObjects.visualize.inputControlSubmit();
await PageObjects.visEditor.inputControlSubmit();
const hasFilter = await filterBar.hasFilter(FIELD_NAME, 'ios');
expect(hasFilter).to.equal(true);
@ -98,7 +98,7 @@ export default function({ getService, getPageObjects }) {
it('should replace existing filter pill(s) when new item is selected', async () => {
await comboBox.clear('listControlSelect0');
await comboBox.set('listControlSelect0', 'osx');
await PageObjects.visualize.inputControlSubmit();
await PageObjects.visEditor.inputControlSubmit();
await PageObjects.common.sleep(1000);
const hasOldFilter = await filterBar.hasFilter(FIELD_NAME, 'ios');
@ -117,11 +117,11 @@ export default function({ getService, getPageObjects }) {
it('should clear form when Clear button is clicked but not remove filter pill', async () => {
await comboBox.set('listControlSelect0', 'ios');
await PageObjects.visualize.inputControlSubmit();
await PageObjects.visEditor.inputControlSubmit();
const hasFilterBeforeClearBtnClicked = await filterBar.hasFilter(FIELD_NAME, 'ios');
expect(hasFilterBeforeClearBtnClicked).to.equal(true);
await PageObjects.visualize.inputControlClear();
await PageObjects.visEditor.inputControlClear();
const hasValue = await comboBox.doesComboBoxHaveSelectedOptions('listControlSelect0');
expect(hasValue).to.equal(false);
@ -130,7 +130,7 @@ export default function({ getService, getPageObjects }) {
});
it('should remove filter pill when cleared form is submitted', async () => {
await PageObjects.visualize.inputControlSubmit();
await PageObjects.visEditor.inputControlSubmit();
const hasFilter = await filterBar.hasFilter(FIELD_NAME, 'ios');
expect(hasFilter).to.equal(false);
});
@ -138,17 +138,17 @@ export default function({ getService, getPageObjects }) {
describe('updateFiltersOnChange is true', () => {
before(async () => {
await PageObjects.visualize.clickVisEditorTab('options');
await PageObjects.visualize.checkSwitch('inputControlEditorUpdateFiltersOnChangeCheckbox');
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.clickVisEditorTab('options');
await PageObjects.visEditor.checkSwitch('inputControlEditorUpdateFiltersOnChangeCheckbox');
await PageObjects.visEditor.clickGo();
});
after(async () => {
await PageObjects.visualize.clickVisEditorTab('options');
await PageObjects.visualize.uncheckSwitch(
await PageObjects.visEditor.clickVisEditorTab('options');
await PageObjects.visEditor.uncheckSwitch(
'inputControlEditorUpdateFiltersOnChangeCheckbox'
);
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.clickGo();
});
it('should not display staging control buttons', async () => {
@ -173,9 +173,9 @@ export default function({ getService, getPageObjects }) {
describe('useTimeFilter', () => {
it('should use global time filter when getting terms', async () => {
await PageObjects.visualize.clickVisEditorTab('options');
await PageObjects.visualize.checkCheckbox('inputControlEditorUseTimeFilterCheckbox');
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.clickVisEditorTab('options');
await testSubjects.setCheckbox('inputControlEditorUseTimeFilterCheckbox', 'check');
await PageObjects.visEditor.clickGo();
// Expect control to be disabled because no terms could be gathered with time filter applied
const input = await find.byCssSelector('[data-test-subj="inputControl0"] input');

View file

@ -25,7 +25,7 @@ export default function({ getService, getPageObjects }: FtrProviderContext) {
const esArchiver = getService('esArchiver');
const kibanaServer = getService('kibanaServer');
const find = getService('find');
const { visualize } = getPageObjects(['visualize']);
const { visualize, visEditor } = getPageObjects(['visualize', 'visEditor']);
describe('input control range', () => {
before(async () => {
@ -35,36 +35,22 @@ export default function({ getService, getPageObjects }: FtrProviderContext) {
});
it('should add filter with scripted field', async () => {
await visualize.addInputControl('range');
await visualize.setFilterParams({
indexPattern: 'kibana_sample_data_flights',
field: 'hour_of_day',
});
await visualize.clickGo();
await visualize.setFilterRange({
min: '7',
max: '10',
});
await visualize.inputControlSubmit();
await visEditor.addInputControl('range');
await visEditor.setFilterParams(0, 'kibana_sample_data_flights', 'hour_of_day');
await visEditor.clickGo();
await visEditor.setFilterRange(0, '7', '10');
await visEditor.inputControlSubmit();
const controlFilters = await find.allByCssSelector('[data-test-subj^="filter"]');
expect(controlFilters).to.have.length(1);
expect(await controlFilters[0].getVisibleText()).to.equal('hour_of_day: 7 to 10');
});
it('should add filter with price field', async () => {
await visualize.addInputControl('range');
await visualize.setFilterParams({
aggNth: 1,
indexPattern: 'kibana_sample_data_flights',
field: 'AvgTicketPrice',
});
await visualize.clickGo();
await visualize.setFilterRange({
aggNth: 1,
min: '400',
max: '999',
});
await visualize.inputControlSubmit();
await visEditor.addInputControl('range');
await visEditor.setFilterParams(1, 'kibana_sample_data_flights', 'AvgTicketPrice');
await visEditor.clickGo();
await visEditor.setFilterRange(1, '400', '999');
await visEditor.inputControlSubmit();
const controlFilters = await find.allByCssSelector('[data-test-subj^="filter"]');
expect(controlFilters).to.have.length(2);
expect(await controlFilters[1].getVisibleText()).to.equal('AvgTicketPrice: $400 to $999');

View file

@ -39,7 +39,6 @@ import { NewsfeedPageProvider } from './newsfeed_page';
import { PointSeriesPageProvider } from './point_series_page';
// @ts-ignore not TS yet
import { SettingsPageProvider } from './settings_page';
// @ts-ignore not TS yet
import { SharePageProvider } from './share_page';
// @ts-ignore not TS yet
import { ShieldPageProvider } from './shield_page';
@ -48,8 +47,12 @@ import { TimePickerPageProvider } from './time_picker';
// @ts-ignore not TS yet
import { TimelionPageProvider } from './timelion_page';
import { VisualBuilderPageProvider } from './visual_builder_page';
// @ts-ignore not TS yet
import { VisualizePageProvider } from './visualize_page';
import { VisualizeEditorPageProvider } from './visualize_editor_page';
import { VisualizeChartPageProvider } from './visualize_chart_page';
import { TileMapPageProvider } from './tile_map_page';
import { TagCloudPageProvider } from './tag_cloud_page';
import { VegaChartPageProvider } from './vega_chart_page';
export const pageObjects = {
common: CommonPageProvider,
@ -70,4 +73,9 @@ export const pageObjects = {
timePicker: TimePickerPageProvider,
visualBuilder: VisualBuilderPageProvider,
visualize: VisualizePageProvider,
visEditor: VisualizeEditorPageProvider,
visChart: VisualizeChartPageProvider,
tileMap: TileMapPageProvider,
tagCloud: TagCloudPageProvider,
vegaChart: VegaChartPageProvider,
};

View file

@ -23,10 +23,6 @@ export function PointSeriesPageProvider({ getService }) {
const find = getService('find');
class PointSeriesVis {
async clickOptions() {
return await testSubjects.click('visEditorTaboptions');
}
async clickAxisOptions() {
return await testSubjects.click('visEditorTabadvanced');
}

View file

@ -19,10 +19,9 @@
import { FtrProviderContext } from '../ftr_provider_context';
export function SharePageProvider({ getService, getPageObjects }: FtrProviderContext) {
export function SharePageProvider({ getService }: FtrProviderContext) {
const testSubjects = getService('testSubjects');
const find = getService('find');
const PageObjects = getPageObjects(['visualize', 'common']);
const log = getService('log');
class SharePage {
@ -78,7 +77,7 @@ export function SharePageProvider({ getService, getPageObjects }: FtrProviderCon
async checkShortenUrl() {
const shareForm = await testSubjects.find('shareUrlForm');
await PageObjects.visualize.checkCheckbox('useShortUrl');
await testSubjects.setCheckbox('useShortUrl', 'check');
await shareForm.waitForDeletedByCssSelector('.euiLoadingSpinner');
}

View file

@ -0,0 +1,52 @@
/*
* Licensed to Elasticsearch B.V. under one or more contributor
* license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright
* ownership. Elasticsearch B.V. licenses this file to you under
* the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import { FtrProviderContext } from '../ftr_provider_context';
import { WebElementWrapper } from '../services/lib/web_element_wrapper';
export function TagCloudPageProvider({ getService, getPageObjects }: FtrProviderContext) {
const find = getService('find');
const testSubjects = getService('testSubjects');
const { header, visChart } = getPageObjects(['header', 'visChart']);
class TagCloudPage {
public async selectTagCloudTag(tagDisplayText: string) {
await testSubjects.click(tagDisplayText);
await header.waitUntilLoadingHasFinished();
}
public async getTextTag() {
await visChart.waitForVisualization();
const elements = await find.allByCssSelector('text');
return await Promise.all(elements.map(async element => await element.getVisibleText()));
}
public async getTextSizes() {
const tags = await find.allByCssSelector('text');
async function returnTagSize(tag: WebElementWrapper) {
const style = await tag.getAttribute('style');
const fontSize = style.match(/font-size: ([^;]*);/);
return fontSize ? fontSize[1] : '';
}
return await Promise.all(tags.map(returnTagSize));
}
}
return new TagCloudPage();
}

View file

@ -0,0 +1,102 @@
/*
* Licensed to Elasticsearch B.V. under one or more contributor
* license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright
* ownership. Elasticsearch B.V. licenses this file to you under
* the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import { FtrProviderContext } from '../ftr_provider_context';
export function TileMapPageProvider({ getService, getPageObjects }: FtrProviderContext) {
const find = getService('find');
const testSubjects = getService('testSubjects');
const retry = getService('retry');
const log = getService('log');
const inspector = getService('inspector');
const { header } = getPageObjects(['header']);
class TileMapPage {
public async getZoomSelectors(zoomSelector: string) {
return await find.allByCssSelector(zoomSelector);
}
public async clickMapButton(zoomSelector: string, waitForLoading?: boolean) {
await retry.try(async () => {
const zooms = await this.getZoomSelectors(zoomSelector);
await Promise.all(zooms.map(async zoom => await zoom.click()));
if (waitForLoading) {
await header.waitUntilLoadingHasFinished();
}
});
}
public async getVisualizationRequest() {
log.debug('getVisualizationRequest');
await inspector.open();
await testSubjects.click('inspectorViewChooser');
await testSubjects.click('inspectorViewChooserRequests');
await testSubjects.click('inspectorRequestDetailRequest');
return await testSubjects.getVisibleText('inspectorRequestBody');
}
public async getMapBounds(): Promise<object> {
const request = await this.getVisualizationRequest();
const requestObject = JSON.parse(request);
return requestObject.aggs.filter_agg.filter.geo_bounding_box['geo.coordinates'];
}
public async clickMapZoomIn(waitForLoading = true) {
await this.clickMapButton('a.leaflet-control-zoom-in', waitForLoading);
}
public async clickMapZoomOut(waitForLoading = true) {
await this.clickMapButton('a.leaflet-control-zoom-out', waitForLoading);
}
public async getMapZoomEnabled(zoomSelector: string): Promise<boolean> {
const zooms = await this.getZoomSelectors(zoomSelector);
const classAttributes = await Promise.all(
zooms.map(async zoom => await zoom.getAttribute('class'))
);
return !classAttributes.join('').includes('leaflet-disabled');
}
public async zoomAllTheWayOut(): Promise<void> {
// we can tell we're at level 1 because zoom out is disabled
return await retry.try(async () => {
await this.clickMapZoomOut();
const enabled = await this.getMapZoomOutEnabled();
// should be able to zoom more as current config has 0 as min level.
if (enabled) {
throw new Error('Not fully zoomed out yet');
}
});
}
public async getMapZoomInEnabled() {
return await this.getMapZoomEnabled('a.leaflet-control-zoom-in');
}
public async getMapZoomOutEnabled() {
return await this.getMapZoomEnabled('a.leaflet-control-zoom-out');
}
public async clickMapFitDataBounds() {
return await this.clickMapButton('a.fa-crop');
}
}
return new TileMapPage();
}

View file

@ -0,0 +1,91 @@
/*
* Licensed to Elasticsearch B.V. under one or more contributor
* license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright
* ownership. Elasticsearch B.V. licenses this file to you under
* the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import expect from '@kbn/expect';
import { FtrProviderContext } from '../ftr_provider_context';
export function VegaChartPageProvider({
getService,
getPageObjects,
updateBaselines,
}: FtrProviderContext & { updateBaselines: boolean }) {
const find = getService('find');
const testSubjects = getService('testSubjects');
const browser = getService('browser');
const screenshot = getService('screenshots');
const log = getService('log');
const { visEditor, visChart } = getPageObjects(['visEditor', 'visChart']);
class VegaChartPage {
public async getSpec() {
// Adapted from console_page.js:getVisibleTextFromAceEditor(). Is there a common utilities file?
const editor = await testSubjects.find('vega-editor');
const lines = await editor.findAllByClassName('ace_line_group');
const linesText = await Promise.all(
lines.map(async line => {
return await line.getVisibleText();
})
);
return linesText.join('\n');
}
public async getViewContainer() {
return await find.byCssSelector('div.vgaVis__view');
}
public async getControlContainer() {
return await find.byCssSelector('div.vgaVis__controls');
}
/**
* Removes chrome and takes a small screenshot of a vis to compare against a baseline.
* @param {string} name The name of the baseline image.
* @param {object} opts Options object.
* @param {number} opts.threshold Threshold for allowed variance when comparing images.
*/
public async expectVisToMatchScreenshot(name: string, opts = { threshold: 0.05 }) {
log.debug(`expectVisToMatchScreenshot(${name})`);
// Collapse sidebar and inject some CSS to hide the nav so we have a focused screenshot
await visEditor.clickEditorSidebarCollapse();
await visChart.waitForVisualizationRenderingStabilized();
await browser.execute(`
var el = document.createElement('style');
el.id = '__data-test-style';
el.innerHTML = '[data-test-subj="headerGlobalNav"] { display: none; } ';
el.innerHTML += '[data-test-subj="top-nav"] { display: none; } ';
el.innerHTML += '[data-test-subj="experimentalVisInfo"] { display: none; } ';
document.body.appendChild(el);
`);
const percentDifference = await screenshot.compareAgainstBaseline(name, updateBaselines);
// Reset the chart to its original state
await browser.execute(`
var el = document.getElementById('__data-test-style');
document.body.removeChild(el);
`);
await visEditor.clickEditorSidebarCollapse();
await visChart.waitForVisualizationRenderingStabilized();
expect(percentDifference).to.be.lessThan(opts.threshold);
}
}
return new VegaChartPage();
}

View file

@ -26,7 +26,7 @@ export function VisualBuilderPageProvider({ getService, getPageObjects }: FtrPro
const retry = getService('retry');
const testSubjects = getService('testSubjects');
const comboBox = getService('comboBox');
const PageObjects = getPageObjects(['common', 'header', 'visualize', 'timePicker']);
const PageObjects = getPageObjects(['common', 'header', 'visualize', 'timePicker', 'visChart']);
type Duration =
| 'Milliseconds'
@ -101,7 +101,7 @@ export function VisualBuilderPageProvider({ getService, getPageObjects }: FtrPro
}
public async getMetricValue() {
await PageObjects.visualize.waitForVisualizationRenderingStabilized();
await PageObjects.visChart.waitForVisualizationRenderingStabilized();
const metricValue = await find.byCssSelector('.tvbVisMetric__value--primary');
return metricValue.getVisibleText();
}
@ -110,7 +110,7 @@ export function VisualBuilderPageProvider({ getService, getPageObjects }: FtrPro
const input = await find.byCssSelector('.tvbMarkdownEditor__editor textarea');
await this.clearMarkdown();
await input.type(markdown, { charByChar: true });
await PageObjects.visualize.waitForVisualizationRenderingStabilized();
await PageObjects.visChart.waitForVisualizationRenderingStabilized();
}
public async clearMarkdown() {
@ -304,7 +304,7 @@ export function VisualBuilderPageProvider({ getService, getPageObjects }: FtrPro
}
public async getRhythmChartLegendValue(nth = 0) {
await PageObjects.visualize.waitForVisualizationRenderingStabilized();
await PageObjects.visChart.waitForVisualizationRenderingStabilized();
const metricValue = (
await find.allByCssSelector(`.echLegendItem .echLegendItem__displayValue`)
)[nth];
@ -348,7 +348,7 @@ export function VisualBuilderPageProvider({ getService, getPageObjects }: FtrPro
const prevAggs = await testSubjects.findAll('aggSelector');
const elements = await testSubjects.findAll('addMetricAddBtn');
await elements[nth].click();
await PageObjects.visualize.waitForVisualizationRenderingStabilized();
await PageObjects.visChart.waitForVisualizationRenderingStabilized();
await retry.waitFor('new agg is added', async () => {
const currentAggs = await testSubjects.findAll('aggSelector');
return currentAggs.length > prevAggs.length;
@ -485,7 +485,7 @@ export function VisualBuilderPageProvider({ getService, getPageObjects }: FtrPro
await this.checkColorPickerPopUpIsPresent();
await find.setValue('.tvbColorPickerPopUp input', colorHex);
await this.clickColorPicker();
await PageObjects.visualize.waitForVisualizationRenderingStabilized();
await PageObjects.visChart.waitForVisualizationRenderingStabilized();
}
public async checkColorPickerPopUpIsPresent(): Promise<void> {
@ -494,10 +494,10 @@ export function VisualBuilderPageProvider({ getService, getPageObjects }: FtrPro
}
public async changePanelPreview(nth: number = 0): Promise<void> {
const prevRenderingCount = await PageObjects.visualize.getVisualizationRenderingCount();
const prevRenderingCount = await PageObjects.visChart.getVisualizationRenderingCount();
const changePreviewBtnArray = await testSubjects.findAll('AddActivatePanelBtn');
await changePreviewBtnArray[nth].click();
await PageObjects.visualize.waitForRenderingCount(prevRenderingCount + 1);
await PageObjects.visChart.waitForRenderingCount(prevRenderingCount + 1);
}
public async checkPreviewIsDisabled(): Promise<void> {
@ -508,7 +508,7 @@ export function VisualBuilderPageProvider({ getService, getPageObjects }: FtrPro
public async cloneSeries(nth: number = 0): Promise<void> {
const cloneBtnArray = await testSubjects.findAll('AddCloneBtn');
await cloneBtnArray[nth].click();
await PageObjects.visualize.waitForVisualizationRenderingStabilized();
await PageObjects.visChart.waitForVisualizationRenderingStabilized();
}
/**
@ -525,10 +525,10 @@ export function VisualBuilderPageProvider({ getService, getPageObjects }: FtrPro
}
public async deleteSeries(nth: number = 0): Promise<void> {
const prevRenderingCount = await PageObjects.visualize.getVisualizationRenderingCount();
const prevRenderingCount = await PageObjects.visChart.getVisualizationRenderingCount();
const cloneBtnArray = await testSubjects.findAll('AddDeleteBtn');
await cloneBtnArray[nth].click();
await PageObjects.visualize.waitForRenderingCount(prevRenderingCount + 1);
await PageObjects.visChart.waitForRenderingCount(prevRenderingCount + 1);
}
public async getLegendItems(): Promise<WebElementWrapper[]> {

View file

@ -0,0 +1,386 @@
/*
* Licensed to Elasticsearch B.V. under one or more contributor
* license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright
* ownership. Elasticsearch B.V. licenses this file to you under
* the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import { FtrProviderContext } from '../ftr_provider_context';
export function VisualizeChartPageProvider({ getService, getPageObjects }: FtrProviderContext) {
const testSubjects = getService('testSubjects');
const config = getService('config');
const find = getService('find');
const log = getService('log');
const retry = getService('retry');
const table = getService('table');
const defaultFindTimeout = config.get('timeouts.find');
const { common } = getPageObjects(['common']);
class VisualizeChart {
public async getYAxisTitle() {
const title = await find.byCssSelector('.y-axis-div .y-axis-title text');
return await title.getVisibleText();
}
public async getXAxisLabels() {
const xAxis = await find.byCssSelector('.visAxis--x.visAxis__column--bottom');
const $ = await xAxis.parseDomContent();
return $('.x > g > text')
.toArray()
.map(tick =>
$(tick)
.text()
.trim()
);
}
public async getYAxisLabels() {
const yAxis = await find.byCssSelector('.visAxis__column--y.visAxis__column--left');
const $ = await yAxis.parseDomContent();
return $('.y > g > text')
.toArray()
.map(tick =>
$(tick)
.text()
.trim()
);
}
/**
* Gets the chart data and scales it based on chart height and label.
* @param dataLabel data-label value
* @param axis axis value, 'ValueAxis-1' by default
*
* Returns an array of height values
*/
public async getAreaChartData(dataLabel: string, axis = 'ValueAxis-1') {
const yAxisRatio = await this.getChartYAxisRatio(axis);
const rectangle = await find.byCssSelector('rect.background');
const yAxisHeight = Number(await rectangle.getAttribute('height'));
log.debug(`height --------- ${yAxisHeight}`);
const path = await retry.try(
async () =>
await find.byCssSelector(`path[data-label="${dataLabel}"]`, defaultFindTimeout * 2)
);
const data = await path.getAttribute('d');
log.debug(data);
// This area chart data starts with a 'M'ove to a x,y location, followed
// by a bunch of 'L'ines from that point to the next. Those points are
// the values we're going to use to calculate the data values we're testing.
// So git rid of the one 'M' and split the rest on the 'L's.
const tempArray = data
.replace('M ', '')
.replace('M', '')
.replace(/ L /g, 'L')
.replace(/ /g, ',')
.split('L');
const chartSections = tempArray.length / 2;
const chartData = [];
for (let i = 0; i < chartSections; i++) {
chartData[i] = Math.round((yAxisHeight - Number(tempArray[i].split(',')[1])) * yAxisRatio);
log.debug('chartData[i] =' + chartData[i]);
}
return chartData;
}
/**
* Returns the paths that compose an area chart.
* @param dataLabel data-label value
*/
public async getAreaChartPaths(dataLabel: string) {
const path = await retry.try(
async () =>
await find.byCssSelector(`path[data-label="${dataLabel}"]`, defaultFindTimeout * 2)
);
const data = await path.getAttribute('d');
log.debug(data);
// This area chart data starts with a 'M'ove to a x,y location, followed
// by a bunch of 'L'ines from that point to the next. Those points are
// the values we're going to use to calculate the data values we're testing.
// So git rid of the one 'M' and split the rest on the 'L's.
return data.split('L');
}
/**
* Gets the dots and normalizes their height.
* @param dataLabel data-label value
* @param axis axis value, 'ValueAxis-1' by default
*/
public async getLineChartData(dataLabel = 'Count', axis = 'ValueAxis-1') {
// 1). get the range/pixel ratio
const yAxisRatio = await this.getChartYAxisRatio(axis);
// 2). find and save the y-axis pixel size (the chart height)
const rectangle = await find.byCssSelector('clipPath rect');
const yAxisHeight = Number(await rectangle.getAttribute('height'));
// 3). get the visWrapper__chart elements
const chartTypes = await retry.try(
async () =>
await find.allByCssSelector(
`.visWrapper__chart circle[data-label="${dataLabel}"][fill-opacity="1"]`,
defaultFindTimeout * 2
)
);
// 4). for each chart element, find the green circle, then the cy position
const chartData = await Promise.all(
chartTypes.map(async chart => {
const cy = Number(await chart.getAttribute('cy'));
// the point_series_options test has data in the billions range and
// getting 11 digits of precision with these calculations is very hard
return Math.round(Number(((yAxisHeight - cy) * yAxisRatio).toPrecision(6)));
})
);
return chartData;
}
/**
* Returns bar chart data in pixels
* @param dataLabel data-label value
* @param axis axis value, 'ValueAxis-1' by default
*/
public async getBarChartData(dataLabel = 'Count', axis = 'ValueAxis-1') {
const yAxisRatio = await this.getChartYAxisRatio(axis);
const svg = await find.byCssSelector('div.chart');
const $ = await svg.parseDomContent();
const chartData = $(`g > g.series > rect[data-label="${dataLabel}"]`)
.toArray()
.map(chart => {
const barHeight = Number($(chart).attr('height'));
return Math.round(barHeight * yAxisRatio);
});
return chartData;
}
/**
* Returns the range/pixel ratio
* @param axis axis value, 'ValueAxis-1' by default
*/
private async getChartYAxisRatio(axis = 'ValueAxis-1') {
// 1). get the maximum chart Y-Axis marker value and Y position
const maxYAxisChartMarker = await retry.try(
async () =>
await find.byCssSelector(
`div.visAxis__splitAxes--y > div > svg > g.${axis} > g:last-of-type.tick`
)
);
const maxYLabel = (await maxYAxisChartMarker.getVisibleText()).replace(/,/g, '');
const maxYLabelYPosition = (await maxYAxisChartMarker.getPosition()).y;
log.debug(`maxYLabel = ${maxYLabel}, maxYLabelYPosition = ${maxYLabelYPosition}`);
// 2). get the minimum chart Y-Axis marker value and Y position
const minYAxisChartMarker = await find.byCssSelector(
'div.visAxis__column--y.visAxis__column--left > div > div > svg:nth-child(2) > g > g:nth-child(1).tick'
);
const minYLabel = (await minYAxisChartMarker.getVisibleText()).replace(',', '');
const minYLabelYPosition = (await minYAxisChartMarker.getPosition()).y;
return (Number(maxYLabel) - Number(minYLabel)) / (minYLabelYPosition - maxYLabelYPosition);
}
public async toggleLegend(show = true) {
await retry.try(async () => {
const isVisible = find.byCssSelector('.visLegend');
if ((show && !isVisible) || (!show && isVisible)) {
await testSubjects.click('vislibToggleLegend');
}
});
}
public async filterLegend(name: string) {
await this.toggleLegend();
await testSubjects.click(`legend-${name}`);
const filters = await testSubjects.find(`legend-${name}-filters`);
const [filterIn] = await filters.findAllByCssSelector(`input`);
await filterIn.click();
await this.waitForVisualizationRenderingStabilized();
}
public async doesLegendColorChoiceExist(color: string) {
return await testSubjects.exists(`legendSelectColor-${color}`);
}
public async selectNewLegendColorChoice(color: string) {
await testSubjects.click(`legendSelectColor-${color}`);
}
public async doesSelectedLegendColorExist(color: string) {
return await testSubjects.exists(`legendSelectedColor-${color}`);
}
public async expectError() {
await testSubjects.existOrFail('visLibVisualizeError');
}
public async getVisualizationRenderingCount() {
const visualizationLoader = await testSubjects.find('visualizationLoader');
const renderingCount = await visualizationLoader.getAttribute('data-rendering-count');
return Number(renderingCount);
}
public async waitForRenderingCount(minimumCount = 1) {
await retry.waitFor(
`rendering count to be greater than or equal to [${minimumCount}]`,
async () => {
const currentRenderingCount = await this.getVisualizationRenderingCount();
log.debug(`-- currentRenderingCount=${currentRenderingCount}`);
return currentRenderingCount >= minimumCount;
}
);
}
public async waitForVisualizationRenderingStabilized() {
// assuming rendering is done when data-rendering-count is constant within 1000 ms
await retry.waitFor('rendering count to stabilize', async () => {
const firstCount = await this.getVisualizationRenderingCount();
log.debug(`-- firstCount=${firstCount}`);
await common.sleep(1000);
const secondCount = await this.getVisualizationRenderingCount();
log.debug(`-- secondCount=${secondCount}`);
return firstCount === secondCount;
});
}
public async waitForVisualization() {
await this.waitForVisualizationRenderingStabilized();
await find.byCssSelector('.visualization');
}
public async getLegendEntries() {
const legendEntries = await find.allByCssSelector(
'.visLegend__button',
defaultFindTimeout * 2
);
return await Promise.all(
legendEntries.map(async chart => await chart.getAttribute('data-label'))
);
}
public async openLegendOptionColors(name: string) {
await this.waitForVisualizationRenderingStabilized();
await retry.try(async () => {
// This click has been flaky in opening the legend, hence the retry. See
// https://github.com/elastic/kibana/issues/17468
await testSubjects.click(`legend-${name}`);
await this.waitForVisualizationRenderingStabilized();
// arbitrary color chosen, any available would do
const isOpen = await this.doesLegendColorChoiceExist('#EF843C');
if (!isOpen) {
throw new Error('legend color selector not open');
}
});
}
public async filterOnTableCell(column: string, row: string) {
await retry.try(async () => {
const tableVis = await testSubjects.find('tableVis');
const cell = await tableVis.findByCssSelector(
`tbody tr:nth-child(${row}) td:nth-child(${column})`
);
await cell.moveMouseTo();
const filterBtn = await testSubjects.findDescendant('filterForCellValue', cell);
await filterBtn.click();
});
}
public async getMarkdownText() {
const markdownContainer = await testSubjects.find('markdownBody');
return markdownContainer.getVisibleText();
}
public async getMarkdownBodyDescendentText(selector: string) {
const markdownContainer = await testSubjects.find('markdownBody');
const element = await find.descendantDisplayedByCssSelector(selector, markdownContainer);
return element.getVisibleText();
}
/**
* If you are writing new tests, you should rather look into getTableVisContent method instead.
*/
public async getTableVisData() {
return await testSubjects.getVisibleText('paginated-table-body');
}
/**
* This function is the newer function to retrieve data from within a table visualization.
* It uses a better return format, than the old getTableVisData, by properly splitting
* cell values into arrays. Please use this function for newer tests.
*/
public async getTableVisContent({ stripEmptyRows = true } = {}) {
return await retry.try(async () => {
const container = await testSubjects.find('tableVis');
const allTables = await testSubjects.findAllDescendant('paginated-table-body', container);
if (allTables.length === 0) {
return [];
}
const allData = await Promise.all(
allTables.map(async t => {
let data = await table.getDataFromElement(t);
if (stripEmptyRows) {
data = data.filter(row => row.length > 0 && row.some(cell => cell.trim().length > 0));
}
return data;
})
);
if (allTables.length === 1) {
// If there was only one table we return only the data for that table
// This prevents an unnecessary array around that single table, which
// is the case we have in most tests.
return allData[0];
}
return allData;
});
}
public async getMetric() {
const elements = await find.allByCssSelector(
'[data-test-subj="visualizationLoader"] .mtrVis__container'
);
const values = await Promise.all(
elements.map(async element => {
const text = await element.getVisibleText();
return text;
})
);
return values
.filter(item => item.length > 0)
.reduce((arr: string[], item) => arr.concat(item.split('\n')), []);
}
public async getGaugeValue() {
const elements = await find.allByCssSelector(
'[data-test-subj="visualizationLoader"] .chart svg text'
);
const values = await Promise.all(
elements.map(async element => {
const text = await element.getVisibleText();
return text;
})
);
return values.filter(item => item.length > 0);
}
}
return new VisualizeChart();
}

View file

@ -0,0 +1,462 @@
/*
* Licensed to Elasticsearch B.V. under one or more contributor
* license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright
* ownership. Elasticsearch B.V. licenses this file to you under
* the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import expect from '@kbn/expect/expect.js';
import { FtrProviderContext } from '../ftr_provider_context';
export function VisualizeEditorPageProvider({ getService, getPageObjects }: FtrProviderContext) {
const find = getService('find');
const log = getService('log');
const retry = getService('retry');
const browser = getService('browser');
const testSubjects = getService('testSubjects');
const comboBox = getService('comboBox');
const { common, header, visChart } = getPageObjects(['common', 'header', 'visChart']);
interface IntervalOptions {
type?: 'default' | 'numeric' | 'custom';
aggNth?: number;
append?: boolean;
}
class VisualizeEditorPage {
public async clickDataTab() {
await testSubjects.click('visualizeEditDataLink');
}
public async clickOptionsTab() {
await testSubjects.click('visEditorTaboptions');
}
public async clickMetricsAndAxes() {
await testSubjects.click('visEditorTabadvanced');
}
public async clickVisEditorTab(tabName: string) {
await testSubjects.click('visEditorTab' + tabName);
await header.waitUntilLoadingHasFinished();
}
public async addInputControl(type?: string) {
if (type) {
const selectInput = await testSubjects.find('selectControlType');
await selectInput.type(type);
}
await testSubjects.click('inputControlEditorAddBtn');
await header.waitUntilLoadingHasFinished();
}
public async inputControlClear() {
await testSubjects.click('inputControlClearBtn');
await header.waitUntilLoadingHasFinished();
}
public async inputControlSubmit() {
await testSubjects.clickWhenNotDisabled('inputControlSubmitBtn');
await visChart.waitForVisualizationRenderingStabilized();
}
public async clickGo() {
const prevRenderingCount = await visChart.getVisualizationRenderingCount();
log.debug(`Before Rendering count ${prevRenderingCount}`);
await testSubjects.clickWhenNotDisabled('visualizeEditorRenderButton');
await visChart.waitForRenderingCount(prevRenderingCount + 1);
}
public async removeDimension(aggNth: number) {
await testSubjects.click(`visEditorAggAccordion${aggNth} > removeDimensionBtn`);
}
public async setFilterParams(aggNth: number, indexPattern: string, field: string) {
await comboBox.set(`indexPatternSelect-${aggNth}`, indexPattern);
await comboBox.set(`fieldSelect-${aggNth}`, field);
}
public async setFilterRange(aggNth: number, min: string, max: string) {
const control = await testSubjects.find(`inputControl${aggNth}`);
const inputMin = await control.findByCssSelector('[name$="minValue"]');
await inputMin.type(min);
const inputMax = await control.findByCssSelector('[name$="maxValue"]');
await inputMax.type(max);
}
public async clickSplitDirection(direction: string) {
const control = await testSubjects.find('visEditorSplitBy');
const radioBtn = await control.findByCssSelector(`[title="${direction}"]`);
await radioBtn.click();
}
/**
* Adds new bucket
* @param bucketName bucket name, like 'X-axis', 'Split rows', 'Split series'
* @param type aggregation type, like 'buckets', 'metrics'
*/
public async clickBucket(bucketName: string, type = 'buckets') {
await testSubjects.click(`visEditorAdd_${type}`);
await find.clickByCssSelector(`[data-test-subj="visEditorAdd_${type}_${bucketName}"`);
}
public async clickEnableCustomRanges() {
await testSubjects.click('heatmapUseCustomRanges');
}
public async clickAddRange() {
await testSubjects.click(`heatmapColorRange__addRangeButton`);
}
public async setCustomRangeByIndex(index: string, from: string, to: string) {
await testSubjects.setValue(`heatmapColorRange${index}__from`, from);
await testSubjects.setValue(`heatmapColorRange${index}__to`, to);
}
public async changeHeatmapColorNumbers(value = 6) {
const input = await testSubjects.find(`heatmapColorsNumber`);
await input.clearValueWithKeyboard();
await input.type(`${value}`);
}
public async getBucketErrorMessage() {
const error = await find.byCssSelector(
'[group-name="buckets"] [data-test-subj="defaultEditorAggSelect"] + .euiFormErrorText'
);
const errorMessage = await error.getAttribute('innerText');
log.debug(errorMessage);
return errorMessage;
}
public async addNewFilterAggregation() {
await testSubjects.click('visEditorAddFilterButton');
}
public async selectField(
fieldValue: string,
groupName = 'buckets',
childAggregationType = false
) {
log.debug(`selectField ${fieldValue}`);
const selector = `
[group-name="${groupName}"]
[data-test-subj^="visEditorAggAccordion"].euiAccordion-isOpen
[data-test-subj="visAggEditorParams"]
${childAggregationType ? '.visEditorAgg__subAgg' : ''}
[data-test-subj="visDefaultEditorField"]
`;
const fieldEl = await find.byCssSelector(selector);
await comboBox.setElement(fieldEl, fieldValue);
}
public async selectOrderByMetric(aggNth: number, metric: string) {
const sortSelect = await testSubjects.find(`visEditorOrderBy${aggNth}`);
const sortMetric = await sortSelect.findByCssSelector(`option[value="${metric}"]`);
await sortMetric.click();
}
public async selectCustomSortMetric(aggNth: number, metric: string, field: string) {
await this.selectOrderByMetric(aggNth, 'custom');
await this.selectAggregation(metric, 'buckets', true);
await this.selectField(field, 'buckets', true);
}
public async selectAggregation(
aggValue: string,
groupName = 'buckets',
childAggregationType = false
) {
const comboBoxElement = await find.byCssSelector(`
[group-name="${groupName}"]
[data-test-subj^="visEditorAggAccordion"].euiAccordion-isOpen
${childAggregationType ? '.visEditorAgg__subAgg' : ''}
[data-test-subj="defaultEditorAggSelect"]
`);
await comboBox.setElement(comboBoxElement, aggValue);
await common.sleep(500);
}
/**
* Set the test for a filter aggregation.
* @param {*} filterValue the string value of the filter
* @param {*} filterIndex used when multiple filters are configured on the same aggregation
* @param {*} aggregationId the ID if the aggregation. On Tests, it start at from 2
*/
public async setFilterAggregationValue(
filterValue: string,
filterIndex = 0,
aggregationId = 2
) {
await testSubjects.setValue(
`visEditorFilterInput_${aggregationId}_${filterIndex}`,
filterValue
);
}
public async setValue(newValue: string) {
const input = await find.byCssSelector('[data-test-subj="visEditorPercentileRanks"] input');
await input.clearValue();
await input.type(newValue);
}
public async clickEditorSidebarCollapse() {
await testSubjects.click('collapseSideBarButton');
}
public async clickDropPartialBuckets() {
await testSubjects.click('dropPartialBucketsCheckbox');
}
public async setMarkdownTxt(markdownTxt: string) {
const input = await testSubjects.find('markdownTextarea');
await input.clearValue();
await input.type(markdownTxt);
}
public async isSwitchChecked(selector: string) {
const checkbox = await testSubjects.find(selector);
const isChecked = await checkbox.getAttribute('aria-checked');
return isChecked === 'true';
}
public async checkSwitch(selector: string) {
const isChecked = await this.isSwitchChecked(selector);
if (!isChecked) {
log.debug(`checking switch ${selector}`);
await testSubjects.click(selector);
}
}
public async uncheckSwitch(selector: string) {
const isChecked = await this.isSwitchChecked(selector);
if (isChecked) {
log.debug(`unchecking switch ${selector}`);
await testSubjects.click(selector);
}
}
public async setIsFilteredByCollarCheckbox(value = true) {
await retry.try(async () => {
const isChecked = await this.isSwitchChecked('isFilteredByCollarCheckbox');
if (isChecked !== value) {
await testSubjects.click('isFilteredByCollarCheckbox');
throw new Error('isFilteredByCollar not set correctly');
}
});
}
public async setCustomLabel(label: string, index = 1) {
const customLabel = await testSubjects.find(`visEditorStringInput${index}customLabel`);
customLabel.type(label);
}
public async selectYAxisAggregation(agg: string, field: string, label: string, index = 1) {
// index starts on the first "count" metric at 1
// Each new metric or aggregation added to a visualization gets the next index.
// So to modify a metric or aggregation tests need to keep track of the
// order they are added.
await this.toggleOpenEditor(index);
// select our agg
const aggSelect = await find.byCssSelector(
`#visEditorAggAccordion${index} [data-test-subj="defaultEditorAggSelect"]`
);
await comboBox.setElement(aggSelect, agg);
const fieldSelect = await find.byCssSelector(
`#visEditorAggAccordion${index} [data-test-subj="visDefaultEditorField"]`
);
// select our field
await comboBox.setElement(fieldSelect, field);
// enter custom label
await this.setCustomLabel(label, index);
}
public async getField() {
return await comboBox.getComboBoxSelectedOptions('visDefaultEditorField');
}
public async sizeUpEditor() {
await testSubjects.click('visualizeEditorResizer');
await browser.pressKeys(browser.keys.ARROW_RIGHT);
}
public async toggleDisabledAgg(agg: string) {
await testSubjects.click(`visEditorAggAccordion${agg} > ~toggleDisableAggregationBtn`);
await header.waitUntilLoadingHasFinished();
}
public async toggleAggregationEditor(agg: string) {
await find.clickByCssSelector(
`[data-test-subj="visEditorAggAccordion${agg}"] .euiAccordion__button`
);
await header.waitUntilLoadingHasFinished();
}
public async toggleOtherBucket(agg = 2) {
await testSubjects.click(`visEditorAggAccordion${agg} > otherBucketSwitch`);
}
public async toggleMissingBucket(agg = 2) {
await testSubjects.click(`visEditorAggAccordion${agg} > missingBucketSwitch`);
}
public async toggleScaleMetrics() {
await testSubjects.click('scaleMetricsSwitch');
}
public async toggleAutoMode() {
await testSubjects.click('visualizeEditorAutoButton');
}
public async isApplyEnabled() {
const applyButton = await testSubjects.find('visualizeEditorRenderButton');
return await applyButton.isEnabled();
}
public async toggleAccordion(id: string, toState = 'true') {
const toggle = await find.byCssSelector(`button[aria-controls="${id}"]`);
const toggleOpen = await toggle.getAttribute('aria-expanded');
log.debug(`toggle ${id} expand = ${toggleOpen}`);
if (toggleOpen !== toState) {
log.debug(`toggle ${id} click()`);
await toggle.click();
}
}
public async toggleOpenEditor(index: number, toState = 'true') {
// index, see selectYAxisAggregation
await this.toggleAccordion(`visEditorAggAccordion${index}`, toState);
}
public async toggleAdvancedParams(aggId: string) {
const accordion = await testSubjects.find(`advancedParams-${aggId}`);
const accordionButton = await find.descendantDisplayedByCssSelector('button', accordion);
await accordionButton.click();
}
public async clickReset() {
await testSubjects.click('visualizeEditorResetButton');
await visChart.waitForVisualization();
}
public async clickYAxisOptions(axisId: string) {
await testSubjects.click(`toggleYAxisOptions-${axisId}`);
}
public async clickYAxisAdvancedOptions(axisId: string) {
await testSubjects.click(`toggleYAxisAdvancedOptions-${axisId}`);
}
public async changeYAxisFilterLabelsCheckbox(axisId: string, enabled: boolean) {
const selector = `yAxisFilterLabelsCheckbox-${axisId}`;
await testSubjects.setCheckbox(selector, enabled ? 'check' : 'uncheck');
}
public async setSize(newValue: string, aggId: string) {
const dataTestSubj = aggId
? `visEditorAggAccordion${aggId} > sizeParamEditor`
: 'sizeParamEditor';
await testSubjects.setValue(dataTestSubj, String(newValue));
}
public async selectChartMode(mode: string) {
const selector = await find.byCssSelector(`#seriesMode0 > option[value="${mode}"]`);
await selector.click();
}
public async selectYAxisScaleType(axisId: string, scaleType: string) {
const selectElement = await testSubjects.find(`scaleSelectYAxis-${axisId}`);
const selector = await selectElement.findByCssSelector(`option[value="${scaleType}"]`);
await selector.click();
}
public async selectYAxisMode(mode: string) {
const selector = await find.byCssSelector(`#valueAxisMode0 > option[value="${mode}"]`);
await selector.click();
}
public async setAxisExtents(min: string, max: string, axisId = 'ValueAxis-1') {
await this.toggleAccordion(`yAxisAccordion${axisId}`);
await this.toggleAccordion(`yAxisOptionsAccordion${axisId}`);
await testSubjects.click('yAxisSetYExtents');
await testSubjects.setValue('yAxisYExtentsMax', max);
await testSubjects.setValue('yAxisYExtentsMin', min);
}
public async selectAggregateWith(fieldValue: string) {
await testSubjects.selectValue('visDefaultEditorAggregateWith', fieldValue);
}
public async setInterval(newValue: string, options: IntervalOptions = {}) {
const { type = 'default', aggNth = 2, append = false } = options;
log.debug(`visEditor.setInterval(${newValue}, {${type}, ${aggNth}, ${append}})`);
if (type === 'default') {
await comboBox.set('visEditorInterval', newValue);
} else if (type === 'custom') {
await comboBox.setCustom('visEditorInterval', newValue);
} else {
if (append) {
await testSubjects.append(`visEditorInterval${aggNth}`, String(newValue));
} else {
await testSubjects.setValue(`visEditorInterval${aggNth}`, String(newValue));
}
}
}
public async getInterval() {
return await comboBox.getComboBoxSelectedOptions('visEditorInterval');
}
public async getNumericInterval(agg = 2) {
return await testSubjects.getAttribute(`visEditorInterval${agg}`, 'value');
}
public async clickMetricEditor() {
await find.clickByCssSelector('[group-name="metrics"] .euiAccordion__button');
}
public async clickMetricByIndex(index: number) {
const metrics = await find.allByCssSelector(
'[data-test-subj="visualizationLoader"] .mtrVis .mtrVis__container'
);
expect(metrics.length).greaterThan(index);
await metrics[index].click();
}
public async setSelectByOptionText(selectId: string, optionText: string) {
const selectField = await find.byCssSelector(`#${selectId}`);
const options = await find.allByCssSelector(`#${selectId} > option`);
const $ = await selectField.parseDomContent();
const optionsText = $('option')
.toArray()
.map(option => $(option).text());
const optionIndex = optionsText.indexOf(optionText);
if (optionIndex === -1) {
throw new Error(
`Unable to find option '${optionText}' in select ${selectId}. Available options: ${optionsText.join(
','
)}`
);
}
await options[optionIndex].click();
}
}
return new VisualizeEditorPage();
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,328 @@
/*
* Licensed to Elasticsearch B.V. under one or more contributor
* license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright
* ownership. Elasticsearch B.V. licenses this file to you under
* the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import { FtrProviderContext } from '../ftr_provider_context';
import { VisualizeConstants } from '../../../src/legacy/core_plugins/kibana/public/visualize/np_ready/visualize_constants';
export function VisualizePageProvider({ getService, getPageObjects }: FtrProviderContext) {
const testSubjects = getService('testSubjects');
const retry = getService('retry');
const find = getService('find');
const log = getService('log');
const globalNav = getService('globalNav');
const listingTable = getService('listingTable');
const { common, header, visEditor } = getPageObjects(['common', 'header', 'visEditor']);
/**
* This page object contains the visualization type selection, the landing page,
* and the open/save dialog functions
*/
class VisualizePage {
index = {
LOGSTASH_TIME_BASED: 'logstash-*',
LOGSTASH_NON_TIME_BASED: 'logstash*',
};
public async gotoVisualizationLandingPage() {
await common.navigateToApp('visualize');
}
public async clickNewVisualization() {
// newItemButton button is only visible when there are items in the listing table is displayed.
let exists = await testSubjects.exists('newItemButton');
if (exists) {
return await testSubjects.click('newItemButton');
}
exists = await testSubjects.exists('createVisualizationPromptButton');
// no viz exist, click createVisualizationPromptButton to create new dashboard
return await this.createVisualizationPromptButton();
}
public async createVisualizationPromptButton() {
await testSubjects.click('createVisualizationPromptButton');
}
public async getChartTypes() {
const chartTypeField = await testSubjects.find('visNewDialogTypes');
const $ = await chartTypeField.parseDomContent();
return $('button')
.toArray()
.map(chart =>
$(chart)
.findTestSubject('visTypeTitle')
.text()
.trim()
);
}
public async waitForVisualizationSelectPage() {
await retry.try(async () => {
const visualizeSelectTypePage = await testSubjects.find('visNewDialogTypes');
if (!(await visualizeSelectTypePage.isDisplayed())) {
throw new Error('wait for visualization select page');
}
});
}
public async navigateToNewVisualization() {
await common.navigateToApp('visualize');
await this.clickNewVisualization();
await this.waitForVisualizationSelectPage();
}
public async clickVisType(type: string) {
await testSubjects.click(`visType-${type}`);
await header.waitUntilLoadingHasFinished();
}
public async clickAreaChart() {
await this.clickVisType('area');
}
public async clickDataTable() {
await this.clickVisType('table');
}
public async clickLineChart() {
await this.clickVisType('line');
}
public async clickRegionMap() {
await this.clickVisType('region_map');
}
public async clickMarkdownWidget() {
await this.clickVisType('markdown');
}
public async clickMetric() {
await this.clickVisType('metric');
}
public async clickGauge() {
await this.clickVisType('gauge');
}
public async clickPieChart() {
await this.clickVisType('pie');
}
public async clickTileMap() {
await this.clickVisType('tile_map');
}
public async clickTagCloud() {
await this.clickVisType('tagcloud');
}
public async clickVega() {
await this.clickVisType('vega');
}
public async clickVisualBuilder() {
await this.clickVisType('metrics');
}
public async clickVerticalBarChart() {
await this.clickVisType('histogram');
}
public async clickHeatmapChart() {
await this.clickVisType('heatmap');
}
public async clickInputControlVis() {
await this.clickVisType('input_control_vis');
}
public async createSimpleMarkdownViz(vizName: string) {
await this.gotoVisualizationLandingPage();
await this.navigateToNewVisualization();
await this.clickMarkdownWidget();
await visEditor.setMarkdownTxt(vizName);
await visEditor.clickGo();
await this.saveVisualization(vizName);
}
public async clickNewSearch(indexPattern = this.index.LOGSTASH_TIME_BASED) {
await testSubjects.click(`savedObjectTitle${indexPattern.split(' ').join('-')}`);
await header.waitUntilLoadingHasFinished();
}
public async selectVisSourceIfRequired() {
log.debug('selectVisSourceIfRequired');
const selectPage = await testSubjects.findAll('visualizeSelectSearch');
if (selectPage.length) {
log.debug('a search is required for this visualization');
await this.clickNewSearch();
}
}
/**
* Deletes all existing visualizations
*/
public async deleteAllVisualizations() {
await retry.try(async () => {
await listingTable.checkListingSelectAllCheckbox();
await listingTable.clickDeleteSelected();
await common.clickConfirmOnModal();
await testSubjects.find('createVisualizationPromptButton');
});
}
public async isBetaInfoShown() {
return await testSubjects.exists('betaVisInfo');
}
public async getBetaTypeLinks() {
return await find.allByCssSelector('[data-vis-stage="beta"]');
}
public async getExperimentalTypeLinks() {
return await find.allByCssSelector('[data-vis-stage="experimental"]');
}
public async isExperimentalInfoShown() {
return await testSubjects.exists('experimentalVisInfo');
}
public async getExperimentalInfo() {
return await testSubjects.find('experimentalVisInfo');
}
public async getSideEditorExists() {
return await find.existsByCssSelector('.collapsible-sidebar');
}
public async clickSavedSearch(savedSearchName: string) {
await testSubjects.click(`savedObjectTitle${savedSearchName.split(' ').join('-')}`);
await header.waitUntilLoadingHasFinished();
}
public async clickUnlinkSavedSearch() {
await testSubjects.doubleClick('unlinkSavedSearch');
await header.waitUntilLoadingHasFinished();
}
public async ensureSavePanelOpen() {
log.debug('ensureSavePanelOpen');
await header.waitUntilLoadingHasFinished();
const isOpen = await testSubjects.exists('savedObjectSaveModal', { timeout: 5000 });
if (!isOpen) {
await testSubjects.click('visualizeSaveButton');
}
}
public async clickLoadSavedVisButton() {
// TODO: Use a test subject selector once we rewrite breadcrumbs to accept each breadcrumb
// element as a child instead of building the breadcrumbs dynamically.
await find.clickByCssSelector('[href="#/visualize"]');
}
public async clickVisualizationByName(vizName: string) {
log.debug('clickVisualizationByLinkText(' + vizName + ')');
await find.clickByPartialLinkText(vizName);
}
public async loadSavedVisualization(vizName: string, { navigateToVisualize = true } = {}) {
if (navigateToVisualize) {
await this.clickLoadSavedVisButton();
}
await this.openSavedVisualization(vizName);
}
public async openSavedVisualization(vizName: string) {
await this.clickVisualizationByName(vizName);
await header.waitUntilLoadingHasFinished();
}
public async waitForVisualizationSavedToastGone() {
await testSubjects.waitForDeleted('saveVisualizationSuccess');
}
public async clickLandingPageBreadcrumbLink() {
log.debug('clickLandingPageBreadcrumbLink');
await find.clickByCssSelector(`a[href="#${VisualizeConstants.LANDING_PAGE_PATH}"]`);
}
/**
* Returns true if already on the landing page (that page doesn't have a link to itself).
* @returns {Promise<boolean>}
*/
public async onLandingPage() {
log.debug(`VisualizePage.onLandingPage`);
return await testSubjects.exists('visualizeLandingPage');
}
public async gotoLandingPage() {
log.debug('VisualizePage.gotoLandingPage');
const onPage = await this.onLandingPage();
if (!onPage) {
await retry.try(async () => {
await this.clickLandingPageBreadcrumbLink();
const onLandingPage = await this.onLandingPage();
if (!onLandingPage) throw new Error('Not on the landing page.');
});
}
}
public async saveVisualization(vizName: string, { saveAsNew = false } = {}) {
await this.ensureSavePanelOpen();
await testSubjects.setValue('savedObjectTitle', vizName);
if (saveAsNew) {
log.debug('Check save as new visualization');
await testSubjects.click('saveAsNewCheckbox');
}
log.debug('Click Save Visualization button');
await testSubjects.click('confirmSaveSavedObjectButton');
// Confirm that the Visualization has actually been saved
await testSubjects.existOrFail('saveVisualizationSuccess');
const message = await common.closeToast();
await header.waitUntilLoadingHasFinished();
await common.waitForSaveModalToClose();
return message;
}
public async saveVisualizationExpectSuccess(vizName: string, { saveAsNew = false } = {}) {
const saveMessage = await this.saveVisualization(vizName, { saveAsNew });
if (!saveMessage) {
throw new Error(
`Expected saveVisualization to respond with the saveMessage from the toast, got ${saveMessage}`
);
}
}
public async saveVisualizationExpectSuccessAndBreadcrumb(
vizName: string,
{ saveAsNew = false } = {}
) {
await this.saveVisualizationExpectSuccess(vizName, { saveAsNew });
await retry.waitFor(
'last breadcrumb to have new vis name',
async () => (await globalNav.getLastBreadcrumb()) === vizName
);
}
}
return new VisualizePage();
}

View file

@ -24,7 +24,7 @@ export function DashboardVisualizationProvider({ getService, getPageObjects }) {
const queryBar = getService('queryBar');
const testSubjects = getService('testSubjects');
const dashboardAddPanel = getService('dashboardAddPanel');
const PageObjects = getPageObjects(['dashboard', 'visualize', 'header', 'discover']);
const PageObjects = getPageObjects(['dashboard', 'visualize', 'visEditor', 'header', 'discover']);
return new (class DashboardVisualizations {
async createAndAddTSVBVisualization(name) {
@ -107,8 +107,8 @@ export function DashboardVisualizationProvider({ getService, getPageObjects }) {
}
await this.ensureNewVisualizationDialogIsShowing();
await PageObjects.visualize.clickMarkdownWidget();
await PageObjects.visualize.setMarkdownTxt(markdown);
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.setMarkdownTxt(markdown);
await PageObjects.visEditor.clickGo();
await PageObjects.visualize.saveVisualizationExpectSuccess(name);
}
})();

View file

@ -49,7 +49,7 @@ import { TestSubjectsProvider } from './test_subjects';
import { ToastsProvider } from './toasts';
// @ts-ignore not TS yet
import { PieChartProvider } from './visualizations';
import { VisualizeListingTableProvider } from './visualize_listing_table';
import { ListingTableProvider } from './listing_table';
import { SavedQueryManagementComponentProvider } from './saved_query_management_component';
export const services = {
@ -66,7 +66,7 @@ export const services = {
dashboardVisualizations: DashboardVisualizationProvider,
dashboardExpect: DashboardExpectProvider,
failureDebugging: FailureDebuggingProvider,
visualizeListingTable: VisualizeListingTableProvider,
listingTable: ListingTableProvider,
dashboardAddPanel: DashboardAddPanelProvider,
dashboardReplacePanel: DashboardReplacePanelProvider,
dashboardPanelActions: DashboardPanelActionsProvider,

View file

@ -19,13 +19,25 @@
import { FtrProviderContext } from '../ftr_provider_context';
export function VisualizeListingTableProvider({ getService, getPageObjects }: FtrProviderContext) {
export function ListingTableProvider({ getService, getPageObjects }: FtrProviderContext) {
const testSubjects = getService('testSubjects');
const find = getService('find');
const log = getService('log');
const { header } = getPageObjects(['header']);
const retry = getService('retry');
const { common, header } = getPageObjects(['common', 'header']);
class ListingTable {
public async getSearchFilter() {
const searchFilter = await find.allByCssSelector('.euiFieldSearch');
return searchFilter[0];
}
public async clearFilter() {
const searchFilter = await this.getSearchFilter();
await searchFilter.clearValue();
await searchFilter.click();
}
class VisualizeListingTable {
public async getAllVisualizationNamesOnCurrentPage(): Promise<string[]> {
const visualizationNames = [];
const links = await find.allByCssSelector('.kuiLink');
@ -36,8 +48,44 @@ export function VisualizeListingTableProvider({ getService, getPageObjects }: Ft
return visualizationNames;
}
public async getItemsCount(appName: 'visualize' | 'dashboard'): Promise<number> {
const prefixMap = { visualize: 'vis', dashboard: 'dashboard' };
const elements = await find.allByCssSelector(
`[data-test-subj^="${prefixMap[appName]}ListingTitleLink"]`
);
return elements.length;
}
public async searchForItemWithName(name: string) {
log.debug(`searchForItemWithName: ${name}`);
await retry.try(async () => {
const searchFilter = await this.getSearchFilter();
await searchFilter.clearValue();
await searchFilter.click();
// Note: this replacement of - to space is to preserve original logic but I'm not sure why or if it's needed.
await searchFilter.type(name.replace('-', ' '));
await common.pressEnterKey();
});
await header.waitUntilLoadingHasFinished();
}
public async clickDeleteSelected() {
await testSubjects.click('deleteSelectedItems');
}
public async checkListingSelectAllCheckbox() {
const element = await testSubjects.find('checkboxSelectAll');
const isSelected = await element.isSelected();
if (!isSelected) {
log.debug(`checking checkbox "checkboxSelectAll"`);
await testSubjects.click('checkboxSelectAll');
}
}
public async getAllVisualizationNames(): Promise<string[]> {
log.debug('VisualizeListingTable.getAllVisualizationNames');
log.debug('ListingTable.getAllVisualizationNames');
let morePages = true;
let visualizationNames: string[] = [];
while (morePages) {
@ -54,5 +102,5 @@ export function VisualizeListingTableProvider({ getService, getPageObjects }: Ft
}
}
return new VisualizeListingTable();
return new ListingTable();
}

View file

@ -51,7 +51,7 @@ export async function ScreenshotsProvider({ getService }: FtrProviderContext) {
* @param updateBaselines {boolean} optional, pass true to update the baseline snapshot.
* @return {Promise.<number>} Percentage difference between the baseline and the current snapshot.
*/
async compareAgainstBaseline(name: string, updateBaselines: boolean, el: WebElementWrapper) {
async compareAgainstBaseline(name: string, updateBaselines: boolean, el?: WebElementWrapper) {
log.debug('compareAgainstBaseline');
const sessionPath = resolve(SESSION_DIRECTORY, `${name}.png`);
await this._take(sessionPath, el);

View file

@ -295,6 +295,25 @@ export function TestSubjectsProvider({ getService }: FtrProviderContext) {
public getCssSelector(selector: string): string {
return testSubjSelector(selector);
}
public async scrollIntoView(selector: string) {
const element = await this.find(selector);
await element.scrollIntoViewIfNecessary();
}
public async isChecked(selector: string) {
const checkbox = await this.find(selector);
return await checkbox.isSelected();
}
public async setCheckbox(selector: string, state: 'check' | 'uncheck') {
const isChecked = await this.isChecked(selector);
const states = { check: true, uncheck: false };
if (isChecked !== states[state]) {
log.debug(`updating checkbox ${selector}`);
await this.click(selector);
}
}
}
return new TestSubjects();

View file

@ -22,7 +22,7 @@ import expect from '@kbn/expect';
export default function({ getService, getPageObjects }) {
const testSubjects = getService('testSubjects');
const renderable = getService('renderable');
const PageObjects = getPageObjects(['common', 'visualize']);
const PageObjects = getPageObjects(['common', 'visualize', 'visEditor']);
async function getCounterValue() {
return await testSubjects.getVisibleText('counter');
@ -42,9 +42,9 @@ export default function({ getService, getPageObjects }) {
const editor = await testSubjects.find('counterEditor');
await editor.clearValue();
await editor.type('10');
const isApplyEnabled = await PageObjects.visualize.isApplyEnabled();
const isApplyEnabled = await PageObjects.visEditor.isApplyEnabled();
expect(isApplyEnabled).to.be(true);
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.clickGo();
const counter = await getCounterValue();
expect(counter).to.be('10');
});
@ -57,7 +57,7 @@ export default function({ getService, getPageObjects }) {
const editorValue = await getEditorValue();
expect(editorValue).to.be('11');
// If changing a param from within the vis it should immediately apply and not bring editor in an unchanged state
const isApplyEnabled = await PageObjects.visualize.isApplyEnabled();
const isApplyEnabled = await PageObjects.visEditor.isApplyEnabled();
expect(isApplyEnabled).to.be(false);
});
});

View file

@ -7,7 +7,14 @@
import expect from '@kbn/expect';
import { indexBy } from 'lodash';
export default function({ getService, getPageObjects }) {
const PageObjects = getPageObjects(['security', 'settings', 'common', 'visualize', 'timePicker']);
const PageObjects = getPageObjects([
'security',
'settings',
'common',
'visualize',
'timePicker',
'visChart',
]);
const log = getService('log');
const esArchiver = getService('esArchiver');
const browser = getService('browser');
@ -110,7 +117,7 @@ export default function({ getService, getPageObjects }) {
'"'
);
await PageObjects.timePicker.setDefaultAbsoluteRange();
await PageObjects.visualize.waitForVisualization();
await PageObjects.visChart.waitForVisualization();
await PageObjects.visualize.saveVisualizationExpectSuccess(vizName1);
await PageObjects.security.forceLogout();
});

View file

@ -7,7 +7,7 @@ import { FtrProviderContext } from '../../ftr_provider_context';
export default function({ getPageObjects, getService }: FtrProviderContext) {
const esArchiver = getService('esArchiver');
const PageObjects = getPageObjects(['common', 'visualize', 'timePicker']);
const PageObjects = getPageObjects(['common', 'visualize', 'timePicker', 'visChart']);
const inspector = getService('inspector');
describe('hybrid index pattern', () => {
@ -81,7 +81,7 @@ export default function({ getPageObjects, getService }: FtrProviderContext) {
await PageObjects.common.navigateToApp('visualize');
await PageObjects.visualize.clickVisualizationByName('hybrid_histogram_line_chart');
await PageObjects.timePicker.setAbsoluteRange(fromTime, toTime);
await PageObjects.visualize.waitForVisualizationRenderingStabilized();
await PageObjects.visChart.waitForVisualizationRenderingStabilized();
await inspector.open();
await inspector.setTablePageSize(50);
await inspector.expectTableData(expectedData);

View file

@ -25,6 +25,7 @@ export default function({ getService, getPageObjects }) {
'header',
'discover',
'visualize',
'visEditor',
]);
const log = getService('log');
@ -298,9 +299,9 @@ export default function({ getService, getPageObjects }) {
it('becomes available when saved', async () => {
await PageObjects.reporting.setTimepickerInDataRange();
await PageObjects.visualize.clickBucket('X-axis');
await PageObjects.visualize.selectAggregation('Date Histogram');
await PageObjects.visualize.clickGo();
await PageObjects.visEditor.clickBucket('X-axis');
await PageObjects.visEditor.selectAggregation('Date Histogram');
await PageObjects.visEditor.clickGo();
await PageObjects.visualize.saveVisualization('my viz');
await PageObjects.reporting.openPdfReportingPanel();
await expectEnabledGenerateReportButton();