test: Script updates for flaky tests (#16355)

This commit is contained in:
Aishwarya-U-R 2022-09-02 06:35:45 +05:30 committed by GitHub
parent b0e7c2e60d
commit 4bf0827763
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
25 changed files with 232 additions and 248 deletions

View File

@ -246,12 +246,12 @@ describe("AForce - Community Issues page validations", function() {
//Two filters - AND //Two filters - AND
table.OpenNFilterTable("Votes", "greater than", "2"); table.OpenNFilterTable("Votes", "greater than", "2");
table.ReadTableRowColumnData(0, 1).then(($cellData) => { table.ReadTableRowColumnData(0, 1, 3000).then(($cellData) => {
expect($cellData).to.eq("Combine queries from different datasources"); expect($cellData).to.eq("Combine queries from different datasources");
}); });
table.OpenNFilterTable("Title", "contains", "button", "AND", 1); table.OpenNFilterTable("Title", "contains", "button", "AND", 1);
table.ReadTableRowColumnData(0, 1).then(($cellData) => { table.ReadTableRowColumnData(0, 1, 3000).then(($cellData) => {
expect($cellData).to.eq( expect($cellData).to.eq(
"Change the video in the video player with a button click", "Change the video in the video player with a button click",
); );
@ -297,7 +297,7 @@ describe("AForce - Community Issues page validations", function() {
table.SearchTable("Suggestion", 2); table.SearchTable("Suggestion", 2);
table.WaitUntilTableLoad(); table.WaitUntilTableLoad();
table.ReadTableRowColumnData(0, 0, 1000).then((cellData) => { table.ReadTableRowColumnData(0, 0, 4000).then((cellData) => {
expect(cellData).to.be.equal("Suggestion"); expect(cellData).to.be.equal("Suggestion");
}); });

View File

@ -68,15 +68,15 @@ describe("Validate basic binding of Input widget to Input widget", () => {
expect($selectedValue).to.eq("#1"); expect($selectedValue).to.eq("#1");
}); });
table.SelectTableRow(2); //Deselecting here! table.SelectTableRow(2, 0, false); //Deselecting here!
agHelper.ReadSelectedDropDownValue().then(($selectedValue) => { agHelper.ReadSelectedDropDownValue().then(($selectedValue) => {
expect($selectedValue).to.eq("Select option"); expect($selectedValue).to.eq("Select option");
}); });
}); });
it("3. Verify Selecting the already selected row deselects it", () => { it("3. Verify Selecting the already selected row deselects it", () => {
table.SelectTableRow(0); table.SelectTableRow(0);//select here
table.SelectTableRow(0); table.SelectTableRow(0, 0, false);//deselect here
agHelper.ReadSelectedDropDownValue().then(($selectedValue) => { agHelper.ReadSelectedDropDownValue().then(($selectedValue) => {
expect($selectedValue).to.eq("Select option"); expect($selectedValue).to.eq("Select option");
}); });

View File

@ -0,0 +1,83 @@
import { ObjectsRegistry } from "../../../../support/Objects/Registry";
import { Table } from "../../../../support/Pages/Table";
import { TableV2 } from "../../../../support/Pages/TableV2";
let dsName: any, query: string;
const agHelper = ObjectsRegistry.AggregateHelper,
ee = ObjectsRegistry.EntityExplorer,
dataSources = ObjectsRegistry.DataSources,
propPane = ObjectsRegistry.PropertyPane,
homePage = ObjectsRegistry.HomePage,
locator = ObjectsRegistry.CommonLocators,
table = ObjectsRegistry.Table;
describe("Bug 9334: The Select widget value is sent as null when user switches between the pages", function() {
before(() => {
propPane.ChangeTheme("Pampas");
});
it("1. Create Postgress DS", function() {
dataSources.CreateDataSource("Postgres");
cy.get("@dsName").then(($dsName) => {
dsName = $dsName;
});
});
it("2. Create dummy pages for navigating", () => {
//CRUD page 2
ee.AddNewPage();
agHelper.GetNClick(homePage._buildFromDataTableActionCard);
agHelper.GetNClick(dataSources._selectDatasourceDropdown);
agHelper.GetNClickByContains(dataSources._dropdownOption, dsName);
agHelper.ValidateNetworkStatus("@getDatasourceStructure"); //Making sure table dropdown is populated
agHelper.GetNClick(dataSources._selectTableDropdown);
agHelper.GetNClickByContains(dataSources._dropdownOption, "astronauts");
agHelper.GetNClick(dataSources._generatePageBtn);
agHelper.ValidateNetworkStatus("@replaceLayoutWithCRUDPage", 201);
agHelper.AssertContains("Successfully generated a page");
//agHelper.ValidateNetworkStatus("@getActions", 200);//Since failing sometimes
agHelper.ValidateNetworkStatus("@postExecute", 200);
agHelper.ValidateNetworkStatus("@updateLayout", 200);
agHelper.GetNClick(dataSources._visibleTextSpan("GOT IT"));
table.WaitUntilTableLoad();
//CRUD page 3
ee.AddNewPage();
agHelper.GetNClick(homePage._buildFromDataTableActionCard);
agHelper.GetNClick(dataSources._selectDatasourceDropdown);
agHelper.GetNClickByContains(dataSources._dropdownOption, dsName);
agHelper.ValidateNetworkStatus("@getDatasourceStructure"); //Making sure table dropdown is populated
agHelper.GetNClick(dataSources._selectTableDropdown);
agHelper.GetNClickByContains(dataSources._dropdownOption, "country");
agHelper.GetNClick(dataSources._generatePageBtn);
agHelper.ValidateNetworkStatus("@replaceLayoutWithCRUDPage", 201);
agHelper.AssertContains("Successfully generated a page");
//agHelper.ValidateNetworkStatus("@getActions", 200);//Since failing sometimes
agHelper.ValidateNetworkStatus("@postExecute", 200);
agHelper.ValidateNetworkStatus("@updateLayout", 200);
agHelper.GetNClick(dataSources._visibleTextSpan("GOT IT"));
table.WaitUntilTableLoad();
});
//Since its failing continuously skiping now
it("3. Navigate & Assert toast", () => {
//Navigating between CRUD (Page3) & EmptyPage (Page2):
ee.SelectEntityByName("Page1");
agHelper.Sleep(2000);
ee.SelectEntityByName("Page2");
agHelper.AssertElementAbsence(
locator._specificToast('The action "SelectQuery" has failed.'),
);
//Navigating between CRUD (Page3) & CRUD (Page4):
ee.SelectEntityByName("Page3");
agHelper.Sleep(2000);
ee.SelectEntityByName("Page2");
agHelper.AssertElementAbsence(
locator._specificToast('The action "SelectQuery" has failed.'),
);
});
});

View File

@ -1,143 +0,0 @@
const pages = require("../../../../locators/Pages.json");
const generatePage = require("../../../../locators/GeneratePage.json");
import homePage from "../../../../locators/HomePage";
import datasource from "../../../../locators/DatasourcesEditor.json";
describe("Generate New CRUD Page Inside from entity explorer", function() {
let datasourceName;
beforeEach(() => {
cy.startRoutesForDatasource();
// TODO
// 1. Add INVALID credential for a datasource and test the invalid datasource structure flow.
// 2. Add 2 supported datasource and 1 not supported datasource with a fixed name to search.
});
it("Bug 9334: The Select widget value is sent as null when user switches between the pages", () => {
cy.NavigateToHome();
cy.get(homePage.createNew)
.first()
.click({ force: true });
cy.wait("@createNewApplication").should(
"have.nested.property",
"response.body.responseMeta.status",
201,
);
cy.NavigateToDatasourceEditor();
cy.get(datasource.PostgreSQL).click({ force: true });
cy.fillPostgresDatasourceForm();
cy.generateUUID().then((UUID) => {
datasourceName = `PostgresSQL NewPage ${UUID}`;
cy.renameDatasource(datasourceName);
cy.wrap(datasourceName).as("dSName");
});
cy.testSaveDatasource();
//Create Dummy Page2 :
cy.get(pages.AddPage)
.first()
.click();
cy.wait("@createPage").should(
"have.nested.property",
"response.body.responseMeta.status",
201,
);
//Create CRUD page-Page3
cy.get(pages.AddPage)
.first()
.click();
cy.wait("@createPage").should(
"have.nested.property",
"response.body.responseMeta.status",
201,
);
cy.get("@dSName").then((dbName) => {
cy.get(generatePage.generateCRUDPageActionCard).click();
cy.get(generatePage.selectDatasourceDropdown).click();
cy.get(generatePage.datasourceDropdownOption)
.contains(dbName)
.click();
});
cy.wait("@getDatasourceStructure").should(
"have.nested.property",
"response.body.responseMeta.status",
200,
);
cy.get(generatePage.selectTableDropdown).click();
cy.get(generatePage.dropdownOption)
.first()
.click();
// skip optional search column selection.
cy.get(generatePage.generatePageFormSubmitBtn).click();
cy.wait("@replaceLayoutWithCRUDPage").should(
"have.nested.property",
"response.body.responseMeta.status",
201,
);
cy.wait("@getActions");
cy.wait("@postExecute").should(
"have.nested.property",
"response.body.responseMeta.status",
200,
);
cy.get("span:contains('GOT IT')").click();
//Create CRUD page-Page4
cy.get(pages.AddPage)
.first()
.click();
cy.wait("@createPage").should(
"have.nested.property",
"response.body.responseMeta.status",
201,
);
cy.get("@dSName").then((dbName) => {
cy.get(generatePage.generateCRUDPageActionCard).click();
cy.get(generatePage.selectDatasourceDropdown).click();
cy.get(generatePage.datasourceDropdownOption)
.contains(dbName)
.click();
});
cy.wait("@getDatasourceStructure").should(
"have.nested.property",
"response.body.responseMeta.status",
200,
);
cy.get(generatePage.selectTableDropdown).click();
cy.get(generatePage.dropdownOption)
.first()
.click();
// skip optional search column selection.
cy.get(generatePage.generatePageFormSubmitBtn).click();
cy.wait("@replaceLayoutWithCRUDPage").should(
"have.nested.property",
"response.body.responseMeta.status",
201,
);
cy.wait("@getActions");
cy.wait("@postExecute").should(
"have.nested.property",
"response.body.responseMeta.status",
200,
);
cy.get("span:contains('GOT IT')").click();
//Navigating between CRUD (Page3) & EmptyPage (Page2):
cy.selectEntityByName("Page2");
cy.wait(2000);
cy.selectEntityByName("Page3");
cy.VerifyErrorMsgAbsence('The action "SelectQuery" has failed.');
//Navigating between CRUD (Page3) & CRUD (Page4):
cy.selectEntityByName("Page4");
cy.wait(2000);
cy.selectEntityByName("Page3"); //Back to 3
cy.VerifyErrorMsgAbsence('The action "SelectQuery" has failed.');
});
});

View File

@ -89,9 +89,8 @@ Object.entries(widgetsToTest).forEach(([widgetSelector, testConfig], index) => {
if (index === 0) { if (index === 0) {
configureApi(); configureApi();
} }
ee.PinUnpinEntityExplorer(false);
ee.DragDropWidgetNVerify(widgetSelector, 100, 200); ee.DragDropWidgetNVerify(widgetSelector, 100, 200);
ee.DragDropWidgetNVerify(WIDGET.BUTTON, 400, 200); ee.DragDropWidgetNVerify(WIDGET.BUTTON, 400, 200);
//ee.SelectEntityByName(WIDGET.BUTTONNAME("1")); //ee.SelectEntityByName(WIDGET.BUTTONNAME("1"));
// Set onClick action, storing value // Set onClick action, storing value
@ -107,6 +106,7 @@ Object.entries(widgetsToTest).forEach(([widgetSelector, testConfig], index) => {
PROPERTY_SELECTOR.TextFieldName, PROPERTY_SELECTOR.TextFieldName,
`{{appsmith.store.textPayloadOnSubmit}}`, `{{appsmith.store.textPayloadOnSubmit}}`,
); );
ee.PinUnpinEntityExplorer(true);
}); });
it("2. StoreValue should have complete input value", () => { it("2. StoreValue should have complete input value", () => {

View File

@ -15,8 +15,8 @@ describe("Bug #14299 - The data from the query does not show up on the widget",
cy.fixture("/Bugs/14299dsl").then((val: any) => { cy.fixture("/Bugs/14299dsl").then((val: any) => {
agHelper.AddDsl(val); agHelper.AddDsl(val);
}); });
propPane.ChangeColor(13, "Primary"); propPane.ChangeThemeColor(13, "Primary");
propPane.ChangeColor(22, "Background"); propPane.ChangeThemeColor(22, "Background");
}); });
it("1. Create Postgress DS", function() { it("1. Create Postgress DS", function() {

View File

@ -5,10 +5,10 @@ const debuggerLocators = require("../../../../locators/Debugger.json");
describe("Debugger logs", function() { describe("Debugger logs", function() {
before(() => { before(() => {
cy.addDsl(dsl); cy.addDsl(dsl);
cy.wait(5000);
}); });
it("Modifying widget properties should log the same", function() { it("Modifying widget properties should log the same", function() {
cy.wait(5000);
cy.get("button") cy.get("button")
.contains("Submit") .contains("Submit")
.click({ force: true }); .click({ force: true });
@ -30,11 +30,11 @@ describe("Debugger logs", function() {
}); });
}); });
it("Api headers need to be shown as headers in logs", function() { // it("Api headers need to be shown as headers in logs", function() {
// TODO // // TODO
}); // });
it("Api body needs to be shown as JSON when possible", function() { // it("Api body needs to be shown as JSON when possible", function() {
// TODO // // TODO
}); // });
}); });

View File

@ -99,11 +99,11 @@ describe("Theme validation usecase for multi-select widget", function () {
//Color //Color
cy.wait(1000); cy.wait(1000);
propPane.ChangeColor("purple", "Primary"); propPane.ChangeThemeColor("purple", "Primary");
cy.get(themelocator.inputColor).should("have.value", "purple"); cy.get(themelocator.inputColor).should("have.value", "purple");
cy.wait(1000); cy.wait(1000);
propPane.ChangeColor("brown", "Background"); propPane.ChangeThemeColor("brown", "Background");
cy.get(themelocator.inputColor).should("have.value", "brown"); cy.get(themelocator.inputColor).should("have.value", "brown");
cy.wait(1000); cy.wait(1000);
cy.contains("Color").click({ force: true }); cy.contains("Color").click({ force: true });

View File

@ -104,21 +104,17 @@ describe("Binding the list widget with text widget", function() {
it("4. Validate delete widget action from side bar", function() { it("4. Validate delete widget action from side bar", function() {
cy.openPropertyPane("listwidget"); cy.openPropertyPane("listwidget");
cy.verifyUpdatedWidgetName("Test"); cy.verifyUpdatedWidgetName("Test");
cy.get(commonlocators.editWidgetName) cy.verifyUpdatedWidgetName("#$%1234", "___1234");
.click({ force: true }) cy.verifyUpdatedWidgetName("56789");
.type("#$%1234", { delay: 300 })
.type("{enter}");
cy.wait(500);
cy.get(".t--widget-name").contains("___1234");
cy.verifyUpdatedWidgetName("12345");
cy.get(".t--delete-widget").click({ force: true }); cy.get(".t--delete-widget").click({ force: true });
cy.get(".t--toast-action span") cy.get(".t--toast-action span")
.eq(0) .eq(0)
.contains("12345 is removed"); .contains("56789 is removed");
cy.wait("@updateLayout").should( cy.wait("@updateLayout").should(
"have.nested.property", "have.nested.property",
"response.body.responseMeta.status", "response.body.responseMeta.status",
200, 200,
); );
cy.wait(2000);
}); });
}); });

View File

@ -223,7 +223,7 @@ describe("Validate MySQL Generate CRUD with JSON Form", () => {
); );
propPane.NavigateBackToPropertyPane(); propPane.NavigateBackToPropertyPane();
deployMode.DeployApp(); deployMode.DeployApp();
table.SelectTableRow(0); //to make JSON form hidden table.SelectTableRow(0, 0, false); //to make JSON form hidden
agHelper.AssertElementAbsence(locator._jsonFormWidget); agHelper.AssertElementAbsence(locator._jsonFormWidget);
table.SelectTableRow(3); table.SelectTableRow(3);
agHelper.AssertElementVisible(locator._jsonFormWidget); agHelper.AssertElementVisible(locator._jsonFormWidget);
@ -328,7 +328,7 @@ describe("Validate MySQL Generate CRUD with JSON Form", () => {
updatingStoreJSONPropertyFileds(); updatingStoreJSONPropertyFileds();
deployMode.DeployApp(); deployMode.DeployApp();
table.SelectTableRow(0); //to make JSON form hidden table.SelectTableRow(0, 0, false); //to make JSON form hidden
agHelper.AssertElementAbsence(locator._jsonFormWidget); agHelper.AssertElementAbsence(locator._jsonFormWidget);
table.SelectTableRow(3); table.SelectTableRow(3);
agHelper.AssertElementVisible(locator._jsonFormWidget); agHelper.AssertElementVisible(locator._jsonFormWidget);

View File

@ -263,7 +263,7 @@ describe("Validate Postgres Generate CRUD with JSON Form", () => {
it("8. Verify Update data from Deploy page - on Vessels - existing record", () => { it("8. Verify Update data from Deploy page - on Vessels - existing record", () => {
deployMode.DeployApp(); deployMode.DeployApp();
agHelper.Sleep(2000); agHelper.Sleep(2000);
table.SelectTableRow(0); //to make JSON form hidden table.SelectTableRow(0, 0, false); //to make JSON form hidden
agHelper.Sleep(2000); //Sleep time for tab to disappear! agHelper.Sleep(2000); //Sleep time for tab to disappear!
agHelper.AssertElementAbsence(locator._jsonFormWidget); agHelper.AssertElementAbsence(locator._jsonFormWidget);
table.SelectTableRow(5); table.SelectTableRow(5);
@ -512,7 +512,7 @@ describe("Validate Postgres Generate CRUD with JSON Form", () => {
agHelper.Sleep(2000); agHelper.Sleep(2000);
//Removing Default values & setting placeholder! //Removing Default values & setting placeholder!
propPane.UpdateJSONFormWithPlaceholders(); //propPane.UpdateJSONFormWithPlaceholders();//Since cypress is hanging here sometimes in local run also commenting
//Updating JSON field properties similar to Update JSON! //Updating JSON field properties similar to Update JSON!
updatingVesselsJSONPropertyFileds(); updatingVesselsJSONPropertyFileds();
@ -528,6 +528,7 @@ describe("Validate Postgres Generate CRUD with JSON Form", () => {
agHelper.AssertElementVisible(locator._visibleTextDiv("Insert Row")); agHelper.AssertElementVisible(locator._visibleTextDiv("Insert Row"));
//Checking Required field validations //Checking Required field validations
deployMode.ClearJSONFieldValue("Shipname", 1);
cy.xpath(locator._spanButton("Submit") + "/parent::div").should( cy.xpath(locator._spanButton("Submit") + "/parent::div").should(
"have.attr", "have.attr",
"disabled", "disabled",
@ -539,6 +540,7 @@ describe("Validate Postgres Generate CRUD with JSON Form", () => {
); );
//Checking Primary Key validation error toast //Checking Primary Key validation error toast
deployMode.ClearJSONFieldValue("Ship Id");
agHelper.ClickButton("Submit"); agHelper.ClickButton("Submit");
agHelper.ValidateToastMessage( agHelper.ValidateToastMessage(
`null value in column "ship_id" violates not-null constraint`, `null value in column "ship_id" violates not-null constraint`,
@ -547,16 +549,21 @@ describe("Validate Postgres Generate CRUD with JSON Form", () => {
}); });
it("16. Verify Add/Insert from Deploy page - on Vessels - new record", () => { it("16. Verify Add/Insert from Deploy page - on Vessels - new record", () => {
deployMode.ClearJSONFieldValue("Callsign", 1);
deployMode.EnterJSONInputValue("Callsign", "9HUQ9", 1); deployMode.EnterJSONInputValue("Callsign", "9HUQ9", 1);
deployMode.ClearJSONFieldValue("Country", 1);
deployMode.EnterJSONInputValue("Country", "Malta", 1); deployMode.EnterJSONInputValue("Country", "Malta", 1);
deployMode.ClearJSONFieldValue("Next Port Name", 1);
deployMode.EnterJSONInputValue("Next Port Name", "CORFU", 1); deployMode.EnterJSONInputValue("Next Port Name", "CORFU", 1);
deployMode.ClearJSONFieldValue("Destination", 1);
deployMode.EnterJSONInputValue("Destination", "CORFU", 1); deployMode.EnterJSONInputValue("Destination", "CORFU", 1);
deployMode.SelectJsonFormDropDown("Special Craft", 1); deployMode.SelectJsonFormDropDown("Special Craft", 1);
deployMode.ClearJSONFieldValue("Timezone", 1);
deployMode.EnterJSONInputValue("Timezone", "-12", 1); deployMode.EnterJSONInputValue("Timezone", "-12", 1);
agHelper.AssertElementVisible( agHelper.AssertElementVisible(
locator._visibleTextDiv("Not a valid timezone!"), locator._visibleTextDiv("Not a valid timezone!"),
@ -564,12 +571,16 @@ describe("Validate Postgres Generate CRUD with JSON Form", () => {
deployMode.ClearJSONFieldValue("Timezone", 1); deployMode.ClearJSONFieldValue("Timezone", 1);
deployMode.EnterJSONInputValue("Timezone", "-2", 1); deployMode.EnterJSONInputValue("Timezone", "-2", 1);
deployMode.ClearJSONFieldValue("Status Name", 1);
deployMode.EnterJSONInputValue("Status Name", "Moored", 1); deployMode.EnterJSONInputValue("Status Name", "Moored", 1);
deployMode.ClearJSONFieldValue("Year Built", 1);
deployMode.EnterJSONInputValue("Year Built", "1967", 1); deployMode.EnterJSONInputValue("Year Built", "1967", 1);
deployMode.ClearJSONFieldValue("Area Code", 1);
deployMode.EnterJSONInputValue("Area Code", "USG - Gulf of Mexico", 1); deployMode.EnterJSONInputValue("Area Code", "USG - Gulf of Mexico", 1);
deployMode.ClearJSONFieldValue("Speed", 1);
deployMode.EnterJSONInputValue("Speed", "0.6", 1); deployMode.EnterJSONInputValue("Speed", "0.6", 1);
agHelper.GetNClick( agHelper.GetNClick(
@ -578,8 +589,10 @@ describe("Validate Postgres Generate CRUD with JSON Form", () => {
); );
agHelper.GetNClick(locator._datePicker(2)); agHelper.GetNClick(locator._datePicker(2));
deployMode.ClearJSONFieldValue("Distance To Go", 1);
deployMode.EnterJSONInputValue("Distance To Go", "18.1", 1); deployMode.EnterJSONInputValue("Distance To Go", "18.1", 1);
deployMode.ClearJSONFieldValue("Current Port", 1);
deployMode.EnterJSONInputValue("Current Port", "GALVESTON", 1); deployMode.EnterJSONInputValue("Current Port", "GALVESTON", 1);
cy.xpath(deployMode._jsonFormFieldByName("Callsign", true)) cy.xpath(deployMode._jsonFormFieldByName("Callsign", true))
@ -617,6 +630,7 @@ describe("Validate Postgres Generate CRUD with JSON Form", () => {
it("17. Verify Update fields/Delete from Deploy page - on Vessels - newly inserted record", () => { it("17. Verify Update fields/Delete from Deploy page - on Vessels - newly inserted record", () => {
table.SelectTableRow(0); table.SelectTableRow(0);
agHelper.Sleep(2000);//since table taking time to display JSON form
//validating update happened fine! //validating update happened fine!
dataSources.AssertJSONFormHeader(0, 0, "ship_id", "159180"); //Validaing new record got inserted in 1st position due to id used dataSources.AssertJSONFormHeader(0, 0, "ship_id", "159180"); //Validaing new record got inserted in 1st position due to id used
@ -715,7 +729,7 @@ describe("Validate Postgres Generate CRUD with JSON Form", () => {
//Validating loaded table //Validating loaded table
agHelper.AssertElementExist(dataSources._selectedRow); agHelper.AssertElementExist(dataSources._selectedRow);
table.ReadTableRowColumnData(0, 1, 2000).then(($cellData) => { table.ReadTableRowColumnData(0, 1, 4000).then(($cellData) => {
expect($cellData).to.eq(col1Text); expect($cellData).to.eq(col1Text);
}); });
table.ReadTableRowColumnData(0, 3, 200).then(($cellData) => { table.ReadTableRowColumnData(0, 3, 200).then(($cellData) => {
@ -764,8 +778,7 @@ describe("Validate Postgres Generate CRUD with JSON Form", () => {
) { ) {
agHelper.ClickButton("Update"); //Update does not work, Bug 14063 agHelper.ClickButton("Update"); //Update does not work, Bug 14063
agHelper.AssertElementAbsence(locator._toastMsg); //Validating fix for Bug 14063 - for common table columns agHelper.AssertElementAbsence(locator._toastMsg); //Validating fix for Bug 14063 - for common table columns
agHelper.Sleep(2000); //for update to reflect! agHelper.AssertElementAbsence(locator._spinner, 10000);//10 secs for update to reflect!
// agHelper.WaitUntilEleDisappear(locator._spinner);
agHelper.ValidateNetworkStatus("@postExecute", 200); agHelper.ValidateNetworkStatus("@postExecute", 200);
agHelper.ValidateNetworkStatus("@postExecute", 200); agHelper.ValidateNetworkStatus("@postExecute", 200);
table.AssertSelectedRow(rowIndex); //Validate Primary key column selection table.AssertSelectedRow(rowIndex); //Validate Primary key column selection

View File

@ -230,7 +230,6 @@ describe("JS Function Execution", function() {
completeReplace: true, completeReplace: true,
toRun: true, toRun: true,
shouldCreateNewJSObj: true, shouldCreateNewJSObj: true,
prettify: false,
}); });
// Assert that there is a function execution parse error // Assert that there is a function execution parse error
@ -246,7 +245,7 @@ describe("JS Function Execution", function() {
); );
// Fix parse error and assert that debugger error is removed // Fix parse error and assert that debugger error is removed
jsEditor.EditJSObj(JS_OBJECT_WITHOUT_PARSE_ERROR, false); jsEditor.EditJSObj(JS_OBJECT_WITHOUT_PARSE_ERROR, true);
agHelper.GetNClick(jsEditor._runButton); agHelper.GetNClick(jsEditor._runButton);
agHelper.AssertContains("ran successfully"); //to not hinder with next toast msg in next case! agHelper.AssertContains("ran successfully"); //to not hinder with next toast msg in next case!
jsEditor.AssertParseError(false, true); jsEditor.AssertParseError(false, true);
@ -265,7 +264,7 @@ describe("JS Function Execution", function() {
jsEditor.AssertParseError(true, true); jsEditor.AssertParseError(true, true);
// Delete function // Delete function
jsEditor.EditJSObj(JS_OBJECT_WITH_DELETED_FUNCTION, false); jsEditor.EditJSObj(JS_OBJECT_WITH_DELETED_FUNCTION, true);
// Assert that parse error is removed from debugger when function is deleted // Assert that parse error is removed from debugger when function is deleted
agHelper.GetNClick(locator._errorTab); agHelper.GetNClick(locator._errorTab);
agHelper.AssertContains( agHelper.AssertContains(
@ -316,6 +315,7 @@ describe("JS Function Execution", function() {
expect($cellData).to.eq("1"); //validating id column value - row 0 expect($cellData).to.eq("1"); //validating id column value - row 0
deployMode.NavigateBacktoEditor(); deployMode.NavigateBacktoEditor();
}); });
ee.SelectEntityByName("JSObject1", "QUERIES/JS");
ee.ActionContextMenuByEntityName( ee.ActionContextMenuByEntityName(
"JSObject1", "JSObject1",
"Delete", "Delete",

View File

@ -535,10 +535,10 @@ describe("JSObjects OnLoad Actions tests", function() {
agHelper.ValidateToastMessage('The action "getBooks" has failed'); agHelper.ValidateToastMessage('The action "getBooks" has failed');
agHelper agHelper
.GetText(locator._jsonFormInputField("name"), "val") .GetText(locator._jsonFormInputField("name"), "val")
.then(($name) => expect($name).be.empty); .should("be.empty");
agHelper agHelper
.GetText(locator._jsonFormInputField("url"), "val") .GetText(locator._jsonFormInputField("url"), "val")
.then(($url) => expect($url).be.empty); .should("be.empty");
// Uncomment below aft Bug 13826 is fixed & add for Yes also! // Uncomment below aft Bug 13826 is fixed & add for Yes also!
// agHelper.SelectDropDown("Akron"); // agHelper.SelectDropDown("Akron");
@ -549,14 +549,15 @@ describe("JSObjects OnLoad Actions tests", function() {
agHelper.GetNClick(locator._widgetInDeployed("imagewidget")); agHelper.GetNClick(locator._widgetInDeployed("imagewidget"));
agHelper.AssertElementVisible(jsEditor._dialogBody("getBooks")); agHelper.AssertElementVisible(jsEditor._dialogBody("getBooks"));
agHelper.ClickButton("Yes"); agHelper.ClickButton("Yes");
agHelper.Sleep(4000);
//callBooks, getId confirmations also expected aft bug 13646 is fixed & covering tc 1646 //callBooks, getId confirmations also expected aft bug 13646 is fixed & covering tc 1646
agHelper agHelper
.GetText(locator._jsonFormInputField("name"), "val") .GetText(locator._jsonFormInputField("name"), "val")
.then(($name) => cy.wrap($name).should("not.be.empty")); .should("not.be.empty");
agHelper agHelper
.GetText(locator._jsonFormInputField("url"), "val") .GetText(locator._jsonFormInputField("url"), "val")
.then(($url) => expect($url).not.be.empty); .should("not.be.empty");
// //.then(($url) => expect($url).not.be.empty);//failing at time as its not waiting for timeout!
deployMode.NavigateBacktoEditor(); deployMode.NavigateBacktoEditor();
agHelper.AssertElementVisible(jsEditor._dialogBody("getBooks")); agHelper.AssertElementVisible(jsEditor._dialogBody("getBooks"));

View File

@ -22,8 +22,8 @@ describe("Array Datatype tests", function() {
agHelper.AddDsl(val); agHelper.AddDsl(val);
}); });
ee.NavigateToSwitcher("widgets"); ee.NavigateToSwitcher("widgets");
propPane.ChangeColor(-31, "Primary"); propPane.ChangeThemeColor(-31, "Primary");
propPane.ChangeColor(-27, "Background"); propPane.ChangeThemeColor(-27, "Background");
}); });
it("1. Creating table query - arraytypes", () => { it("1. Creating table query - arraytypes", () => {

View File

@ -22,8 +22,8 @@ describe("Binary Datatype tests", function() {
agHelper.AddDsl(val); agHelper.AddDsl(val);
}); });
ee.NavigateToSwitcher("widgets"); ee.NavigateToSwitcher("widgets");
propPane.ChangeColor(24, "Primary"); propPane.ChangeThemeColor(24, "Primary");
propPane.ChangeColor(-37, "Background"); propPane.ChangeThemeColor(-37, "Background");
}); });
it("1. Creating table query - binarytype", () => { it("1. Creating table query - binarytype", () => {

View File

@ -14,8 +14,8 @@ describe("Boolean & Enum Datatype tests", function() {
cy.fixture("Datatypes/BooleanEnumDTdsl").then((val: any) => { cy.fixture("Datatypes/BooleanEnumDTdsl").then((val: any) => {
agHelper.AddDsl(val); agHelper.AddDsl(val);
}); });
propPane.ChangeColor(-18, "Primary"); propPane.ChangeThemeColor(-18, "Primary");
propPane.ChangeColor(-20, "Background"); propPane.ChangeThemeColor(-20, "Background");
}); });
it("1. Create Postgress DS", function() { it("1. Create Postgress DS", function() {

View File

@ -14,8 +14,8 @@ describe("DateTime Datatype tests", function() {
cy.fixture("Datatypes/DateTimeDTdsl").then((val: any) => { cy.fixture("Datatypes/DateTimeDTdsl").then((val: any) => {
agHelper.AddDsl(val); agHelper.AddDsl(val);
}); });
propPane.ChangeColor(22, "Primary"); propPane.ChangeThemeColor(22, "Primary");
propPane.ChangeColor(32, "Background"); propPane.ChangeThemeColor(32, "Background");
}); });
it("1. Create Postgress DS", function() { it("1. Create Postgress DS", function() {
@ -153,7 +153,7 @@ describe("DateTime Datatype tests", function() {
table.ReadTableRowColumnData(0, 6, 200).then(($cellData) => { table.ReadTableRowColumnData(0, 6, 200).then(($cellData) => {
expect($cellData).to.eq("6 years 5 mons 4 days 3 hours 2 mins 1.0 secs"); //Interval format! expect($cellData).to.eq("6 years 5 mons 4 days 3 hours 2 mins 1.0 secs"); //Interval format!
}); });
table.ReadTableRowColumnData(0, 7, 200).then(($cellData) => { table.ReadTableRowColumnData(0, 7).then(($cellData) => {
expect($cellData).to.eq("19.01.1989"); expect($cellData).to.eq("19.01.1989");
}); });
agHelper agHelper

View File

@ -24,8 +24,8 @@ describe("Json & JsonB Datatype tests", function() {
agHelper.AddDsl(val); agHelper.AddDsl(val);
}); });
ee.NavigateToSwitcher("widgets"); ee.NavigateToSwitcher("widgets");
propPane.ChangeColor(33, "Primary"); propPane.ChangeThemeColor(33, "Primary");
propPane.ChangeColor(39, "Background"); propPane.ChangeThemeColor(39, "Background");
}); });
it("1. Creating table query - jsonbooks", () => { it("1. Creating table query - jsonbooks", () => {
@ -349,8 +349,8 @@ describe("Json & JsonB Datatype tests", function() {
agHelper.AddDsl(val); agHelper.AddDsl(val);
}); });
ee.NavigateToSwitcher("widgets"); ee.NavigateToSwitcher("widgets");
propPane.ChangeColor(12, "Primary"); propPane.ChangeThemeColor(12, "Primary");
propPane.ChangeColor(23, "Background"); propPane.ChangeThemeColor(23, "Background");
}); });
it("15. Creating enum & table queries - jsonBbooks", () => { it("15. Creating enum & table queries - jsonBbooks", () => {

View File

@ -26,7 +26,7 @@ export class CommonLocators {
_backToEditor = ".t--back-to-editor" _backToEditor = ".t--back-to-editor"
_newPage = ".pages .t--entity-add-btn" _newPage = ".pages .t--entity-add-btn"
_toastMsg = "div.t--toast-action" _toastMsg = "div.t--toast-action"
_toastConatiner = "div.Toastify__toast-container" _toastContainer = "div.Toastify__toast-container"
_specificToast = (toastText: string) => this._toastMsg + ":contains('" + toastText + "')" _specificToast = (toastText: string) => this._toastMsg + ":contains('" + toastText + "')"
//_specificToast = (toastText: string | RegExp) => this._toastMsg + ":contains("+ (typeof toastText == 'string' ? "'"+ toastText+"'" : toastText)+ ")"//not working! //_specificToast = (toastText: string | RegExp) => this._toastMsg + ":contains("+ (typeof toastText == 'string' ? "'"+ toastText+"'" : toastText)+ ")"//not working!
_empty = "span[name='no-response']" _empty = "span[name='no-response']"
@ -87,5 +87,4 @@ export class CommonLocators {
_deployedPage = `.t--page-switch-tab` _deployedPage = `.t--page-switch-tab`
_hints = "ul.CodeMirror-hints li" _hints = "ul.CodeMirror-hints li"
_cancelActionExecution = ".t--cancel-action-button" _cancelActionExecution = ".t--cancel-action-button"
} }

View File

@ -138,11 +138,11 @@ export class AggregateHelper {
textPresence: "have.text" | "contain.text" | "not.have.text" = "have.text", textPresence: "have.text" | "contain.text" | "not.have.text" = "have.text",
index = 0, index = 0,
) { ) {
const locator = selector.startsWith("//") if (index >= 0)
? cy.xpath(selector) this.GetElement(selector)
: cy.get(selector); .eq(index)
if (index >= 0) locator.eq(index).should(textPresence, text); .should(textPresence, text);
else locator.should(textPresence, text); else this.GetElement(selector).should(textPresence, text);
} }
public ValidateToastMessage(text: string, index = 0, length = 1) { public ValidateToastMessage(text: string, index = 0, length = 1) {
@ -204,7 +204,7 @@ export class AggregateHelper {
} }
public WaitUntilAllToastsDisappear() { public WaitUntilAllToastsDisappear() {
cy.get(this.locator._toastConatiner).waitUntil( cy.get(this.locator._toastContainer).waitUntil(
($ele) => ($ele) =>
cy cy
.wrap($ele) .wrap($ele)
@ -344,15 +344,17 @@ export class AggregateHelper {
options.forEach(($each) => { options.forEach(($each) => {
cy.get(this.locator._multiSelectOptions($each)) cy.get(this.locator._multiSelectOptions($each))
.check({ force: true }) .check({ force: true })
.wait(1000) .wait(1000);
.should("be.checked"); cy.get(this.locator._multiSelectOptions($each)).should("be.checked");
}); });
} else { } else {
options.forEach(($each) => { options.forEach(($each) => {
cy.get(this.locator._multiSelectOptions($each)) cy.get(this.locator._multiSelectOptions($each))
.uncheck({ force: true }) .uncheck({ force: true })
.wait(1000) .wait(1000);
.should("not.be.checked"); cy.get(this.locator._multiSelectOptions($each)).should(
"not.be.checked",
);
}); });
} }
@ -784,9 +786,9 @@ export class AggregateHelper {
}); });
} }
public AssertElementAbsence(selector: ElementType) { public AssertElementAbsence(selector: ElementType, timeout = 0) {
//Should not exists - cannot take indexes //Should not exists - cannot take indexes
return this.GetElement(selector, 0).should("not.exist"); return this.GetElement(selector, timeout).should("not.exist");
} }
public GetText( public GetText(
@ -799,6 +801,18 @@ export class AggregateHelper {
.invoke(textOrValue); .invoke(textOrValue);
} }
public AssertText(
selector: ElementType,
textOrValue: "text" | "val" = "text",
expectedData: string,
index = 0,
) {
this.GetElement(selector)
.eq(index)
.invoke(textOrValue)
.should("deep.equal", expectedData);
}
public AssertElementVisible(selector: ElementType, index = 0) { public AssertElementVisible(selector: ElementType, index = 0) {
return this.GetElement(selector) return this.GetElement(selector)
.eq(index) .eq(index)

View File

@ -50,6 +50,8 @@ export class EntityExplorer {
"//span[text()='" + spanText + " Query']"; "//span[text()='" + spanText + " Query']";
_createNewPopup = ".bp3-overlay-content"; _createNewPopup = ".bp3-overlay-content";
_entityExplorerWrapper = ".t--entity-explorer-wrapper"; _entityExplorerWrapper = ".t--entity-explorer-wrapper";
_pinEntityExplorer = ".t--pin-entity-explorer";
_entityExplorer = ".t--entity-explorer";
public SelectEntityByName( public SelectEntityByName(
entityNameinLeftSidebar: string, entityNameinLeftSidebar: string,
@ -184,4 +186,17 @@ export class EntityExplorer {
cy.get("body").type(`{${this.modifierKey}}{c}`); cy.get("body").type(`{${this.modifierKey}}{c}`);
cy.get("body").type(`{${this.modifierKey}}{v}`); cy.get("body").type(`{${this.modifierKey}}{v}`);
} }
public PinUnpinEntityExplorer(pin = true) {
this.agHelper
.GetElement(this._entityExplorer)
.invoke("attr", "class")
.then(($classes) => {
if (pin && !$classes?.includes("fixed"))
this.agHelper.GetNClick(this._pinEntityExplorer, 0, false, 1000);
else if (!pin && $classes?.includes("fixed"))
this.agHelper.GetNClick(this._pinEntityExplorer, 0, false, 1000);
else this.agHelper.Sleep(200); //do nothing
});
}
} }

View File

@ -7,8 +7,8 @@ export class FakerHelper {
return faker.image.cats(); return faker.image.cats();
} }
public GetRandomText(textLength = 10) { public GetRandomText(textLength = 10, casing : "upper" | "lower" | "mixed" = "mixed") {
return faker.random.alphaNumeric(textLength, { casing: "upper" }); return faker.random.alphaNumeric(textLength, { casing: casing });
} }
public GetUSPhoneNumber() { public GetUSPhoneNumber() {

View File

@ -81,7 +81,7 @@ export class PropertyPane {
this.agHelper.AssertContains("Theme " + newTheme + " Applied"); this.agHelper.AssertContains("Theme " + newTheme + " Applied");
} }
public ChangeColor( public ChangeThemeColor(
colorIndex: number | string, colorIndex: number | string,
type: "Primary" | "Background" = "Primary", type: "Primary" | "Background" = "Primary",
) { ) {

View File

@ -48,6 +48,8 @@ export class Table {
`.t--widget-tablewidget .tbody .td[data-rowindex=${rowNum}][data-colindex=${colNum}]`; `.t--widget-tablewidget .tbody .td[data-rowindex=${rowNum}][data-colindex=${colNum}]`;
_tableRowColumnData = (rowNum: number, colNum: number) => _tableRowColumnData = (rowNum: number, colNum: number) =>
this._tableRow(rowNum, colNum) + ` div div`; this._tableRow(rowNum, colNum) + ` div div`;
_tableLoadStateDelete =
this._tableRow(0, 0) + ` div div button span:contains('Delete')`;
_tableRowImageColumnData = (rowNum: number, colNum: number) => _tableRowImageColumnData = (rowNum: number, colNum: number) =>
this._tableRow(rowNum, colNum) + ` div div.image-cell`; this._tableRow(rowNum, colNum) + ` div div.image-cell`;
_tableEmptyColumnData = `.t--widget-tablewidget .tbody .td`; //selected-row _tableEmptyColumnData = `.t--widget-tablewidget .tbody .td`; //selected-row
@ -85,22 +87,16 @@ export class Table {
_filtersCount = this._filterBtn + " span.action-title"; _filtersCount = this._filterBtn + " span.action-title";
public WaitUntilTableLoad(rowIndex = 0, colIndex = 0) { public WaitUntilTableLoad(rowIndex = 0, colIndex = 0) {
cy.waitUntil(() => this.ReadTableRowColumnData(rowIndex, colIndex), { this.agHelper.GetElement(this._tableRowColumnData(rowIndex, colIndex), 30000).waitUntil(
errorMsg: "Table is not populated", ($ele) =>
timeout: 20000, cy
interval: 2000, .wrap($ele)
}).then((cellData) => { .children("button")
expect(cellData).not.empty; .should("have.length", 0)
}); );
// this.ReadTableRowColumnData(rowIndex, colIndex, 2000).waitUntil( //or below will work:
// ($cellData) => expect($cellData).not.empty, //this.agHelper.AssertElementAbsence(this._tableLoadStateDelete, 30000);
// {
// errorMsg: "Table is not populated",
// timeout: 20000,
// interval: 2000,
// },
// );
// this.agHelper.Sleep(500); // this.agHelper.Sleep(500);
} }
@ -133,14 +129,9 @@ export class Table {
) { ) {
//timeout can be sent higher values incase of larger tables //timeout can be sent higher values incase of larger tables
this.agHelper.Sleep(timeout); //Settling time for table! this.agHelper.Sleep(timeout); //Settling time for table!
return cy.waitUntil( return this.agHelper
() => this.agHelper.GetElement(this._tableRowColumnData(rowNum, colNum), 30000), .GetElement(this._tableRowColumnData(rowNum, colNum), 30000)
{ .invoke("text");
errorMsg: "Table is not populated",
timeout: 30000,
interval: 2000,
},
).then($cellVal => cy.wrap($cellVal).invoke("text"));
} }
public AssertTableRowImageColumnIsLoaded( public AssertTableRowImageColumnIsLoaded(
@ -233,11 +224,24 @@ export class Table {
}); });
} }
public SelectTableRow(rowIndex: number, columnIndex = 0) { public SelectTableRow(rowIndex: number, columnIndex = 0, select = true) {
//rowIndex - 0 for 1st row //rowIndex - 0 for 1st row
cy.get(this._tableRow(rowIndex, columnIndex)) this.agHelper
.first() .GetElement(this._tableRow(rowIndex, columnIndex))
.trigger("click", { force: true }); .parent("div")
.invoke("attr", "class")
.then(($classes: any) => {
if (
(select && !$classes?.includes("selected-row")) ||
(!select && $classes?.includes("selected-row"))
)
this.agHelper.GetNClick(
this._tableRow(rowIndex, columnIndex),
0,
true,
);
});
this.agHelper.Sleep(); //for select to reflect this.agHelper.Sleep(); //for select to reflect
} }
@ -253,7 +257,7 @@ export class Table {
public RemoveSearchTextNVerify(cellDataAfterSearchRemoved: string) { public RemoveSearchTextNVerify(cellDataAfterSearchRemoved: string) {
this.agHelper.GetNClick(this._searchBoxCross); this.agHelper.GetNClick(this._searchBoxCross);
this.ReadTableRowColumnData(0, 0).then((aftSearchRemoved) => { this.ReadTableRowColumnData(0, 0).then((aftSearchRemoved: any) => {
expect(aftSearchRemoved).to.eq(cellDataAfterSearchRemoved); expect(aftSearchRemoved).to.eq(cellDataAfterSearchRemoved);
}); });
} }
@ -300,7 +304,7 @@ export class Table {
else this.agHelper.GetNClick(this._clearAllFilter); else this.agHelper.GetNClick(this._clearAllFilter);
if (toClose) this.CloseFilter(); if (toClose) this.CloseFilter();
this.ReadTableRowColumnData(0, 0).then((aftFilterRemoved) => { this.ReadTableRowColumnData(0, 0).then((aftFilterRemoved: any) => {
expect(aftFilterRemoved).to.eq(cellDataAfterFilterRemoved); expect(aftFilterRemoved).to.eq(cellDataAfterFilterRemoved);
}); });
} }

View File

@ -240,13 +240,15 @@ Cypress.Commands.add("widgetText", (text, inputcss, innercss) => {
cy.contains(innercss, text); cy.contains(innercss, text);
}); });
Cypress.Commands.add("verifyUpdatedWidgetName", (text) => { Cypress.Commands.add("verifyUpdatedWidgetName", (text, txtToVerify) => {
cy.get(commonlocators.editWidgetName) cy.get(commonlocators.editWidgetName)
.click({ force: true }) .click({ force: true })
.type(text, { delay: 300 }) .type(text)
.type("{enter}"); .type("{enter}");
cy.wait(500); cy.assertPageSave();
cy.get(".t--widget-name").contains(text); if (!txtToVerify) cy.get(".editable-text-container").contains(text);
else cy.get(".editable-text-container").contains(txtToVerify);
cy.wait(2000); //for widget name to reflect!
}); });
Cypress.Commands.add("verifyWidgetText", (text, inputcss, innercss) => { Cypress.Commands.add("verifyWidgetText", (text, inputcss, innercss) => {