tests: reduce e2e test flakyness

This commit is contained in:
Matthias 2024-09-28 20:55:28 +02:00
parent 113f8f0935
commit a2b3a3d8d7
2 changed files with 41 additions and 3 deletions

View File

@ -101,9 +101,21 @@ test.describe('Trade', () => {
await expect(page.getByText('Config reloaded successfully.')).toBeInViewport(); await expect(page.getByText('Config reloaded successfully.')).toBeInViewport();
}); });
test('Trade page - drag and drop', async ({ page }) => { test('Trade page - drag and drop', async ({ page }) => {
await page.goto('/trade'); await Promise.all([
page.goto('/trade'),
const multiPane = page.locator('.drag-header', { hasText: 'Multi Pane' }); // Wait for network requests
// page.waitForResponse('**/ping'),
page.waitForResponse('**/status'),
page.waitForResponse('**/profit'),
page.waitForResponse('**/balance'),
// page.waitForResponse('**/trades'),
page.waitForResponse('**/whitelist'),
page.waitForResponse('**/blacklist'),
page.waitForResponse('**/locks'),
]);
// Wait for dynamic layout to settle
await page.waitForTimeout(1000);
const multiPane = await page.locator('.drag-header', { hasText: 'Multi Pane' });
const multiPanebb = await multiPane.boundingBox(); const multiPanebb = await multiPane.boundingBox();
@ -111,6 +123,8 @@ test.describe('Trade', () => {
await page.getByText('Lock layout').uncheck(); await page.getByText('Lock layout').uncheck();
const chartHeader = await page.locator('.drag-header:has-text("Chart")'); const chartHeader = await page.locator('.drag-header:has-text("Chart")');
// Click outside of popup to ensure it's closed
// await chartHeader.click();
await expect(multiPane).toBeInViewport(); await expect(multiPane).toBeInViewport();
await expect(chartHeader).toBeInViewport(); await expect(chartHeader).toBeInViewport();

24
src/components.d.ts vendored
View File

@ -23,6 +23,8 @@ declare module 'vue' {
BaseStringList: typeof import('./components/general/BaseStringList.vue')['default'] BaseStringList: typeof import('./components/general/BaseStringList.vue')['default']
BAvatar: typeof import('bootstrap-vue-next/components/BAvatar')['BAvatar'] BAvatar: typeof import('bootstrap-vue-next/components/BAvatar')['BAvatar']
BButton: typeof import('bootstrap-vue-next/components/BButton')['BButton'] BButton: typeof import('bootstrap-vue-next/components/BButton')['BButton']
BCard: typeof import('bootstrap-vue-next/components/BCard')['BCard']
BCardBody: typeof import('bootstrap-vue-next/components/BCard')['BCardBody']
BCollapse: typeof import('bootstrap-vue-next/components/BCollapse')['BCollapse'] BCollapse: typeof import('bootstrap-vue-next/components/BCollapse')['BCollapse']
BDropdown: typeof import('bootstrap-vue-next/components/BDropdown')['BDropdown'] BDropdown: typeof import('bootstrap-vue-next/components/BDropdown')['BDropdown']
BDropdownDivider: typeof import('bootstrap-vue-next/components/BDropdown')['BDropdownDivider'] BDropdownDivider: typeof import('bootstrap-vue-next/components/BDropdown')['BDropdownDivider']
@ -30,6 +32,7 @@ declare module 'vue' {
BFormCheckbox: typeof import('bootstrap-vue-next/components/BFormCheckbox')['BFormCheckbox'] BFormCheckbox: typeof import('bootstrap-vue-next/components/BFormCheckbox')['BFormCheckbox']
BFormGroup: typeof import('bootstrap-vue-next/components/BFormGroup')['BFormGroup'] BFormGroup: typeof import('bootstrap-vue-next/components/BFormGroup')['BFormGroup']
BFormInput: typeof import('bootstrap-vue-next/components/BFormInput')['BFormInput'] BFormInput: typeof import('bootstrap-vue-next/components/BFormInput')['BFormInput']
BFormRadio: typeof import('bootstrap-vue-next/components/BFormRadio')['BFormRadio']
BFormRadioGroup: typeof import('bootstrap-vue-next/components/BFormRadio')['BFormRadioGroup'] BFormRadioGroup: typeof import('bootstrap-vue-next/components/BFormRadio')['BFormRadioGroup']
BFormSelect: typeof import('bootstrap-vue-next/components/BFormSelect')['BFormSelect'] BFormSelect: typeof import('bootstrap-vue-next/components/BFormSelect')['BFormSelect']
BFormTextarea: typeof import('bootstrap-vue-next/components/BFormTextarea')['BFormTextarea'] BFormTextarea: typeof import('bootstrap-vue-next/components/BFormTextarea')['BFormTextarea']
@ -59,8 +62,14 @@ declare module 'vue' {
BSpinner: typeof import('bootstrap-vue-next/components/BSpinner')['BSpinner'] BSpinner: typeof import('bootstrap-vue-next/components/BSpinner')['BSpinner']
BTab: typeof import('bootstrap-vue-next/components/BTabs')['BTab'] BTab: typeof import('bootstrap-vue-next/components/BTabs')['BTab']
BTable: typeof import('bootstrap-vue-next/components/BTable')['BTable'] BTable: typeof import('bootstrap-vue-next/components/BTable')['BTable']
BTableSimple: typeof import('bootstrap-vue-next/components/BTable')['BTableSimple']
BTabs: typeof import('bootstrap-vue-next/components/BTabs')['BTabs'] BTabs: typeof import('bootstrap-vue-next/components/BTabs')['BTabs']
BTbody: typeof import('bootstrap-vue-next/components/BTable')['BTbody']
BTd: typeof import('bootstrap-vue-next/components/BTable')['BTd']
BTh: typeof import('bootstrap-vue-next/components/BTable')['BTh']
BThead: typeof import('bootstrap-vue-next/components/BTable')['BThead']
BToast: typeof import('bootstrap-vue-next/components/BToast')['BToast'] BToast: typeof import('bootstrap-vue-next/components/BToast')['BToast']
BTr: typeof import('bootstrap-vue-next/components/BTable')['BTr']
CandleChart: typeof import('./components/charts/CandleChart.vue')['default'] CandleChart: typeof import('./components/charts/CandleChart.vue')['default']
CandleChartContainer: typeof import('./components/charts/CandleChartContainer.vue')['default'] CandleChartContainer: typeof import('./components/charts/CandleChartContainer.vue')['default']
CopyableTextfield: typeof import('./components/general/CopyableTextfield.vue')['default'] CopyableTextfield: typeof import('./components/general/CopyableTextfield.vue')['default']
@ -76,17 +85,31 @@ declare module 'vue' {
FreqaiModelSelect: typeof import('./components/ftbot/FreqaiModelSelect.vue')['default'] FreqaiModelSelect: typeof import('./components/ftbot/FreqaiModelSelect.vue')['default']
HourlyChart: typeof import('./components/charts/HourlyChart.vue')['default'] HourlyChart: typeof import('./components/charts/HourlyChart.vue')['default']
IMdiAlert: typeof import('~icons/mdi/alert')['default'] IMdiAlert: typeof import('~icons/mdi/alert')['default']
IMdiArrowDownThick: typeof import('~icons/mdi/arrow-down-thick')['default']
IMdiArrowDownThin: typeof import('~icons/mdi/arrow-down-thin')['default']
IMdiArrowRight: typeof import('~icons/mdi/arrow-right')['default']
IMdiArrowRightBoldBoxOutline: typeof import('~icons/mdi/arrow-right-bold-box-outline')['default']
IMdiArrowUpThin: typeof import('~icons/mdi/arrow-up-thin')['default']
IMdiBank: typeof import('~icons/mdi/bank')['default'] IMdiBank: typeof import('~icons/mdi/bank')['default']
IMdiBrightness6: typeof import('~icons/mdi/brightness6')['default'] IMdiBrightness6: typeof import('~icons/mdi/brightness6')['default']
IMdiCancel: typeof import('~icons/mdi/cancel')['default'] IMdiCancel: typeof import('~icons/mdi/cancel')['default']
IMdiChartBellCurveCumulative: typeof import('~icons/mdi/chart-bell-curve-cumulative')['default']
IMdiChartTimelineVariantShimmer: typeof import('~icons/mdi/chart-timeline-variant-shimmer')['default']
IMdiCheck: typeof import('~icons/mdi/check')['default'] IMdiCheck: typeof import('~icons/mdi/check')['default']
IMdiCheckCircle: typeof import('~icons/mdi/check-circle')['default'] IMdiCheckCircle: typeof import('~icons/mdi/check-circle')['default']
IMdiChevronDown: typeof import('~icons/mdi/chevron-down')['default']
IMdiChevronLeft: typeof import('~icons/mdi/chevron-left')['default']
IMdiChevronRight: typeof import('~icons/mdi/chevron-right')['default']
IMdiChevronUp: typeof import('~icons/mdi/chevron-up')['default']
IMdiCircle: typeof import('~icons/mdi/circle')['default'] IMdiCircle: typeof import('~icons/mdi/circle')['default']
IMdiClose: typeof import('~icons/mdi/close')['default'] IMdiClose: typeof import('~icons/mdi/close')['default']
IMdiCloseBox: typeof import('~icons/mdi/close-box')['default'] IMdiCloseBox: typeof import('~icons/mdi/close-box')['default']
IMdiCloseBoxMultiple: typeof import('~icons/mdi/close-box-multiple')['default'] IMdiCloseBoxMultiple: typeof import('~icons/mdi/close-box-multiple')['default']
IMdiCloudDownload: typeof import('~icons/mdi/cloud-download')['default']
IMdiCog: typeof import('~icons/mdi/cog')['default'] IMdiCog: typeof import('~icons/mdi/cog')['default']
IMdiCompareHorizontal: typeof import('~icons/mdi/compare-horizontal')['default']
IMdiContentCopy: typeof import('~icons/mdi/content-copy')['default'] IMdiContentCopy: typeof import('~icons/mdi/content-copy')['default']
IMdiContentSave: typeof import('~icons/mdi/content-save')['default']
IMdiDelete: typeof import('~icons/mdi/delete')['default'] IMdiDelete: typeof import('~icons/mdi/delete')['default']
IMdiDiceMultiple: typeof import('~icons/mdi/dice-multiple')['default'] IMdiDiceMultiple: typeof import('~icons/mdi/dice-multiple')['default']
IMdiEye: typeof import('~icons/mdi/eye')['default'] IMdiEye: typeof import('~icons/mdi/eye')['default']
@ -110,6 +133,7 @@ declare module 'vue' {
IMdiRobot: typeof import('~icons/mdi/robot')['default'] IMdiRobot: typeof import('~icons/mdi/robot')['default']
IMdiRunFast: typeof import('~icons/mdi/run-fast')['default'] IMdiRunFast: typeof import('~icons/mdi/run-fast')['default']
IMdiStop: typeof import('~icons/mdi/stop')['default'] IMdiStop: typeof import('~icons/mdi/stop')['default']
IMdiTableEye: typeof import('~icons/mdi/table-eye')['default']
IMdiTriangle: typeof import('~icons/mdi/triangle')['default'] IMdiTriangle: typeof import('~icons/mdi/triangle')['default']
IMdiTriangleDown: typeof import('~icons/mdi/triangle-down')['default'] IMdiTriangleDown: typeof import('~icons/mdi/triangle-down')['default']
IMdiViewDashboardOutline: typeof import('~icons/mdi/view-dashboard-outline')['default'] IMdiViewDashboardOutline: typeof import('~icons/mdi/view-dashboard-outline')['default']