From 946638c2688f4f047ee6141e22b16ae941b781ec Mon Sep 17 00:00:00 2001 From: cristhianzl Date: Tue, 25 Jun 2024 16:32:17 -0300 Subject: [PATCH 01/35] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20(flows.py):=20rename?= =?UTF-8?q?=20loop=20variable=20flow=20to=20=5Fflow=20to=20avoid=20shadowi?= =?UTF-8?q?ng=20and=20improve=20readability?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/backend/base/langflow/api/v1/flows.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/backend/base/langflow/api/v1/flows.py b/src/backend/base/langflow/api/v1/flows.py index 99c678151..54e4fc5e5 100644 --- a/src/backend/base/langflow/api/v1/flows.py +++ b/src/backend/base/langflow/api/v1/flows.py @@ -49,8 +49,8 @@ def create_flow( if flows: extract_number = re.compile(r"\((\d+)\)$") numbers = [] - for flow in flows: - result = extract_number.search(flow.name) + for _flow in flows: + result = extract_number.search(_flow.name) if result: numbers.append(int(result.groups(1)[0])) if numbers: From b49e8dac9a6553c4878b5c0f34a6553aa196f933 Mon Sep 17 00:00:00 2001 From: cristhianzl Date: Tue, 25 Jun 2024 22:14:17 -0300 Subject: [PATCH 02/35] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20(playwright.config.t?= =?UTF-8?q?s):=20increase=20workers=20from=201=20to=203=20to=20improve=20t?= =?UTF-8?q?est=20parallelism?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ✅ (basicExamples.spec.ts): add waitForSelector for 'fit view' to ensure element is loaded ✅ (basicExamples.spec.ts): add waitForSelector for 'built successfully' to ensure element is loaded ✅ (chatInputOutput.spec.ts): add waitForSelector for 'extended-disclosure' to ensure element is loaded ✅ (codeAreaModalComponent.spec.ts): add waitForSelector for 'extended-disclosure' to ensure element is loaded ✅ (dropdownComponent.spec.ts): add waitForSelector for 'extended-disclosure' to ensure element is loaded ✅ (fileUploadComponent.spec.ts): add waitForSelector for 'extended-disclosure' to ensure element is loaded ✅ (filterEdge.spec.ts): add waitForSelector for 'extended-disclosure' to ensure element is loaded ✅ (filterEdge.spec.ts): update test expectations for 'disclosure-agents' to be visible ✅ (floatComponent.spec.ts): add waitForSelector for 'extended-disclosure' to ensure element is loaded ✅ (flowPage.spec.ts): add waitForSelector for 'extended-disclosure' to ensure element is loaded ✅ (folders.spec.ts): add waitForSelector for 'icon-ChevronLeft' to ensure element is loaded ✅ (folders.spec.ts): update folder name input and visibility check to improve reliability ✅ (generalBugs.spec.ts): add waitForSelector for 'extended-disclosure' to ensure element is loaded ✅ (tests): replace waitForTimeout with waitForSelector in end-to-end tests Replace `waitForTimeout` with `waitForSelector` to improve test reliability and reduce flakiness. --- src/frontend/playwright.config.ts | 2 +- .../tests/end-to-end/basicExamples.spec.ts | 7 +++++++ .../tests/end-to-end/chatInputOutput.spec.ts | 6 +++++- .../end-to-end/codeAreaModalComponent.spec.ts | 6 +++++- .../end-to-end/dropdownComponent.spec.ts | 5 +++-- .../end-to-end/fileUploadComponent.spec.ts | 4 +++- .../tests/end-to-end/filterEdge.spec.ts | 19 ++++++++++--------- .../tests/end-to-end/floatComponent.spec.ts | 4 +++- .../tests/end-to-end/flowPage.spec.ts | 4 +++- src/frontend/tests/end-to-end/folders.spec.ts | 17 ++++++++++++++--- .../tests/end-to-end/generalBugs.spec.ts | 4 +++- .../tests/end-to-end/globalVariables.spec.ts | 4 +++- .../tests/end-to-end/inputComponent.spec.ts | 4 +++- .../end-to-end/inputListComponent.spec.ts | 4 +++- .../tests/end-to-end/intComponent.spec.ts | 4 +++- .../end-to-end/langflowShortcuts.spec.ts | 19 +++++++++++-------- .../tests/end-to-end/nestedComponent.spec.ts | 4 +++- .../end-to-end/promptModalComponent.spec.ts | 4 +++- .../tests/end-to-end/saveComponents.spec.ts | 5 +++-- .../tests/end-to-end/tweaks_test.spec.ts | 4 +++- 20 files changed, 92 insertions(+), 38 deletions(-) diff --git a/src/frontend/playwright.config.ts b/src/frontend/playwright.config.ts index 5af71db80..93f626569 100644 --- a/src/frontend/playwright.config.ts +++ b/src/frontend/playwright.config.ts @@ -21,7 +21,7 @@ export default defineConfig({ /* Retry on CI only */ retries: process.env.CI ? 2 : 0, /* Opt out of parallel tests on CI. */ - workers: 1, + workers: 3, /* Reporter to use. See https://playwright.dev/docs/test-reporters */ timeout: 120 * 1000, // reporter: [ diff --git a/src/frontend/tests/end-to-end/basicExamples.spec.ts b/src/frontend/tests/end-to-end/basicExamples.spec.ts index c5f80c362..9984ce931 100644 --- a/src/frontend/tests/end-to-end/basicExamples.spec.ts +++ b/src/frontend/tests/end-to-end/basicExamples.spec.ts @@ -24,6 +24,10 @@ test("Basic Prompting (Hello, World)", async ({ page }) => { await page.getByRole("heading", { name: "Basic Prompting" }).click(); await page.waitForTimeout(1000); + await page.waitForSelector('[title="fit view"]', { + timeout: 100000, + }); + await page.getByTitle("fit view").click(); await page.getByTitle("zoom out").click(); await page.getByTitle("zoom out").click(); @@ -283,6 +287,9 @@ test("Blog Writer", async ({ page }) => { await page.getByTestId("button_run_chat output").click(); await page.waitForTimeout(5000); + + await page.waitForSelector("text=built successfully", { timeout: 30000 }); + await page.getByText("built successfully").last().click({ timeout: 30000, }); diff --git a/src/frontend/tests/end-to-end/chatInputOutput.spec.ts b/src/frontend/tests/end-to-end/chatInputOutput.spec.ts index e1adf3d88..abd059cab 100644 --- a/src/frontend/tests/end-to-end/chatInputOutput.spec.ts +++ b/src/frontend/tests/end-to-end/chatInputOutput.spec.ts @@ -28,7 +28,11 @@ test("chat_io_teste", async ({ page }) => { ); await page.getByTestId("blank-flow").click(); - await page.waitForTimeout(3000); + + await page.waitForSelector('[data-testid="extended-disclosure"]', { + timeout: 100000, + }); + await page.getByTestId("extended-disclosure").click(); await page.getByPlaceholder("Search").click(); await page.getByPlaceholder("Search").fill("chat output"); diff --git a/src/frontend/tests/end-to-end/codeAreaModalComponent.spec.ts b/src/frontend/tests/end-to-end/codeAreaModalComponent.spec.ts index 044065d18..1dc7ca9ad 100644 --- a/src/frontend/tests/end-to-end/codeAreaModalComponent.spec.ts +++ b/src/frontend/tests/end-to-end/codeAreaModalComponent.spec.ts @@ -23,7 +23,11 @@ test("CodeAreaModalComponent", async ({ page }) => { await page.waitForTimeout(1000); await page.getByTestId("blank-flow").click(); - await page.waitForTimeout(3000); + + await page.waitForSelector('[data-testid="extended-disclosure"]', { + timeout: 100000, + }); + await page.getByTestId("extended-disclosure").click(); await page.getByPlaceholder("Search").click(); await page.getByPlaceholder("Search").fill("python function"); diff --git a/src/frontend/tests/end-to-end/dropdownComponent.spec.ts b/src/frontend/tests/end-to-end/dropdownComponent.spec.ts index 9e3fafa36..e730719cc 100644 --- a/src/frontend/tests/end-to-end/dropdownComponent.spec.ts +++ b/src/frontend/tests/end-to-end/dropdownComponent.spec.ts @@ -22,8 +22,9 @@ test("dropDownComponent", async ({ page }) => { await page.waitForTimeout(1000); await page.getByTestId("blank-flow").click(); - await page.waitForTimeout(3000); - + await page.waitForSelector('[data-testid="extended-disclosure"]', { + timeout: 100000, + }); await page.getByTestId("extended-disclosure").click(); await page.getByPlaceholder("Search").click(); await page.getByPlaceholder("Search").fill("amazon"); diff --git a/src/frontend/tests/end-to-end/fileUploadComponent.spec.ts b/src/frontend/tests/end-to-end/fileUploadComponent.spec.ts index 1b6f5b6e7..5d8976832 100644 --- a/src/frontend/tests/end-to-end/fileUploadComponent.spec.ts +++ b/src/frontend/tests/end-to-end/fileUploadComponent.spec.ts @@ -23,7 +23,9 @@ test("should be able to upload a file", async ({ page }) => { await page.waitForTimeout(1000); await page.getByTestId("blank-flow").click(); - await page.waitForTimeout(3000); + await page.waitForSelector('[data-testid="extended-disclosure"]', { + timeout: 100000, + }); await page.getByTestId("extended-disclosure").click(); await page.getByPlaceholder("Search").click(); diff --git a/src/frontend/tests/end-to-end/filterEdge.spec.ts b/src/frontend/tests/end-to-end/filterEdge.spec.ts index 77bef251d..e268e032b 100644 --- a/src/frontend/tests/end-to-end/filterEdge.spec.ts +++ b/src/frontend/tests/end-to-end/filterEdge.spec.ts @@ -21,7 +21,9 @@ test("LLMChain - Tooltip", async ({ page }) => { } await page.getByTestId("blank-flow").click(); - await page.waitForTimeout(3000); + await page.waitForSelector('[data-testid="extended-disclosure"]', { + timeout: 100000, + }); await page.getByTestId("extended-disclosure").click(); await page.getByPlaceholder("Search").click(); @@ -168,12 +170,13 @@ test("LLMChain - Filter", async ({ page }) => { } await page.waitForTimeout(1000); - await page.getByTestId( - "input-list-plus-btn-edit_metadata_indexing_include-2", - ); - await page.getByTestId("blank-flow").click(); await page.waitForTimeout(3000); + + await page.waitForSelector('[data-testid="extended-disclosure"]', { + timeout: 100000, + }); + await page.getByTestId("extended-disclosure").click(); await page.getByPlaceholder("Search").click(); await page.getByPlaceholder("Search").fill("llmchain"); @@ -196,10 +199,8 @@ test("LLMChain - Filter", async ({ page }) => { ) .click(); - await expect(page.getByTestId("disclosure-models")).toBeVisible(); - await expect( - page.getByTestId("modelsGoogle Generative AI").first(), - ).toBeVisible(); + await expect(page.getByTestId("disclosure-agents")).toBeVisible(); + await expect(page.getByTestId("chainsLLMChain").first()).toBeVisible(); await expect( page.getByTestId("langchain_utilitiesSearchApi").first(), diff --git a/src/frontend/tests/end-to-end/floatComponent.spec.ts b/src/frontend/tests/end-to-end/floatComponent.spec.ts index 126863a6b..f8b0bfa6b 100644 --- a/src/frontend/tests/end-to-end/floatComponent.spec.ts +++ b/src/frontend/tests/end-to-end/floatComponent.spec.ts @@ -22,7 +22,9 @@ test("FloatComponent", async ({ page }) => { await page.waitForTimeout(1000); await page.getByTestId("blank-flow").click(); - await page.waitForTimeout(3000); + await page.waitForSelector('[data-testid="extended-disclosure"]', { + timeout: 100000, + }); await page.getByTestId("extended-disclosure").click(); await page.getByPlaceholder("Search").click(); await page.getByPlaceholder("Search").fill("ollama"); diff --git a/src/frontend/tests/end-to-end/flowPage.spec.ts b/src/frontend/tests/end-to-end/flowPage.spec.ts index 4cae45bf2..bc50f52de 100644 --- a/src/frontend/tests/end-to-end/flowPage.spec.ts +++ b/src/frontend/tests/end-to-end/flowPage.spec.ts @@ -22,7 +22,9 @@ test.describe("Flow Page tests", () => { } await page.getByTestId("blank-flow").click(); - await page.waitForTimeout(3000); + await page.waitForSelector('[data-testid="extended-disclosure"]', { + timeout: 100000, + }); await page.getByTestId("extended-disclosure").click(); await page.getByPlaceholder("Search").click(); await page.getByPlaceholder("Search").fill("custom"); diff --git a/src/frontend/tests/end-to-end/folders.spec.ts b/src/frontend/tests/end-to-end/folders.spec.ts index d049b39f9..3e64ac94b 100644 --- a/src/frontend/tests/end-to-end/folders.spec.ts +++ b/src/frontend/tests/end-to-end/folders.spec.ts @@ -22,6 +22,10 @@ test("CRUD folders", async ({ page }) => { } await page.getByRole("heading", { name: "Basic Prompting" }).click(); + await page.waitForSelector('[data-testid="icon-ChevronLeft"]', { + timeout: 100000, + }); + await page.getByTestId("icon-ChevronLeft").first().click(); await page.getByText("My Collection").nth(2).isVisible(); @@ -35,9 +39,16 @@ test("CRUD folders", async ({ page }) => { await page.getByText("New Folder").last().isVisible(); await page.waitForTimeout(1000); await page.getByText("New Folder").last().dblclick(); - await page.getByTestId("input-folder").fill("new folder test name"); - await page.keyboard.press("Enter"); - await page.getByText("new folder test name").last().isVisible(); + + const element = await page.getByTestId("input-folder"); + await element.fill("new folder test name"); + + await page.getByText("My Projects").last().click(); + + await page.getByText("new folder test name").last().waitFor({ + state: "visible", + timeout: 30000, + }); await page .getByText("new folder test name") diff --git a/src/frontend/tests/end-to-end/generalBugs.spec.ts b/src/frontend/tests/end-to-end/generalBugs.spec.ts index a0e435fd5..ef0bbbb2f 100644 --- a/src/frontend/tests/end-to-end/generalBugs.spec.ts +++ b/src/frontend/tests/end-to-end/generalBugs.spec.ts @@ -22,7 +22,9 @@ test("should interact with api request", async ({ page }) => { modalCount = await page.getByTestId("modal-title")?.count(); } await page.getByTestId("blank-flow").click(); - await page.waitForTimeout(1000); + await page.waitForSelector('[data-testid="extended-disclosure"]', { + timeout: 100000, + }); await page.getByTestId("extended-disclosure").click(); await page.getByPlaceholder("Search").click(); await page.getByPlaceholder("Search").fill("api request"); diff --git a/src/frontend/tests/end-to-end/globalVariables.spec.ts b/src/frontend/tests/end-to-end/globalVariables.spec.ts index 64af7fe28..f213dfcec 100644 --- a/src/frontend/tests/end-to-end/globalVariables.spec.ts +++ b/src/frontend/tests/end-to-end/globalVariables.spec.ts @@ -22,7 +22,9 @@ test("GlobalVariables", async ({ page }) => { await page.waitForTimeout(1000); await page.getByTestId("blank-flow").click(); - await page.waitForTimeout(3000); + await page.waitForSelector('[data-testid="extended-disclosure"]', { + timeout: 100000, + }); await page.getByTestId("extended-disclosure").click(); await page.getByPlaceholder("Search").click(); await page.getByPlaceholder("Search").fill("openai"); diff --git a/src/frontend/tests/end-to-end/inputComponent.spec.ts b/src/frontend/tests/end-to-end/inputComponent.spec.ts index 99bf207cf..15cf2a879 100644 --- a/src/frontend/tests/end-to-end/inputComponent.spec.ts +++ b/src/frontend/tests/end-to-end/inputComponent.spec.ts @@ -22,7 +22,9 @@ test("InputComponent", async ({ page }) => { await page.waitForTimeout(1000); await page.getByTestId("blank-flow").click(); - await page.waitForTimeout(3000); + await page.waitForSelector('[data-testid="extended-disclosure"]', { + timeout: 100000, + }); await page.getByTestId("extended-disclosure").click(); await page.getByPlaceholder("Search").click(); await page.getByPlaceholder("Search").fill("Chroma"); diff --git a/src/frontend/tests/end-to-end/inputListComponent.spec.ts b/src/frontend/tests/end-to-end/inputListComponent.spec.ts index fa91b685f..6555621b7 100644 --- a/src/frontend/tests/end-to-end/inputListComponent.spec.ts +++ b/src/frontend/tests/end-to-end/inputListComponent.spec.ts @@ -21,7 +21,9 @@ test("InputListComponent", async ({ page }) => { } await page.getByTestId("blank-flow").click(); - await page.waitForTimeout(3000); + await page.waitForSelector('[data-testid="extended-disclosure"]', { + timeout: 100000, + }); await page.getByTestId("extended-disclosure").click(); await page.getByPlaceholder("Search").click(); await page.getByPlaceholder("Search").fill("url"); diff --git a/src/frontend/tests/end-to-end/intComponent.spec.ts b/src/frontend/tests/end-to-end/intComponent.spec.ts index 30522d397..b817a243b 100644 --- a/src/frontend/tests/end-to-end/intComponent.spec.ts +++ b/src/frontend/tests/end-to-end/intComponent.spec.ts @@ -22,7 +22,9 @@ test("IntComponent", async ({ page }) => { await page.waitForTimeout(1000); await page.getByTestId("blank-flow").click(); - await page.waitForTimeout(3000); + await page.waitForSelector('[data-testid="extended-disclosure"]', { + timeout: 100000, + }); await page.getByTestId("extended-disclosure").click(); await page.getByPlaceholder("Search").click(); await page.getByPlaceholder("Search").fill("openai"); diff --git a/src/frontend/tests/end-to-end/langflowShortcuts.spec.ts b/src/frontend/tests/end-to-end/langflowShortcuts.spec.ts index 42b8744d1..6ba57947d 100644 --- a/src/frontend/tests/end-to-end/langflowShortcuts.spec.ts +++ b/src/frontend/tests/end-to-end/langflowShortcuts.spec.ts @@ -2,13 +2,6 @@ import { expect, test } from "@playwright/test"; import uaParser from "ua-parser-js"; test("LangflowShortcuts", async ({ page }) => { await page.goto("/"); - const getUA = await page.evaluate(() => navigator.userAgent); - const userAgentInfo = uaParser(getUA); - let control = "Control"; - - if (userAgentInfo.os.name.includes("Mac")) { - control = "Meta"; - } await page.waitForTimeout(1000); @@ -28,8 +21,18 @@ test("LangflowShortcuts", async ({ page }) => { modalCount = await page.getByTestId("modal-title")?.count(); } + const getUA = await page.evaluate(() => navigator.userAgent); + const userAgentInfo = uaParser(getUA); + let control = "Control"; + + if (userAgentInfo.os.name.includes("Mac")) { + control = "Meta"; + } + await page.getByTestId("blank-flow").click(); - await page.waitForTimeout(3000); + await page.waitForSelector('[data-testid="extended-disclosure"]', { + timeout: 100000, + }); await page.getByTestId("extended-disclosure").click(); await page.getByPlaceholder("Search").click(); await page.getByPlaceholder("Search").fill("ollama"); diff --git a/src/frontend/tests/end-to-end/nestedComponent.spec.ts b/src/frontend/tests/end-to-end/nestedComponent.spec.ts index a00e2f9b3..03babe4fb 100644 --- a/src/frontend/tests/end-to-end/nestedComponent.spec.ts +++ b/src/frontend/tests/end-to-end/nestedComponent.spec.ts @@ -21,7 +21,9 @@ test("NestedComponent", async ({ page }) => { } await page.getByTestId("blank-flow").click(); - await page.waitForTimeout(3000); + await page.waitForSelector('[data-testid="extended-disclosure"]', { + timeout: 100000, + }); await page.getByTestId("extended-disclosure").click(); await page.getByPlaceholder("Search").click(); await page.getByPlaceholder("Search").fill("pinecone"); diff --git a/src/frontend/tests/end-to-end/promptModalComponent.spec.ts b/src/frontend/tests/end-to-end/promptModalComponent.spec.ts index 74bc44480..046739469 100644 --- a/src/frontend/tests/end-to-end/promptModalComponent.spec.ts +++ b/src/frontend/tests/end-to-end/promptModalComponent.spec.ts @@ -21,7 +21,9 @@ test("PromptTemplateComponent", async ({ page }) => { } await page.getByTestId("blank-flow").click(); - await page.waitForTimeout(3000); + await page.waitForSelector('[data-testid="extended-disclosure"]', { + timeout: 100000, + }); await page.getByTestId("extended-disclosure").click(); await page.getByPlaceholder("Search").click(); await page.getByPlaceholder("Search").fill("prompt"); diff --git a/src/frontend/tests/end-to-end/saveComponents.spec.ts b/src/frontend/tests/end-to-end/saveComponents.spec.ts index 17be7622b..584a89d34 100644 --- a/src/frontend/tests/end-to-end/saveComponents.spec.ts +++ b/src/frontend/tests/end-to-end/saveComponents.spec.ts @@ -93,8 +93,9 @@ test.describe("save component tests", () => { if (replaceButton) { await page.getByTestId("replace-button").click(); } - await page.waitForTimeout(3000); - + await page.waitForSelector('[data-testid="extended-disclosure"]', { + timeout: 100000, + }); await page.getByTestId("extended-disclosure").click(); await page.getByPlaceholder("Search").click(); await page.getByPlaceholder("Search").fill("group"); diff --git a/src/frontend/tests/end-to-end/tweaks_test.spec.ts b/src/frontend/tests/end-to-end/tweaks_test.spec.ts index bc4ab7c56..08b9565dc 100644 --- a/src/frontend/tests/end-to-end/tweaks_test.spec.ts +++ b/src/frontend/tests/end-to-end/tweaks_test.spec.ts @@ -82,7 +82,9 @@ test("check if tweaks are updating when someothing on the flow changes", async ( await page.waitForTimeout(1000); await page.getByTestId("blank-flow").click(); - await page.waitForTimeout(3000); + await page.waitForSelector('[data-testid="extended-disclosure"]', { + timeout: 100000, + }); await page.getByTestId("extended-disclosure").click(); await page.getByPlaceholder("Search").click(); await page.getByPlaceholder("Search").fill("Chroma"); From 326353cb6d976fb595b0e4d3200a9a1ac1160988 Mon Sep 17 00:00:00 2001 From: cristhianzl Date: Wed, 26 Jun 2024 11:47:48 -0300 Subject: [PATCH 03/35] =?UTF-8?q?=E2=9C=85=20(playwright.config.ts):=20upd?= =?UTF-8?q?ate=20retries=20and=20workers=20configuration=20for=20CI=20?= =?UTF-8?q?=F0=9F=92=A1=20(textAreaWrapper):=20add=20data-testid=20attribu?= =?UTF-8?q?te=20for=20better=20test=20targeting=20=E2=9C=85=20(actionsMain?= =?UTF-8?q?Page.spec.ts):=20add=20waitForSelector=20for=20better=20test=20?= =?UTF-8?q?stability=20=E2=9C=85=20(basicExamples.spec.ts):=20replace=20wa?= =?UTF-8?q?itForTimeout=20with=20waitForSelector=20=E2=9C=85=20(basicExamp?= =?UTF-8?q?les.spec.ts):=20use=20data-testid=20for=20chat=20input=20for=20?= =?UTF-8?q?consistency=20=E2=9C=85=20(memoryChatbot.spec.ts):=20replace=20?= =?UTF-8?q?waitForTimeout=20with=20waitForSelector=20=E2=9C=85=20(memoryCh?= =?UTF-8?q?atbot.spec.ts):=20use=20data-testid=20for=20chat=20input=20for?= =?UTF-8?q?=20consistency=20=E2=9C=85=20(documentQA.spec.ts):=20replace=20?= =?UTF-8?q?waitForTimeout=20with=20waitForSelector=20=E2=9C=85=20(document?= =?UTF-8?q?QA.spec.ts):=20use=20data-testid=20for=20chat=20input=20for=20c?= =?UTF-8?q?onsistency=20=E2=9C=85=20(vectorStoreRAG.spec.ts):=20replace=20?= =?UTF-8?q?waitForTimeout=20with=20waitForSelector=20=E2=9C=85=20(vectorSt?= =?UTF-8?q?oreRAG.spec.ts):=20use=20data-testid=20for=20chat=20input=20for?= =?UTF-8?q?=20consistency?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ✅ (tests): add waitForSelector to ensure elements are loaded before interaction ✅ (tests): add waitForSelector for 'fit view' button in end-to-end tests --- src/frontend/playwright.config.ts | 4 +- .../components/textAreaWrapper/index.tsx | 1 + .../tests/end-to-end/actionsMainPage.spec.ts | 12 +++ .../tests/end-to-end/basicExamples.spec.ts | 79 +++++++++++++++---- .../tests/end-to-end/chatInputOutput.spec.ts | 11 ++- .../end-to-end/chatInputOutputUser.spec.ts | 21 +++-- .../tests/end-to-end/filterEdge.spec.ts | 9 +++ src/frontend/tests/end-to-end/folders.spec.ts | 4 +- .../tests/end-to-end/generalBugs.spec.ts | 7 +- .../tests/end-to-end/globalVariables.spec.ts | 4 + .../tests/end-to-end/inputComponent.spec.ts | 4 + .../tests/end-to-end/intComponent.spec.ts | 9 +++ .../end-to-end/langflowShortcuts.spec.ts | 5 ++ .../end-to-end/textAreaModalComponent.spec.ts | 4 + .../tests/end-to-end/textInputOutput.spec.ts | 8 ++ .../tests/end-to-end/toggleComponent.spec.ts | 12 +++ .../tests/end-to-end/tweaks_test.spec.ts | 5 ++ 17 files changed, 173 insertions(+), 26 deletions(-) diff --git a/src/frontend/playwright.config.ts b/src/frontend/playwright.config.ts index 93f626569..fa1df86e3 100644 --- a/src/frontend/playwright.config.ts +++ b/src/frontend/playwright.config.ts @@ -19,9 +19,9 @@ export default defineConfig({ /* Fail the build on CI if you accidentally left test.only in the source code. */ forbidOnly: !!process.env.CI, /* Retry on CI only */ - retries: process.env.CI ? 2 : 0, + retries: process.env.CI ? 2 : 3, /* Opt out of parallel tests on CI. */ - workers: 3, + workers: 2, /* Reporter to use. See https://playwright.dev/docs/test-reporters */ timeout: 120 * 1000, // reporter: [ diff --git a/src/frontend/src/modals/IOModal/components/chatView/chatInput/components/textAreaWrapper/index.tsx b/src/frontend/src/modals/IOModal/components/chatView/chatInput/components/textAreaWrapper/index.tsx index 29f88453a..0a9ba4a7e 100644 --- a/src/frontend/src/modals/IOModal/components/chatView/chatInput/components/textAreaWrapper/index.tsx +++ b/src/frontend/src/modals/IOModal/components/chatView/chatInput/components/textAreaWrapper/index.tsx @@ -45,6 +45,7 @@ const TextAreaWrapper = ({ return (