test: Script updates for flaky tests (#16355)
This commit is contained in:
parent
b0e7c2e60d
commit
4bf0827763
|
|
@ -246,12 +246,12 @@ describe("AForce - Community Issues page validations", function() {
|
|||
|
||||
//Two filters - AND
|
||||
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");
|
||||
});
|
||||
|
||||
table.OpenNFilterTable("Title", "contains", "button", "AND", 1);
|
||||
table.ReadTableRowColumnData(0, 1).then(($cellData) => {
|
||||
table.ReadTableRowColumnData(0, 1, 3000).then(($cellData) => {
|
||||
expect($cellData).to.eq(
|
||||
"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.WaitUntilTableLoad();
|
||||
|
||||
table.ReadTableRowColumnData(0, 0, 1000).then((cellData) => {
|
||||
table.ReadTableRowColumnData(0, 0, 4000).then((cellData) => {
|
||||
expect(cellData).to.be.equal("Suggestion");
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -68,15 +68,15 @@ describe("Validate basic binding of Input widget to Input widget", () => {
|
|||
expect($selectedValue).to.eq("#1");
|
||||
});
|
||||
|
||||
table.SelectTableRow(2); //Deselecting here!
|
||||
table.SelectTableRow(2, 0, false); //Deselecting here!
|
||||
agHelper.ReadSelectedDropDownValue().then(($selectedValue) => {
|
||||
expect($selectedValue).to.eq("Select option");
|
||||
});
|
||||
});
|
||||
|
||||
it("3. Verify Selecting the already selected row deselects it", () => {
|
||||
table.SelectTableRow(0);
|
||||
table.SelectTableRow(0);
|
||||
table.SelectTableRow(0);//select here
|
||||
table.SelectTableRow(0, 0, false);//deselect here
|
||||
agHelper.ReadSelectedDropDownValue().then(($selectedValue) => {
|
||||
expect($selectedValue).to.eq("Select option");
|
||||
});
|
||||
|
|
|
|||
|
|
@ -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.'),
|
||||
);
|
||||
});
|
||||
});
|
||||
|
|
@ -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.');
|
||||
});
|
||||
});
|
||||
|
|
@ -89,9 +89,8 @@ Object.entries(widgetsToTest).forEach(([widgetSelector, testConfig], index) => {
|
|||
if (index === 0) {
|
||||
configureApi();
|
||||
}
|
||||
|
||||
ee.PinUnpinEntityExplorer(false);
|
||||
ee.DragDropWidgetNVerify(widgetSelector, 100, 200);
|
||||
|
||||
ee.DragDropWidgetNVerify(WIDGET.BUTTON, 400, 200);
|
||||
//ee.SelectEntityByName(WIDGET.BUTTONNAME("1"));
|
||||
// Set onClick action, storing value
|
||||
|
|
@ -107,6 +106,7 @@ Object.entries(widgetsToTest).forEach(([widgetSelector, testConfig], index) => {
|
|||
PROPERTY_SELECTOR.TextFieldName,
|
||||
`{{appsmith.store.textPayloadOnSubmit}}`,
|
||||
);
|
||||
ee.PinUnpinEntityExplorer(true);
|
||||
});
|
||||
|
||||
it("2. StoreValue should have complete input value", () => {
|
||||
|
|
@ -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) => {
|
||||
agHelper.AddDsl(val);
|
||||
});
|
||||
propPane.ChangeColor(13, "Primary");
|
||||
propPane.ChangeColor(22, "Background");
|
||||
propPane.ChangeThemeColor(13, "Primary");
|
||||
propPane.ChangeThemeColor(22, "Background");
|
||||
});
|
||||
|
||||
it("1. Create Postgress DS", function() {
|
||||
|
|
|
|||
|
|
@ -5,10 +5,10 @@ const debuggerLocators = require("../../../../locators/Debugger.json");
|
|||
describe("Debugger logs", function() {
|
||||
before(() => {
|
||||
cy.addDsl(dsl);
|
||||
cy.wait(5000);
|
||||
});
|
||||
|
||||
it("Modifying widget properties should log the same", function() {
|
||||
cy.wait(5000);
|
||||
cy.get("button")
|
||||
.contains("Submit")
|
||||
.click({ force: true });
|
||||
|
|
@ -30,11 +30,11 @@ describe("Debugger logs", function() {
|
|||
});
|
||||
});
|
||||
|
||||
it("Api headers need to be shown as headers in logs", function() {
|
||||
// TODO
|
||||
});
|
||||
// it("Api headers need to be shown as headers in logs", function() {
|
||||
// // TODO
|
||||
// });
|
||||
|
||||
it("Api body needs to be shown as JSON when possible", function() {
|
||||
// TODO
|
||||
});
|
||||
// it("Api body needs to be shown as JSON when possible", function() {
|
||||
// // TODO
|
||||
// });
|
||||
});
|
||||
|
|
|
|||
|
|
@ -99,11 +99,11 @@ describe("Theme validation usecase for multi-select widget", function () {
|
|||
|
||||
//Color
|
||||
cy.wait(1000);
|
||||
propPane.ChangeColor("purple", "Primary");
|
||||
propPane.ChangeThemeColor("purple", "Primary");
|
||||
cy.get(themelocator.inputColor).should("have.value", "purple");
|
||||
cy.wait(1000);
|
||||
|
||||
propPane.ChangeColor("brown", "Background");
|
||||
propPane.ChangeThemeColor("brown", "Background");
|
||||
cy.get(themelocator.inputColor).should("have.value", "brown");
|
||||
cy.wait(1000);
|
||||
cy.contains("Color").click({ force: true });
|
||||
|
|
|
|||
|
|
@ -104,21 +104,17 @@ describe("Binding the list widget with text widget", function() {
|
|||
it("4. Validate delete widget action from side bar", function() {
|
||||
cy.openPropertyPane("listwidget");
|
||||
cy.verifyUpdatedWidgetName("Test");
|
||||
cy.get(commonlocators.editWidgetName)
|
||||
.click({ force: true })
|
||||
.type("#$%1234", { delay: 300 })
|
||||
.type("{enter}");
|
||||
cy.wait(500);
|
||||
cy.get(".t--widget-name").contains("___1234");
|
||||
cy.verifyUpdatedWidgetName("12345");
|
||||
cy.verifyUpdatedWidgetName("#$%1234", "___1234");
|
||||
cy.verifyUpdatedWidgetName("56789");
|
||||
cy.get(".t--delete-widget").click({ force: true });
|
||||
cy.get(".t--toast-action span")
|
||||
.eq(0)
|
||||
.contains("12345 is removed");
|
||||
.contains("56789 is removed");
|
||||
cy.wait("@updateLayout").should(
|
||||
"have.nested.property",
|
||||
"response.body.responseMeta.status",
|
||||
200,
|
||||
);
|
||||
cy.wait(2000);
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -223,7 +223,7 @@ describe("Validate MySQL Generate CRUD with JSON Form", () => {
|
|||
);
|
||||
propPane.NavigateBackToPropertyPane();
|
||||
deployMode.DeployApp();
|
||||
table.SelectTableRow(0); //to make JSON form hidden
|
||||
table.SelectTableRow(0, 0, false); //to make JSON form hidden
|
||||
agHelper.AssertElementAbsence(locator._jsonFormWidget);
|
||||
table.SelectTableRow(3);
|
||||
agHelper.AssertElementVisible(locator._jsonFormWidget);
|
||||
|
|
@ -328,7 +328,7 @@ describe("Validate MySQL Generate CRUD with JSON Form", () => {
|
|||
|
||||
updatingStoreJSONPropertyFileds();
|
||||
deployMode.DeployApp();
|
||||
table.SelectTableRow(0); //to make JSON form hidden
|
||||
table.SelectTableRow(0, 0, false); //to make JSON form hidden
|
||||
agHelper.AssertElementAbsence(locator._jsonFormWidget);
|
||||
table.SelectTableRow(3);
|
||||
agHelper.AssertElementVisible(locator._jsonFormWidget);
|
||||
|
|
|
|||
|
|
@ -263,7 +263,7 @@ describe("Validate Postgres Generate CRUD with JSON Form", () => {
|
|||
it("8. Verify Update data from Deploy page - on Vessels - existing record", () => {
|
||||
deployMode.DeployApp();
|
||||
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.AssertElementAbsence(locator._jsonFormWidget);
|
||||
table.SelectTableRow(5);
|
||||
|
|
@ -512,7 +512,7 @@ describe("Validate Postgres Generate CRUD with JSON Form", () => {
|
|||
agHelper.Sleep(2000);
|
||||
|
||||
//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!
|
||||
updatingVesselsJSONPropertyFileds();
|
||||
|
|
@ -528,6 +528,7 @@ describe("Validate Postgres Generate CRUD with JSON Form", () => {
|
|||
agHelper.AssertElementVisible(locator._visibleTextDiv("Insert Row"));
|
||||
|
||||
//Checking Required field validations
|
||||
deployMode.ClearJSONFieldValue("Shipname", 1);
|
||||
cy.xpath(locator._spanButton("Submit") + "/parent::div").should(
|
||||
"have.attr",
|
||||
"disabled",
|
||||
|
|
@ -539,6 +540,7 @@ describe("Validate Postgres Generate CRUD with JSON Form", () => {
|
|||
);
|
||||
|
||||
//Checking Primary Key validation error toast
|
||||
deployMode.ClearJSONFieldValue("Ship Id");
|
||||
agHelper.ClickButton("Submit");
|
||||
agHelper.ValidateToastMessage(
|
||||
`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", () => {
|
||||
deployMode.ClearJSONFieldValue("Callsign", 1);
|
||||
deployMode.EnterJSONInputValue("Callsign", "9HUQ9", 1);
|
||||
|
||||
deployMode.ClearJSONFieldValue("Country", 1);
|
||||
deployMode.EnterJSONInputValue("Country", "Malta", 1);
|
||||
|
||||
deployMode.ClearJSONFieldValue("Next Port Name", 1);
|
||||
deployMode.EnterJSONInputValue("Next Port Name", "CORFU", 1);
|
||||
|
||||
deployMode.ClearJSONFieldValue("Destination", 1);
|
||||
deployMode.EnterJSONInputValue("Destination", "CORFU", 1);
|
||||
|
||||
deployMode.SelectJsonFormDropDown("Special Craft", 1);
|
||||
|
||||
deployMode.ClearJSONFieldValue("Timezone", 1);
|
||||
deployMode.EnterJSONInputValue("Timezone", "-12", 1);
|
||||
agHelper.AssertElementVisible(
|
||||
locator._visibleTextDiv("Not a valid timezone!"),
|
||||
|
|
@ -564,12 +571,16 @@ describe("Validate Postgres Generate CRUD with JSON Form", () => {
|
|||
deployMode.ClearJSONFieldValue("Timezone", 1);
|
||||
deployMode.EnterJSONInputValue("Timezone", "-2", 1);
|
||||
|
||||
deployMode.ClearJSONFieldValue("Status Name", 1);
|
||||
deployMode.EnterJSONInputValue("Status Name", "Moored", 1);
|
||||
|
||||
deployMode.ClearJSONFieldValue("Year Built", 1);
|
||||
deployMode.EnterJSONInputValue("Year Built", "1967", 1);
|
||||
|
||||
deployMode.ClearJSONFieldValue("Area Code", 1);
|
||||
deployMode.EnterJSONInputValue("Area Code", "USG - Gulf of Mexico", 1);
|
||||
|
||||
deployMode.ClearJSONFieldValue("Speed", 1);
|
||||
deployMode.EnterJSONInputValue("Speed", "0.6", 1);
|
||||
|
||||
agHelper.GetNClick(
|
||||
|
|
@ -578,8 +589,10 @@ describe("Validate Postgres Generate CRUD with JSON Form", () => {
|
|||
);
|
||||
agHelper.GetNClick(locator._datePicker(2));
|
||||
|
||||
deployMode.ClearJSONFieldValue("Distance To Go", 1);
|
||||
deployMode.EnterJSONInputValue("Distance To Go", "18.1", 1);
|
||||
|
||||
deployMode.ClearJSONFieldValue("Current Port", 1);
|
||||
deployMode.EnterJSONInputValue("Current Port", "GALVESTON", 1);
|
||||
|
||||
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", () => {
|
||||
table.SelectTableRow(0);
|
||||
agHelper.Sleep(2000);//since table taking time to display JSON form
|
||||
|
||||
//validating update happened fine!
|
||||
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
|
||||
agHelper.AssertElementExist(dataSources._selectedRow);
|
||||
table.ReadTableRowColumnData(0, 1, 2000).then(($cellData) => {
|
||||
table.ReadTableRowColumnData(0, 1, 4000).then(($cellData) => {
|
||||
expect($cellData).to.eq(col1Text);
|
||||
});
|
||||
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.AssertElementAbsence(locator._toastMsg); //Validating fix for Bug 14063 - for common table columns
|
||||
agHelper.Sleep(2000); //for update to reflect!
|
||||
// agHelper.WaitUntilEleDisappear(locator._spinner);
|
||||
agHelper.AssertElementAbsence(locator._spinner, 10000);//10 secs for update to reflect!
|
||||
agHelper.ValidateNetworkStatus("@postExecute", 200);
|
||||
agHelper.ValidateNetworkStatus("@postExecute", 200);
|
||||
table.AssertSelectedRow(rowIndex); //Validate Primary key column selection
|
||||
|
|
|
|||
|
|
@ -230,7 +230,6 @@ describe("JS Function Execution", function() {
|
|||
completeReplace: true,
|
||||
toRun: true,
|
||||
shouldCreateNewJSObj: true,
|
||||
prettify: false,
|
||||
});
|
||||
|
||||
// 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
|
||||
jsEditor.EditJSObj(JS_OBJECT_WITHOUT_PARSE_ERROR, false);
|
||||
jsEditor.EditJSObj(JS_OBJECT_WITHOUT_PARSE_ERROR, true);
|
||||
agHelper.GetNClick(jsEditor._runButton);
|
||||
agHelper.AssertContains("ran successfully"); //to not hinder with next toast msg in next case!
|
||||
jsEditor.AssertParseError(false, true);
|
||||
|
|
@ -265,7 +264,7 @@ describe("JS Function Execution", function() {
|
|||
jsEditor.AssertParseError(true, true);
|
||||
|
||||
// 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
|
||||
agHelper.GetNClick(locator._errorTab);
|
||||
agHelper.AssertContains(
|
||||
|
|
@ -316,6 +315,7 @@ describe("JS Function Execution", function() {
|
|||
expect($cellData).to.eq("1"); //validating id column value - row 0
|
||||
deployMode.NavigateBacktoEditor();
|
||||
});
|
||||
ee.SelectEntityByName("JSObject1", "QUERIES/JS");
|
||||
ee.ActionContextMenuByEntityName(
|
||||
"JSObject1",
|
||||
"Delete",
|
||||
|
|
|
|||
|
|
@ -535,10 +535,10 @@ describe("JSObjects OnLoad Actions tests", function() {
|
|||
agHelper.ValidateToastMessage('The action "getBooks" has failed');
|
||||
agHelper
|
||||
.GetText(locator._jsonFormInputField("name"), "val")
|
||||
.then(($name) => expect($name).be.empty);
|
||||
.should("be.empty");
|
||||
agHelper
|
||||
.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!
|
||||
// agHelper.SelectDropDown("Akron");
|
||||
|
|
@ -549,14 +549,15 @@ describe("JSObjects OnLoad Actions tests", function() {
|
|||
agHelper.GetNClick(locator._widgetInDeployed("imagewidget"));
|
||||
agHelper.AssertElementVisible(jsEditor._dialogBody("getBooks"));
|
||||
agHelper.ClickButton("Yes");
|
||||
agHelper.Sleep(4000);
|
||||
//callBooks, getId confirmations also expected aft bug 13646 is fixed & covering tc 1646
|
||||
|
||||
agHelper
|
||||
.GetText(locator._jsonFormInputField("name"), "val")
|
||||
.then(($name) => cy.wrap($name).should("not.be.empty"));
|
||||
.should("not.be.empty");
|
||||
agHelper
|
||||
.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();
|
||||
agHelper.AssertElementVisible(jsEditor._dialogBody("getBooks"));
|
||||
|
|
|
|||
|
|
@ -22,8 +22,8 @@ describe("Array Datatype tests", function() {
|
|||
agHelper.AddDsl(val);
|
||||
});
|
||||
ee.NavigateToSwitcher("widgets");
|
||||
propPane.ChangeColor(-31, "Primary");
|
||||
propPane.ChangeColor(-27, "Background");
|
||||
propPane.ChangeThemeColor(-31, "Primary");
|
||||
propPane.ChangeThemeColor(-27, "Background");
|
||||
});
|
||||
|
||||
it("1. Creating table query - arraytypes", () => {
|
||||
|
|
|
|||
|
|
@ -22,8 +22,8 @@ describe("Binary Datatype tests", function() {
|
|||
agHelper.AddDsl(val);
|
||||
});
|
||||
ee.NavigateToSwitcher("widgets");
|
||||
propPane.ChangeColor(24, "Primary");
|
||||
propPane.ChangeColor(-37, "Background");
|
||||
propPane.ChangeThemeColor(24, "Primary");
|
||||
propPane.ChangeThemeColor(-37, "Background");
|
||||
});
|
||||
|
||||
it("1. Creating table query - binarytype", () => {
|
||||
|
|
|
|||
|
|
@ -14,8 +14,8 @@ describe("Boolean & Enum Datatype tests", function() {
|
|||
cy.fixture("Datatypes/BooleanEnumDTdsl").then((val: any) => {
|
||||
agHelper.AddDsl(val);
|
||||
});
|
||||
propPane.ChangeColor(-18, "Primary");
|
||||
propPane.ChangeColor(-20, "Background");
|
||||
propPane.ChangeThemeColor(-18, "Primary");
|
||||
propPane.ChangeThemeColor(-20, "Background");
|
||||
});
|
||||
|
||||
it("1. Create Postgress DS", function() {
|
||||
|
|
|
|||
|
|
@ -14,8 +14,8 @@ describe("DateTime Datatype tests", function() {
|
|||
cy.fixture("Datatypes/DateTimeDTdsl").then((val: any) => {
|
||||
agHelper.AddDsl(val);
|
||||
});
|
||||
propPane.ChangeColor(22, "Primary");
|
||||
propPane.ChangeColor(32, "Background");
|
||||
propPane.ChangeThemeColor(22, "Primary");
|
||||
propPane.ChangeThemeColor(32, "Background");
|
||||
});
|
||||
|
||||
it("1. Create Postgress DS", function() {
|
||||
|
|
@ -153,7 +153,7 @@ describe("DateTime Datatype tests", function() {
|
|||
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!
|
||||
});
|
||||
table.ReadTableRowColumnData(0, 7, 200).then(($cellData) => {
|
||||
table.ReadTableRowColumnData(0, 7).then(($cellData) => {
|
||||
expect($cellData).to.eq("19.01.1989");
|
||||
});
|
||||
agHelper
|
||||
|
|
|
|||
|
|
@ -24,8 +24,8 @@ describe("Json & JsonB Datatype tests", function() {
|
|||
agHelper.AddDsl(val);
|
||||
});
|
||||
ee.NavigateToSwitcher("widgets");
|
||||
propPane.ChangeColor(33, "Primary");
|
||||
propPane.ChangeColor(39, "Background");
|
||||
propPane.ChangeThemeColor(33, "Primary");
|
||||
propPane.ChangeThemeColor(39, "Background");
|
||||
});
|
||||
|
||||
it("1. Creating table query - jsonbooks", () => {
|
||||
|
|
@ -349,8 +349,8 @@ describe("Json & JsonB Datatype tests", function() {
|
|||
agHelper.AddDsl(val);
|
||||
});
|
||||
ee.NavigateToSwitcher("widgets");
|
||||
propPane.ChangeColor(12, "Primary");
|
||||
propPane.ChangeColor(23, "Background");
|
||||
propPane.ChangeThemeColor(12, "Primary");
|
||||
propPane.ChangeThemeColor(23, "Background");
|
||||
});
|
||||
|
||||
it("15. Creating enum & table queries - jsonBbooks", () => {
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ export class CommonLocators {
|
|||
_backToEditor = ".t--back-to-editor"
|
||||
_newPage = ".pages .t--entity-add-btn"
|
||||
_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 | RegExp) => this._toastMsg + ":contains("+ (typeof toastText == 'string' ? "'"+ toastText+"'" : toastText)+ ")"//not working!
|
||||
_empty = "span[name='no-response']"
|
||||
|
|
@ -87,5 +87,4 @@ export class CommonLocators {
|
|||
_deployedPage = `.t--page-switch-tab`
|
||||
_hints = "ul.CodeMirror-hints li"
|
||||
_cancelActionExecution = ".t--cancel-action-button"
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -138,11 +138,11 @@ export class AggregateHelper {
|
|||
textPresence: "have.text" | "contain.text" | "not.have.text" = "have.text",
|
||||
index = 0,
|
||||
) {
|
||||
const locator = selector.startsWith("//")
|
||||
? cy.xpath(selector)
|
||||
: cy.get(selector);
|
||||
if (index >= 0) locator.eq(index).should(textPresence, text);
|
||||
else locator.should(textPresence, text);
|
||||
if (index >= 0)
|
||||
this.GetElement(selector)
|
||||
.eq(index)
|
||||
.should(textPresence, text);
|
||||
else this.GetElement(selector).should(textPresence, text);
|
||||
}
|
||||
|
||||
public ValidateToastMessage(text: string, index = 0, length = 1) {
|
||||
|
|
@ -204,7 +204,7 @@ export class AggregateHelper {
|
|||
}
|
||||
|
||||
public WaitUntilAllToastsDisappear() {
|
||||
cy.get(this.locator._toastConatiner).waitUntil(
|
||||
cy.get(this.locator._toastContainer).waitUntil(
|
||||
($ele) =>
|
||||
cy
|
||||
.wrap($ele)
|
||||
|
|
@ -344,15 +344,17 @@ export class AggregateHelper {
|
|||
options.forEach(($each) => {
|
||||
cy.get(this.locator._multiSelectOptions($each))
|
||||
.check({ force: true })
|
||||
.wait(1000)
|
||||
.should("be.checked");
|
||||
.wait(1000);
|
||||
cy.get(this.locator._multiSelectOptions($each)).should("be.checked");
|
||||
});
|
||||
} else {
|
||||
options.forEach(($each) => {
|
||||
cy.get(this.locator._multiSelectOptions($each))
|
||||
.uncheck({ force: true })
|
||||
.wait(1000)
|
||||
.should("not.be.checked");
|
||||
.wait(1000);
|
||||
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
|
||||
return this.GetElement(selector, 0).should("not.exist");
|
||||
return this.GetElement(selector, timeout).should("not.exist");
|
||||
}
|
||||
|
||||
public GetText(
|
||||
|
|
@ -799,6 +801,18 @@ export class AggregateHelper {
|
|||
.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) {
|
||||
return this.GetElement(selector)
|
||||
.eq(index)
|
||||
|
|
|
|||
|
|
@ -50,6 +50,8 @@ export class EntityExplorer {
|
|||
"//span[text()='" + spanText + " Query']";
|
||||
_createNewPopup = ".bp3-overlay-content";
|
||||
_entityExplorerWrapper = ".t--entity-explorer-wrapper";
|
||||
_pinEntityExplorer = ".t--pin-entity-explorer";
|
||||
_entityExplorer = ".t--entity-explorer";
|
||||
|
||||
public SelectEntityByName(
|
||||
entityNameinLeftSidebar: string,
|
||||
|
|
@ -184,4 +186,17 @@ export class EntityExplorer {
|
|||
cy.get("body").type(`{${this.modifierKey}}{c}`);
|
||||
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
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,8 +7,8 @@ export class FakerHelper {
|
|||
return faker.image.cats();
|
||||
}
|
||||
|
||||
public GetRandomText(textLength = 10) {
|
||||
return faker.random.alphaNumeric(textLength, { casing: "upper" });
|
||||
public GetRandomText(textLength = 10, casing : "upper" | "lower" | "mixed" = "mixed") {
|
||||
return faker.random.alphaNumeric(textLength, { casing: casing });
|
||||
}
|
||||
|
||||
public GetUSPhoneNumber() {
|
||||
|
|
|
|||
|
|
@ -81,7 +81,7 @@ export class PropertyPane {
|
|||
this.agHelper.AssertContains("Theme " + newTheme + " Applied");
|
||||
}
|
||||
|
||||
public ChangeColor(
|
||||
public ChangeThemeColor(
|
||||
colorIndex: number | string,
|
||||
type: "Primary" | "Background" = "Primary",
|
||||
) {
|
||||
|
|
|
|||
|
|
@ -48,6 +48,8 @@ export class Table {
|
|||
`.t--widget-tablewidget .tbody .td[data-rowindex=${rowNum}][data-colindex=${colNum}]`;
|
||||
_tableRowColumnData = (rowNum: number, colNum: number) =>
|
||||
this._tableRow(rowNum, colNum) + ` div div`;
|
||||
_tableLoadStateDelete =
|
||||
this._tableRow(0, 0) + ` div div button span:contains('Delete')`;
|
||||
_tableRowImageColumnData = (rowNum: number, colNum: number) =>
|
||||
this._tableRow(rowNum, colNum) + ` div div.image-cell`;
|
||||
_tableEmptyColumnData = `.t--widget-tablewidget .tbody .td`; //selected-row
|
||||
|
|
@ -85,22 +87,16 @@ export class Table {
|
|||
_filtersCount = this._filterBtn + " span.action-title";
|
||||
|
||||
public WaitUntilTableLoad(rowIndex = 0, colIndex = 0) {
|
||||
cy.waitUntil(() => this.ReadTableRowColumnData(rowIndex, colIndex), {
|
||||
errorMsg: "Table is not populated",
|
||||
timeout: 20000,
|
||||
interval: 2000,
|
||||
}).then((cellData) => {
|
||||
expect(cellData).not.empty;
|
||||
});
|
||||
this.agHelper.GetElement(this._tableRowColumnData(rowIndex, colIndex), 30000).waitUntil(
|
||||
($ele) =>
|
||||
cy
|
||||
.wrap($ele)
|
||||
.children("button")
|
||||
.should("have.length", 0)
|
||||
);
|
||||
|
||||
// this.ReadTableRowColumnData(rowIndex, colIndex, 2000).waitUntil(
|
||||
// ($cellData) => expect($cellData).not.empty,
|
||||
// {
|
||||
// errorMsg: "Table is not populated",
|
||||
// timeout: 20000,
|
||||
// interval: 2000,
|
||||
// },
|
||||
// );
|
||||
//or below will work:
|
||||
//this.agHelper.AssertElementAbsence(this._tableLoadStateDelete, 30000);
|
||||
// this.agHelper.Sleep(500);
|
||||
}
|
||||
|
||||
|
|
@ -133,14 +129,9 @@ export class Table {
|
|||
) {
|
||||
//timeout can be sent higher values incase of larger tables
|
||||
this.agHelper.Sleep(timeout); //Settling time for table!
|
||||
return cy.waitUntil(
|
||||
() => this.agHelper.GetElement(this._tableRowColumnData(rowNum, colNum), 30000),
|
||||
{
|
||||
errorMsg: "Table is not populated",
|
||||
timeout: 30000,
|
||||
interval: 2000,
|
||||
},
|
||||
).then($cellVal => cy.wrap($cellVal).invoke("text"));
|
||||
return this.agHelper
|
||||
.GetElement(this._tableRowColumnData(rowNum, colNum), 30000)
|
||||
.invoke("text");
|
||||
}
|
||||
|
||||
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
|
||||
cy.get(this._tableRow(rowIndex, columnIndex))
|
||||
.first()
|
||||
.trigger("click", { force: true });
|
||||
this.agHelper
|
||||
.GetElement(this._tableRow(rowIndex, columnIndex))
|
||||
.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
|
||||
}
|
||||
|
||||
|
|
@ -253,7 +257,7 @@ export class Table {
|
|||
|
||||
public RemoveSearchTextNVerify(cellDataAfterSearchRemoved: string) {
|
||||
this.agHelper.GetNClick(this._searchBoxCross);
|
||||
this.ReadTableRowColumnData(0, 0).then((aftSearchRemoved) => {
|
||||
this.ReadTableRowColumnData(0, 0).then((aftSearchRemoved: any) => {
|
||||
expect(aftSearchRemoved).to.eq(cellDataAfterSearchRemoved);
|
||||
});
|
||||
}
|
||||
|
|
@ -300,7 +304,7 @@ export class Table {
|
|||
else this.agHelper.GetNClick(this._clearAllFilter);
|
||||
|
||||
if (toClose) this.CloseFilter();
|
||||
this.ReadTableRowColumnData(0, 0).then((aftFilterRemoved) => {
|
||||
this.ReadTableRowColumnData(0, 0).then((aftFilterRemoved: any) => {
|
||||
expect(aftFilterRemoved).to.eq(cellDataAfterFilterRemoved);
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -240,13 +240,15 @@ Cypress.Commands.add("widgetText", (text, inputcss, innercss) => {
|
|||
cy.contains(innercss, text);
|
||||
});
|
||||
|
||||
Cypress.Commands.add("verifyUpdatedWidgetName", (text) => {
|
||||
Cypress.Commands.add("verifyUpdatedWidgetName", (text, txtToVerify) => {
|
||||
cy.get(commonlocators.editWidgetName)
|
||||
.click({ force: true })
|
||||
.type(text, { delay: 300 })
|
||||
.type(text)
|
||||
.type("{enter}");
|
||||
cy.wait(500);
|
||||
cy.get(".t--widget-name").contains(text);
|
||||
cy.assertPageSave();
|
||||
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) => {
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user