diff --git a/src/test/java/com/webforj/samples/config/RunConfig.java b/src/test/java/com/webforj/samples/config/RunConfig.java index aad45ee9a..9092668fc 100644 --- a/src/test/java/com/webforj/samples/config/RunConfig.java +++ b/src/test/java/com/webforj/samples/config/RunConfig.java @@ -11,7 +11,7 @@ public class RunConfig { static { // Parse webforj.e2e if provided String e2eProps = System.getProperty("webforj.e2e"); - if (e2eProps != null && !e2eProps.isEmpty()) { + if (e2eProps != null && !e2eProps.isEmpty()) { parseE2EProps(e2eProps); } } diff --git a/src/test/java/com/webforj/samples/pages/busyindicator/BusyDemoPage.java b/src/test/java/com/webforj/samples/pages/busyindicator/BusyDemoPage.java new file mode 100644 index 000000000..87ddcf8e9 --- /dev/null +++ b/src/test/java/com/webforj/samples/pages/busyindicator/BusyDemoPage.java @@ -0,0 +1,30 @@ +package com.webforj.samples.pages.busyindicator; + +import com.microsoft.playwright.Locator; +import com.microsoft.playwright.Page; +import com.microsoft.playwright.options.AriaRole; + +public class BusyDemoPage { + + private static final String ROUTE = "busydemo"; + + private final Locator busyIndicator; + private final Locator nameInput; + + public BusyDemoPage(Page page) { + this.busyIndicator = page.getByRole(AriaRole.DIALOG); + this.nameInput = page.getByRole(AriaRole.TEXTBOX, new Page.GetByRoleOptions().setName("Name")); + } + + public static String getRoute() { + return ROUTE; + } + + public Locator getBusyIndicator() { + return busyIndicator; + } + + public Locator getNameInput() { + return nameInput; + } +} diff --git a/src/test/java/com/webforj/samples/pages/checkbox/CheckboxExpansePage.java b/src/test/java/com/webforj/samples/pages/checkbox/CheckboxExpansePage.java new file mode 100644 index 000000000..619548395 --- /dev/null +++ b/src/test/java/com/webforj/samples/pages/checkbox/CheckboxExpansePage.java @@ -0,0 +1,25 @@ +package com.webforj.samples.pages.checkbox; + +import com.microsoft.playwright.Locator; +import com.microsoft.playwright.Page; +import com.microsoft.playwright.options.AriaRole; + +public class CheckboxExpansePage { + + + private static final String ROUTE = "checkboxexpanse"; + + private final Locator checkboxXSmall; + + public CheckboxExpansePage(Page page) { + this.checkboxXSmall = page.getByRole(AriaRole.CHECKBOX, new Page.GetByRoleOptions().setName("XSMALL")); + } + + public static String getRoute() { + return ROUTE; + } + + public Locator getCheckboxXSmall() { + return checkboxXSmall; + } +} diff --git a/src/test/java/com/webforj/samples/pages/checkbox/CheckboxIndeterminatePage.java b/src/test/java/com/webforj/samples/pages/checkbox/CheckboxIndeterminatePage.java new file mode 100644 index 000000000..36dea0bd5 --- /dev/null +++ b/src/test/java/com/webforj/samples/pages/checkbox/CheckboxIndeterminatePage.java @@ -0,0 +1,37 @@ +package com.webforj.samples.pages.checkbox; + +import com.microsoft.playwright.Locator; +import com.microsoft.playwright.Page; +import com.microsoft.playwright.options.AriaRole; + +public class CheckboxIndeterminatePage { + + private static final String ROUTE = "checkboxindeterminate"; + + private final Locator parentCheckbox; + private final Locator child1Checkbox; + private final Locator child2Checkbox; + + public CheckboxIndeterminatePage(Page page) { + this.parentCheckbox = page.getByRole(AriaRole.CHECKBOX, new Page.GetByRoleOptions().setName("Parent")); + this.child1Checkbox = page.getByRole(AriaRole.CHECKBOX, new Page.GetByRoleOptions().setName("Child 1")); + this.child2Checkbox = page.getByRole(AriaRole.CHECKBOX, new Page.GetByRoleOptions().setName("Child 2")); + } + + public static String getRoute() { + return ROUTE; + } + + public Locator getParentCheckbox() { + return parentCheckbox; + } + + public Locator getChild1Checkbox() { + return child1Checkbox; + } + + public Locator getChild2Checkbox() { + return child2Checkbox; + } + +} diff --git a/src/test/java/com/webforj/samples/pages/columnslayout/ColumnsLayoutAlignmentPage.java b/src/test/java/com/webforj/samples/pages/columnslayout/ColumnsLayoutAlignmentPage.java new file mode 100644 index 000000000..5d489ffa7 --- /dev/null +++ b/src/test/java/com/webforj/samples/pages/columnslayout/ColumnsLayoutAlignmentPage.java @@ -0,0 +1,30 @@ +package com.webforj.samples.pages.columnslayout; + +import com.microsoft.playwright.Locator; +import com.microsoft.playwright.Page; +import com.microsoft.playwright.options.AriaRole; + +public class ColumnsLayoutAlignmentPage { + + private static final String ROUTE = "columnslayoutalignment"; + + private final Locator firstName; + private final Locator lastName; + + public ColumnsLayoutAlignmentPage(Page page) { + this.firstName = page.getByRole(AriaRole.TEXTBOX, new Page.GetByRoleOptions().setName("First Name")); + this.lastName = page.getByRole(AriaRole.TEXTBOX, new Page.GetByRoleOptions().setName("Last Name")); + } + + public static String getRoute() { + return ROUTE; + } + + public Locator getFirstName() { + return firstName; + } + + public Locator getLastName() { + return lastName; + } +} diff --git a/src/test/java/com/webforj/samples/pages/dialog/DialogBackdropBlurPage.java b/src/test/java/com/webforj/samples/pages/dialog/DialogBackdropBlurPage.java new file mode 100644 index 000000000..f0f63b567 --- /dev/null +++ b/src/test/java/com/webforj/samples/pages/dialog/DialogBackdropBlurPage.java @@ -0,0 +1,30 @@ +package com.webforj.samples.pages.dialog; + +import com.microsoft.playwright.Page; +import com.microsoft.playwright.Locator; +import com.microsoft.playwright.options.AriaRole; + +public class DialogBackdropBlurPage { + + private static final String ROUTE = "dialogbackdropblur"; + + private final Locator dwcDialog; + private final Locator backgroundBlur; + + public DialogBackdropBlurPage(Page page) { + this.dwcDialog = page.locator("dwc-dialog"); + this.backgroundBlur = page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("Toggle Background Blur")); +} + + public static String getRoute() { + return ROUTE; + } + + public Locator getDwcDialog() { + return dwcDialog; + } + + public Locator getBackgroundBlur() { + return backgroundBlur; + } +} diff --git a/src/test/java/com/webforj/samples/pages/dialog/DialogClosePage.java b/src/test/java/com/webforj/samples/pages/dialog/DialogClosePage.java new file mode 100644 index 000000000..f4ea79a60 --- /dev/null +++ b/src/test/java/com/webforj/samples/pages/dialog/DialogClosePage.java @@ -0,0 +1,36 @@ +package com.webforj.samples.pages.dialog; + +import com.microsoft.playwright.Locator; +import com.microsoft.playwright.Page; +import com.microsoft.playwright.options.AriaRole; + +public class DialogClosePage { + + private static final String ROUTE = "dialogclose"; + + private final Locator dialog; + private final Locator closeDialogButton; + private final Locator showDialogButton; + + public DialogClosePage(Page page) { + this.dialog = page.getByRole(AriaRole.DIALOG); + this.closeDialogButton = page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("Close Dialog")); + this.showDialogButton = page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("Show Dialog")); + } + + public static String getRoute() { + return ROUTE; + } + + public Locator getDialog() { + return dialog; + } + + public Locator getCloseDialogButton() { + return closeDialogButton; + } + + public Locator getShowDialogButton() { + return showDialogButton; + } +} diff --git a/src/test/java/com/webforj/samples/pages/drawer/DrawerAutoFocusPage.java b/src/test/java/com/webforj/samples/pages/drawer/DrawerAutoFocusPage.java index a378a6cc9..53922e05e 100644 --- a/src/test/java/com/webforj/samples/pages/drawer/DrawerAutoFocusPage.java +++ b/src/test/java/com/webforj/samples/pages/drawer/DrawerAutoFocusPage.java @@ -1,5 +1,25 @@ package com.webforj.samples.pages.drawer; +import com.microsoft.playwright.Locator; +import com.microsoft.playwright.Page; +import com.microsoft.playwright.options.AriaRole; + public class DrawerAutoFocusPage { - + + private static final String ROUTE = "drawerautofocus"; + + private final Locator emailNotifications; + + public DrawerAutoFocusPage(Page page) { + this.emailNotifications = page.getByRole(AriaRole.CHECKBOX, new Page.GetByRoleOptions().setName("Email Notifications")); + } + + public static String getRoute() { + return ROUTE; + } + + public Locator getEmailNotifications() { + return emailNotifications; + } + } diff --git a/src/test/java/com/webforj/samples/pages/drawer/DrawerTaskPage.java b/src/test/java/com/webforj/samples/pages/drawer/DrawerTaskPage.java index 16e59e5fd..4da492474 100644 --- a/src/test/java/com/webforj/samples/pages/drawer/DrawerTaskPage.java +++ b/src/test/java/com/webforj/samples/pages/drawer/DrawerTaskPage.java @@ -1,5 +1,54 @@ package com.webforj.samples.pages.drawer; +import com.microsoft.playwright.Locator; +import com.microsoft.playwright.Page; +import com.microsoft.playwright.options.AriaRole; + public class DrawerTaskPage { - + + private static final String ROUTE = "drawertask"; + + private final Locator drawer; + private final Locator meetingCheckbox; + private final Locator clearButton; + private final Locator newTaskInput; + private final Locator addTaskButton; + private final Locator newTaskCheckbox; + + public DrawerTaskPage(Page page) { + this.drawer = page.locator("dwc-drawer"); + this.meetingCheckbox = page.getByRole(AriaRole.CHECKBOX, new Page.GetByRoleOptions().setName("Call John about the meeting")); + this.clearButton = page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("Clear Completed")); + this.newTaskInput = page.getByRole(AriaRole.TEXTBOX, new Page.GetByRoleOptions().setName("New Task")); + this.addTaskButton = page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("Add Task")); + this.newTaskCheckbox = page.getByRole(AriaRole.CHECKBOX, new Page.GetByRoleOptions().setName("New Task from IT")); + } + + public static String getRoute() { + return ROUTE; + } + + public Locator getDrawer() { + return drawer; + } + + public Locator getMeetingCheckbox() { + return meetingCheckbox; + } + + public Locator getClearButton() { + return clearButton; + } + + public Locator getNewTaskInput() { + return newTaskInput; + } + + public Locator getAddTaskButton() { + return addTaskButton; + } + + public Locator getNewTaskCheckbox() { + return newTaskCheckbox; + } } diff --git a/src/test/java/com/webforj/samples/pages/element/ElementInputTextPage.java b/src/test/java/com/webforj/samples/pages/element/ElementInputTextPage.java new file mode 100644 index 000000000..32a911fc5 --- /dev/null +++ b/src/test/java/com/webforj/samples/pages/element/ElementInputTextPage.java @@ -0,0 +1,24 @@ +package com.webforj.samples.pages.element; + +import com.microsoft.playwright.Locator; +import com.microsoft.playwright.Page; +import com.microsoft.playwright.options.AriaRole; + + public class ElementInputTextPage { + + private static final String ROUTE = "elementinputtext"; + + private final Locator inputField; + + public ElementInputTextPage(Page page) { + this.inputField = page.getByRole(AriaRole.TEXTBOX); + } + + public static String getRoute() { + return ROUTE; + } + + public Locator getInputField() { + return inputField; + } +} diff --git a/src/test/java/com/webforj/samples/pages/fields/timefield/TimeFieldPage.java b/src/test/java/com/webforj/samples/pages/fields/timefield/TimeFieldPage.java new file mode 100644 index 000000000..e630251ab --- /dev/null +++ b/src/test/java/com/webforj/samples/pages/fields/timefield/TimeFieldPage.java @@ -0,0 +1,25 @@ +package com.webforj.samples.pages.fields.timefield; + +import com.microsoft.playwright.Locator; +import com.microsoft.playwright.Page; +import com.microsoft.playwright.options.AriaRole; + +public class TimeFieldPage { + + private static final String ROUTE = "timefield"; + + private final Locator reminder; + + public TimeFieldPage(Page page) { + this.reminder = page.getByRole(AriaRole.TEXTBOX, new Page.GetByRoleOptions().setName("Set Reminder:").setExact(true)); + } + + public static String getRoute() { + return ROUTE; + } + + public Locator getReminder() { + return reminder; + } + +} diff --git a/src/test/java/com/webforj/samples/pages/flexlayout/FlexBasisPage.java b/src/test/java/com/webforj/samples/pages/flexlayout/FlexBasisPage.java new file mode 100644 index 000000000..4c5bb28d3 --- /dev/null +++ b/src/test/java/com/webforj/samples/pages/flexlayout/FlexBasisPage.java @@ -0,0 +1,37 @@ +package com.webforj.samples.pages.flexlayout; + +import com.microsoft.playwright.Locator; +import com.microsoft.playwright.Page; +import com.microsoft.playwright.options.AriaRole; + +public class FlexBasisPage { + + private static final String ROUTE = "flexbasis"; + + private final Locator setBasisButton; + private final Locator numberField; + private final Locator box1; + + public FlexBasisPage(Page page) { + this.setBasisButton = page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("Set basis")); + this.numberField = page.getByRole(AriaRole.SPINBUTTON, new Page.GetByRoleOptions().setName("Basis •")); + this.box1 = page.locator("dwc-button").filter(new Locator.FilterOptions().setHas(page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("Box 1")))); + } + + public static String getRoute() { + return ROUTE; + } + + public Locator getSetBasisButton() { + return setBasisButton; + } + + public Locator getNumberField() { + return numberField; + } + + public Locator getBox1() { + return box1; + } + +} \ No newline at end of file diff --git a/src/test/java/com/webforj/samples/pages/flexlayout/FlexLayoutPage.java b/src/test/java/com/webforj/samples/pages/flexlayout/FlexLayoutPage.java new file mode 100644 index 000000000..337dfea98 --- /dev/null +++ b/src/test/java/com/webforj/samples/pages/flexlayout/FlexLayoutPage.java @@ -0,0 +1,31 @@ +package com.webforj.samples.pages.flexlayout; + +import com.microsoft.playwright.Locator; +import com.microsoft.playwright.Page; +import com.microsoft.playwright.options.AriaRole; + +public class FlexLayoutPage { + + private static final String ROUTE = "flexlayout"; + + private final Locator cityField; + private final Locator zipField; + + public FlexLayoutPage(Page page) { + + this.cityField = page.locator("dwc-field").filter(new Locator.FilterOptions().setHas(page.getByRole(AriaRole.TEXTBOX, new Page.GetByRoleOptions().setName("City")))); + this.zipField = page.locator("dwc-numberfield").filter(new Locator.FilterOptions().setHas(page.getByRole(AriaRole.TEXTBOX, new Page.GetByRoleOptions().setName("Zip")))); + } + + public static String getRoute() { + return ROUTE; + } + + public Locator getCityField() { + return cityField; + } + + public Locator getZipField() { + return zipField; + } +} diff --git a/src/test/java/com/webforj/samples/pages/optiondialog/confirm/ConfirmDialogOptionsPage.java b/src/test/java/com/webforj/samples/pages/optiondialog/confirm/ConfirmDialogOptionsPage.java new file mode 100644 index 000000000..e843fead8 --- /dev/null +++ b/src/test/java/com/webforj/samples/pages/optiondialog/confirm/ConfirmDialogOptionsPage.java @@ -0,0 +1,53 @@ +package com.webforj.samples.pages.optiondialog.confirm; + +import com.microsoft.playwright.Locator; +import com.microsoft.playwright.Page; +import com.microsoft.playwright.options.AriaRole; + +public class ConfirmDialogOptionsPage { + private static final String ROUTE = "confirmdialogoptions"; + + private final Locator dialog; + private final Locator discardButton; + private final Locator saveButton; + private final Locator gotItButton; + private final Locator discardedDialog; + private final Locator savedDialog; + + public ConfirmDialogOptionsPage(Page page) { + this.dialog = page.getByRole(AriaRole.DIALOG); + this.discardButton = page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("Discard")); + this.saveButton = page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("Save")); + this.gotItButton = page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("Got it")); + this.discardedDialog = page.getByText("Changes discarded"); + this.savedDialog = page.getByText("Changes saved"); + } + + public static String getRoute() { + return ROUTE; + } + + public Locator getDialog() { + return dialog; + } + + public Locator getDiscardButton() { + return discardButton; + } + + public Locator getSaveButton() { + return saveButton; + } + + public Locator getGotItButton() { + return gotItButton; + } + + public Locator getDiscardedDialog() { + return discardedDialog; + } + + public Locator getSavedDialog() { + return savedDialog; + } +} diff --git a/src/test/java/com/webforj/samples/pages/optiondialog/input/InputDialogBasicPage.java b/src/test/java/com/webforj/samples/pages/optiondialog/input/InputDialogBasicPage.java new file mode 100644 index 000000000..f6699b713 --- /dev/null +++ b/src/test/java/com/webforj/samples/pages/optiondialog/input/InputDialogBasicPage.java @@ -0,0 +1,53 @@ +package com.webforj.samples.pages.optiondialog.input; + +import com.microsoft.playwright.Locator; +import com.microsoft.playwright.Page; +import com.microsoft.playwright.options.AriaRole; + +public class InputDialogBasicPage { + private static final String ROUTE = "inputdialogbasic"; + + private final Locator dialog; + private final Locator inputField; + private final Locator deleteButton; + private final Locator errorDialog; + private final Locator okButton; + private final Locator successDialog; + + public InputDialogBasicPage(Page page) { + this.dialog = page.getByRole(AriaRole.DIALOG); + this.inputField = page.getByRole(AriaRole.TEXTBOX); + this.deleteButton = page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("Delete Repository")); + this.errorDialog = page.getByText("Failed to delete the repository. Code entered is incorrect"); + this.okButton = page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("OK")); + this.successDialog = page.getByText("Repository was deleted successfully"); + } + + public static String getRoute() { + return ROUTE; + } + + public Locator getDialog() { + return dialog; + } + + public Locator getInputField() { + return inputField; + } + + public Locator getDeleteButton() { + return deleteButton; + } + + public Locator getErrorDialog() { + return errorDialog; + } + + public Locator getOKButton() { + return okButton; + } + + public Locator getSuccessDialog() { + return successDialog; + } +} diff --git a/src/test/java/com/webforj/samples/pages/optiondialog/input/InputDialogTypePage.java b/src/test/java/com/webforj/samples/pages/optiondialog/input/InputDialogTypePage.java new file mode 100644 index 000000000..45f6e4e91 --- /dev/null +++ b/src/test/java/com/webforj/samples/pages/optiondialog/input/InputDialogTypePage.java @@ -0,0 +1,47 @@ +package com.webforj.samples.pages.optiondialog.input; + +import com.microsoft.playwright.Locator; +import com.microsoft.playwright.Page; +import com.microsoft.playwright.options.AriaRole; + +public class InputDialogTypePage { + private static final String ROUTE = "inputdialogtype"; + + private final Locator dialog; + private final Locator inputField; + private final Locator continueButton; + private final Locator accessGrantedDialog; + private final Locator gotItButton; + + public InputDialogTypePage(Page page) { + this.dialog = page.getByRole(AriaRole.DIALOG); + this.inputField = page.getByRole(AriaRole.TEXTBOX); + this.continueButton = page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("Continue")); + this.accessGrantedDialog = page.getByText("Access granted"); + this.gotItButton = page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("Got it")); + } + + public static String getRoute() { + return ROUTE; + } + + public Locator getDialog() { + return dialog; + } + + public Locator getInputField() { + return inputField; + } + + public Locator getContinueButton() { + return continueButton; + } + + public Locator getAccessGrantedDialog() { + return accessGrantedDialog; + } + + public Locator getGotItButton() { + return gotItButton; + } +} diff --git a/src/test/java/com/webforj/samples/pages/textarea/TextAreaStatesPage.java b/src/test/java/com/webforj/samples/pages/textarea/TextAreaStatesPage.java new file mode 100644 index 000000000..9e3e15061 --- /dev/null +++ b/src/test/java/com/webforj/samples/pages/textarea/TextAreaStatesPage.java @@ -0,0 +1,30 @@ +package com.webforj.samples.pages.textarea; + +import com.microsoft.playwright.Locator; +import com.microsoft.playwright.Page; +import com.microsoft.playwright.options.AriaRole; + +public class TextAreaStatesPage { + + private static final String ROUTE = "textareastates"; + + private final Locator readonlyArea; + private final Locator disabledArea; + + public TextAreaStatesPage(Page page) { + this.readonlyArea = page.getByRole(AriaRole.TEXTBOX, new Page.GetByRoleOptions().setName("Read-Only")); + this.disabledArea = page.getByRole(AriaRole.TEXTBOX, new Page.GetByRoleOptions().setName("Disabled")); + } + + public static String getRoute() { + return ROUTE; + } + + public Locator getReadonlyArea() { + return readonlyArea; + } + + public Locator getDisabledArea() { + return disabledArea; + } +} diff --git a/src/test/java/com/webforj/samples/views/busyindicator/BusyDemoViewIT.java b/src/test/java/com/webforj/samples/views/busyindicator/BusyDemoViewIT.java new file mode 100644 index 000000000..aea373d44 --- /dev/null +++ b/src/test/java/com/webforj/samples/views/busyindicator/BusyDemoViewIT.java @@ -0,0 +1,32 @@ +package com.webforj.samples.views.busyindicator; + +import com.microsoft.playwright.Locator; +import com.microsoft.playwright.TimeoutError; +import com.webforj.samples.pages.busyindicator.BusyDemoPage; +import static com.microsoft.playwright.assertions.PlaywrightAssertions.assertThat; +import com.webforj.samples.views.BaseTest; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +public class BusyDemoViewIT extends BaseTest { + + private BusyDemoPage busyDemoPage; + + @BeforeEach + public void setupBusyDemo() { + navigateToRoute(BusyDemoPage.getRoute()); + busyDemoPage = new BusyDemoPage(page); + } + + @Test + public void testNameInputIsNotInteractableWhenBusyIndicatorIsVisible() { + assertThat(busyDemoPage.getBusyIndicator()).isVisible(); + + try { + busyDemoPage.getNameInput().click(new Locator.ClickOptions().setTimeout(1000)); + throw new AssertionError("Expected field to not be clickable, but it was"); + } + catch (TimeoutError e) { + } + } +} diff --git a/src/test/java/com/webforj/samples/views/checkbox/CheckboxExpanseViewIT.java b/src/test/java/com/webforj/samples/views/checkbox/CheckboxExpanseViewIT.java new file mode 100644 index 000000000..aa0fb7117 --- /dev/null +++ b/src/test/java/com/webforj/samples/views/checkbox/CheckboxExpanseViewIT.java @@ -0,0 +1,26 @@ +package com.webforj.samples.views.checkbox; + +import static com.microsoft.playwright.assertions.PlaywrightAssertions.assertThat; + +import com.webforj.samples.pages.checkbox.CheckboxExpansePage; +import com.webforj.samples.views.BaseTest; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +public class CheckboxExpanseViewIT extends BaseTest { + + private CheckboxExpansePage checkboxExpansePage; + + @BeforeEach + public void setupCheckboxExpanse() { + navigateToRoute(CheckboxExpansePage.getRoute()); + checkboxExpansePage = new CheckboxExpansePage(page); + } + + @Test + public void testCheckboxXSmallExpanseStillCheckable() { + checkboxExpansePage.getCheckboxXSmall().check(); + assertThat(checkboxExpansePage.getCheckboxXSmall()).isChecked(); + } + +} diff --git a/src/test/java/com/webforj/samples/views/checkbox/CheckboxIndeterminateViewIT.java b/src/test/java/com/webforj/samples/views/checkbox/CheckboxIndeterminateViewIT.java new file mode 100644 index 000000000..51f287ae5 --- /dev/null +++ b/src/test/java/com/webforj/samples/views/checkbox/CheckboxIndeterminateViewIT.java @@ -0,0 +1,38 @@ +package com.webforj.samples.views.checkbox; + +import com.webforj.samples.views.BaseTest; +import org.junit.jupiter.api.BeforeEach; +import com.webforj.samples.pages.checkbox.CheckboxIndeterminatePage; +import org.junit.jupiter.api.Test; +import static com.microsoft.playwright.assertions.PlaywrightAssertions.assertThat; + +public class CheckboxIndeterminateViewIT extends BaseTest { + + private CheckboxIndeterminatePage checkboxIndeterminatePage; + + @BeforeEach + public void setupCheckboxIndeterminate() { + navigateToRoute(CheckboxIndeterminatePage.getRoute()); + checkboxIndeterminatePage = new CheckboxIndeterminatePage(page); + } + + @Test + public void testParentCheckboxIsIndeterminateWhenChild1AndChild2AreCheckedAndUnchecked() { + checkboxIndeterminatePage.getChild1Checkbox().check(); + checkboxIndeterminatePage.getChild2Checkbox().check(); + assertThat(checkboxIndeterminatePage.getParentCheckbox()).isChecked(); + + checkboxIndeterminatePage.getChild1Checkbox().uncheck(); + checkboxIndeterminatePage.getChild2Checkbox().uncheck(); + assertThat(checkboxIndeterminatePage.getParentCheckbox()).not().isChecked(); + + } + + @Test + public void testIfParentCheckedChildrenAreChecked() { + checkboxIndeterminatePage.getParentCheckbox().check(); + assertThat(checkboxIndeterminatePage.getChild1Checkbox()).isChecked(); + assertThat(checkboxIndeterminatePage.getChild2Checkbox()).isChecked(); + } + +} diff --git a/src/test/java/com/webforj/samples/views/columnslayout/ColumnsLayoutAlignmentViewIT.java b/src/test/java/com/webforj/samples/views/columnslayout/ColumnsLayoutAlignmentViewIT.java new file mode 100644 index 000000000..b438ad26e --- /dev/null +++ b/src/test/java/com/webforj/samples/views/columnslayout/ColumnsLayoutAlignmentViewIT.java @@ -0,0 +1,36 @@ +package com.webforj.samples.views.columnslayout; + +import com.webforj.samples.views.BaseTest; + +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import static com.microsoft.playwright.assertions.PlaywrightAssertions.assertThat; +import com.webforj.samples.pages.columnslayout.ColumnsLayoutAlignmentPage; + +public class ColumnsLayoutAlignmentViewIT extends BaseTest { + + private ColumnsLayoutAlignmentPage columnsLayoutAlignmentPage; + + @BeforeEach + public void setupColumnsLayoutAlignment() { + navigateToRoute(ColumnsLayoutAlignmentPage.getRoute()); + columnsLayoutAlignmentPage = new ColumnsLayoutAlignmentPage(page); + } + + @Test + public void testColumnsLayoutAlignment() { + var firstNameBox = columnsLayoutAlignmentPage.getFirstName().boundingBox(); + var lastNameBox = columnsLayoutAlignmentPage.getLastName().boundingBox(); + + assertNotNull(firstNameBox, "First name input element was not found"); + assertNotNull(lastNameBox, "Last name input element was not found"); + + double yDifference = Math.abs(firstNameBox.y - lastNameBox.y); + assertTrue(yDifference <= 1.0, + String.format("Fields are not vertically aligned. Y-coordinate difference: %.2f pixels", yDifference)); + } +} diff --git a/src/test/java/com/webforj/samples/views/dialog/DialogBackdropBlurViewIT.java b/src/test/java/com/webforj/samples/views/dialog/DialogBackdropBlurViewIT.java new file mode 100644 index 000000000..a44fb2dbd --- /dev/null +++ b/src/test/java/com/webforj/samples/views/dialog/DialogBackdropBlurViewIT.java @@ -0,0 +1,26 @@ +package com.webforj.samples.views.dialog; + +import com.webforj.samples.pages.dialog.DialogBackdropBlurPage; +import com.webforj.samples.views.BaseTest; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import static com.microsoft.playwright.assertions.PlaywrightAssertions.assertThat; + +public class DialogBackdropBlurViewIT extends BaseTest { + + private DialogBackdropBlurPage dialogBackdropBlurPage; + + @BeforeEach + public void setupDialogBackdropBlur() { + navigateToRoute(DialogBackdropBlurPage.getRoute()); + dialogBackdropBlurPage = new DialogBackdropBlurPage(page); + } + + @Test + public void testDialogBackdropBlur() { + dialogBackdropBlurPage.getBackgroundBlur().click(); + assertThat(dialogBackdropBlurPage.getDwcDialog()).hasAttribute("blurred", ""); + } + +} diff --git a/src/test/java/com/webforj/samples/views/dialog/DialogCloseViewIT.java b/src/test/java/com/webforj/samples/views/dialog/DialogCloseViewIT.java new file mode 100644 index 000000000..73120ef1a --- /dev/null +++ b/src/test/java/com/webforj/samples/views/dialog/DialogCloseViewIT.java @@ -0,0 +1,31 @@ +package com.webforj.samples.views.dialog; + +import com.webforj.samples.views.BaseTest; +import com.webforj.samples.pages.dialog.DialogClosePage; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import static com.microsoft.playwright.assertions.PlaywrightAssertions.assertThat; + +public class DialogCloseViewIT extends BaseTest { + + private DialogClosePage dialogClosePage; + + @BeforeEach + public void setupDialogClose() { + navigateToRoute(DialogClosePage.getRoute()); + dialogClosePage = new DialogClosePage(page); + } + + @Test + public void testDialogClose() { + assertThat(dialogClosePage.getDialog()).isVisible(); + + dialogClosePage.getCloseDialogButton().click(); + assertThat(dialogClosePage.getDialog()).not().isVisible(); + + dialogClosePage.getShowDialogButton().click(); + assertThat(dialogClosePage.getDialog()).isVisible(); + } + +} diff --git a/src/test/java/com/webforj/samples/views/drawer/DrawerAutoFocusViewIT.java b/src/test/java/com/webforj/samples/views/drawer/DrawerAutoFocusViewIT.java new file mode 100644 index 000000000..14ee990cd --- /dev/null +++ b/src/test/java/com/webforj/samples/views/drawer/DrawerAutoFocusViewIT.java @@ -0,0 +1,24 @@ +package com.webforj.samples.views.drawer; + +import com.webforj.samples.pages.drawer.DrawerAutoFocusPage; +import static com.microsoft.playwright.assertions.PlaywrightAssertions.assertThat; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import com.webforj.samples.views.BaseTest; + +public class DrawerAutoFocusViewIT extends BaseTest { + + private DrawerAutoFocusPage drawerAutoFocusPage; + + @BeforeEach + public void setupDrawerAutoFocus() { + navigateToRoute(DrawerAutoFocusPage.getRoute()); + drawerAutoFocusPage = new DrawerAutoFocusPage(page); + } + + @Test + public void testDrawerAutoFocus() { + assertThat(drawerAutoFocusPage.getEmailNotifications()).isFocused(); + } + +} diff --git a/src/test/java/com/webforj/samples/views/drawer/DrawerTaskViewIT.java b/src/test/java/com/webforj/samples/views/drawer/DrawerTaskViewIT.java index 5d0dcd5dd..485d94759 100644 --- a/src/test/java/com/webforj/samples/views/drawer/DrawerTaskViewIT.java +++ b/src/test/java/com/webforj/samples/views/drawer/DrawerTaskViewIT.java @@ -5,40 +5,28 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import com.microsoft.playwright.Locator; -import com.microsoft.playwright.Page; -import com.microsoft.playwright.options.AriaRole; +import com.webforj.samples.pages.drawer.DrawerTaskPage; import com.webforj.samples.views.BaseTest; public class DrawerTaskViewIT extends BaseTest { + private DrawerTaskPage drawerTaskPage; + @BeforeEach public void setupDrawerTask() { - navigateToRoute("drawertask"); } + navigateToRoute(DrawerTaskPage.getRoute()); + drawerTaskPage = new DrawerTaskPage(page); + } @Test public void testTaskAddedWhenAddTaskButtonIsClicked() { - Locator drawer = page.locator("dwc-drawer"); - assertThat(drawer).isVisible(); - - Locator meetingCheckbox = page.getByRole(AriaRole.CHECKBOX, - new Page.GetByRoleOptions().setName("Call John about the meeting")); - meetingCheckbox.check(); - - Locator clearButton = page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("Clear Completed")); - clearButton.click(); - - assertThat(meetingCheckbox).not().isVisible(); - - Locator newTaskInput = page.getByRole(AriaRole.TEXTBOX, new Page.GetByRoleOptions().setName("New Task")); - newTaskInput.fill("New Task from IT"); - - Locator addTaskButton = page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("Add Task")); - addTaskButton.click(); - - Locator newTaskCheckbox = page.getByRole(AriaRole.CHECKBOX, - new Page.GetByRoleOptions().setName("New Task from IT")); - assertThat(newTaskCheckbox).isVisible(); + assertThat(drawerTaskPage.getDrawer()).isVisible(); + drawerTaskPage.getMeetingCheckbox().check(); + drawerTaskPage.getClearButton().click(); + assertThat(drawerTaskPage.getMeetingCheckbox()).not().isVisible(); + drawerTaskPage.getNewTaskInput().fill("New Task from IT"); + drawerTaskPage.getAddTaskButton().click(); + assertThat(drawerTaskPage.getNewTaskCheckbox()).isVisible(); } } diff --git a/src/test/java/com/webforj/samples/views/element/ElementInputTextViewIT.java b/src/test/java/com/webforj/samples/views/element/ElementInputTextViewIT.java new file mode 100644 index 000000000..23424a27a --- /dev/null +++ b/src/test/java/com/webforj/samples/views/element/ElementInputTextViewIT.java @@ -0,0 +1,22 @@ +package com.webforj.samples.views.element; +import com.webforj.samples.pages.element.ElementInputTextPage; +import com.webforj.samples.views.BaseTest; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import static com.microsoft.playwright.assertions.PlaywrightAssertions.assertThat; + +public class ElementInputTextViewIT extends BaseTest { + + private ElementInputTextPage elementInputTextViewPage; + + @BeforeEach + public void setupElementInputTextView() { + navigateToRoute(ElementInputTextPage.getRoute()); + elementInputTextViewPage = new ElementInputTextPage(page); + } + + @Test + public void testInputFieldHasTextSet() { + assertThat(elementInputTextViewPage.getInputField()).hasValue("Here is the set text"); + } +} diff --git a/src/test/java/com/webforj/samples/views/fields/timefield/TimeFieldViewIT.java b/src/test/java/com/webforj/samples/views/fields/timefield/TimeFieldViewIT.java new file mode 100644 index 000000000..3f08d0ed4 --- /dev/null +++ b/src/test/java/com/webforj/samples/views/fields/timefield/TimeFieldViewIT.java @@ -0,0 +1,28 @@ +package com.webforj.samples.views.fields.timefield; + +import static com.microsoft.playwright.assertions.PlaywrightAssertions.assertThat; + +import com.webforj.samples.pages.fields.timefield.TimeFieldPage; +import com.webforj.samples.views.BaseTest; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + + +public class TimeFieldViewIT extends BaseTest { + + private TimeFieldPage timeFieldPage; + + @BeforeEach + public void setupTimeField() { + navigateToRoute(TimeFieldPage.getRoute()); + timeFieldPage = new TimeFieldPage(page); + } + + @Test + public void testValidTimeEntered() { + timeFieldPage.getReminder().fill("10:00"); + assertThat(timeFieldPage.getReminder()).hasValue("10:00"); + } + + +} diff --git a/src/test/java/com/webforj/samples/views/flexlayout/FlexBasisViewIT.java b/src/test/java/com/webforj/samples/views/flexlayout/FlexBasisViewIT.java new file mode 100644 index 000000000..f7dd28752 --- /dev/null +++ b/src/test/java/com/webforj/samples/views/flexlayout/FlexBasisViewIT.java @@ -0,0 +1,31 @@ +package com.webforj.samples.views.flexlayout; + +import static com.microsoft.playwright.assertions.PlaywrightAssertions.assertThat; + +import java.util.regex.Pattern; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import com.webforj.samples.pages.flexlayout.FlexBasisPage; +import com.webforj.samples.views.BaseTest; + +public class FlexBasisViewIT extends BaseTest { + + private FlexBasisPage flexBasisPage; + + @BeforeEach + public void setupFlexBasis() { + navigateToRoute(FlexBasisPage.getRoute()); + flexBasisPage = new FlexBasisPage(page); + } + + @Test + public void testSetMinimumBasisValue() { + flexBasisPage.getBox1().click(); + flexBasisPage.getNumberField().fill("75"); + flexBasisPage.getSetBasisButton().click(); + assertThat(flexBasisPage.getBox1()).hasAttribute("style", Pattern.compile(".*flex-basis:\\s*75px.*")); + } + +} diff --git a/src/test/java/com/webforj/samples/views/flexlayout/FlexLayoutViewIT.java b/src/test/java/com/webforj/samples/views/flexlayout/FlexLayoutViewIT.java new file mode 100644 index 000000000..e947546ac --- /dev/null +++ b/src/test/java/com/webforj/samples/views/flexlayout/FlexLayoutViewIT.java @@ -0,0 +1,29 @@ +package com.webforj.samples.views.flexlayout; + +import static com.microsoft.playwright.assertions.PlaywrightAssertions.assertThat; + +import java.util.regex.Pattern; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import com.webforj.samples.pages.flexlayout.FlexLayoutPage; +import com.webforj.samples.views.BaseTest; + +public class FlexLayoutViewIT extends BaseTest { + + private FlexLayoutPage flexLayoutPage; + + @BeforeEach + public void setupFlexLayout() { + navigateToRoute(FlexLayoutPage.getRoute()); + flexLayoutPage = new FlexLayoutPage(page); + } + + @Test + public void testItemBasisIsSet() { + assertThat(flexLayoutPage.getCityField()).hasCSS("flex-basis", "40%"); + assertThat(flexLayoutPage.getZipField()).hasCSS("flex-basis", "40%"); + } + +} diff --git a/src/test/java/com/webforj/samples/views/optiondialog/confirm/ConfirmDialogOptionsViewIT.java b/src/test/java/com/webforj/samples/views/optiondialog/confirm/ConfirmDialogOptionsViewIT.java index f83c5b408..3941ed61f 100644 --- a/src/test/java/com/webforj/samples/views/optiondialog/confirm/ConfirmDialogOptionsViewIT.java +++ b/src/test/java/com/webforj/samples/views/optiondialog/confirm/ConfirmDialogOptionsViewIT.java @@ -5,40 +5,27 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import com.microsoft.playwright.Locator; -import com.microsoft.playwright.Page; -import com.microsoft.playwright.options.AriaRole; import com.webforj.samples.views.BaseTest; +import com.webforj.samples.pages.optiondialog.confirm.ConfirmDialogOptionsPage; public class ConfirmDialogOptionsViewIT extends BaseTest { + private ConfirmDialogOptionsPage confirmDialogOptionsPage; + @BeforeEach public void setupConfirmDialogOptionsView() { - navigateToRoute("confirmdialogoptions"); + navigateToRoute(ConfirmDialogOptionsPage.getRoute()); + confirmDialogOptionsPage = new ConfirmDialogOptionsPage(page); } @Test public void testDialogConfirmationIsShownWhenDiscardButtonIsClicked() { - Locator dialog = page.getByRole(AriaRole.DIALOG); - assertThat(dialog).isVisible(); - - Locator confirmButton = page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("Discard")); - confirmButton.click(); - Locator discardedDialog = page.getByText("Changes discarded"); - assertThat(discardedDialog).isVisible(); - - Locator gotItButton = page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("Got it")); - gotItButton.click(); - - assertThat(dialog).isVisible(); - - Locator saveButton = page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("Save")); - saveButton.click(); + confirmDialogOptionsPage.getDiscardButton().click(); + assertThat(confirmDialogOptionsPage.getDiscardedDialog()).isVisible(); - Locator savedDialog = page.getByText("Changes saved"); - assertThat(savedDialog).isVisible(); - gotItButton.click(); + confirmDialogOptionsPage.getGotItButton().click(); - assertThat(dialog).isVisible(); + confirmDialogOptionsPage.getSaveButton().click(); + assertThat(confirmDialogOptionsPage.getSavedDialog()).isVisible(); } } \ No newline at end of file diff --git a/src/test/java/com/webforj/samples/views/optiondialog/input/InputDialogBasicViewIT.java b/src/test/java/com/webforj/samples/views/optiondialog/input/InputDialogBasicViewIT.java index b96b56668..34011545e 100644 --- a/src/test/java/com/webforj/samples/views/optiondialog/input/InputDialogBasicViewIT.java +++ b/src/test/java/com/webforj/samples/views/optiondialog/input/InputDialogBasicViewIT.java @@ -5,52 +5,32 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import com.microsoft.playwright.Locator; -import com.microsoft.playwright.Page; -import com.microsoft.playwright.options.AriaRole; +import com.webforj.samples.pages.optiondialog.input.InputDialogBasicPage; import com.webforj.samples.views.BaseTest; public class InputDialogBasicViewIT extends BaseTest { + private InputDialogBasicPage inputDialogBasicPage; + @BeforeEach public void setupInputDialogBasicView() { - navigateToRoute("inputdialogbasic"); + navigateToRoute(InputDialogBasicPage.getRoute()); + inputDialogBasicPage = new InputDialogBasicPage(page); } @Test public void testInvalidInputDialogIsShownWhenDeleteButtonIsClicked() { - Locator dialog = page.getByRole(AriaRole.DIALOG); - assertThat(dialog).isVisible(); - - Locator inputField = page.getByRole(AriaRole.TEXTBOX); - inputField.fill("wrongCode"); - - Locator deleteButton = page.getByRole(AriaRole.BUTTON, - new Page.GetByRoleOptions().setName("Delete Repository")); - deleteButton.click(); - - Locator errorDialog = page.getByText("Failed to delete the repository. Code entered is incorrect"); - assertThat(errorDialog).isVisible(); - - Locator okButton = page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("OK")); - okButton.click(); + inputDialogBasicPage.getInputField().fill("wrongCode"); + inputDialogBasicPage.getDeleteButton().click(); + assertThat(inputDialogBasicPage.getErrorDialog()).isVisible(); + inputDialogBasicPage.getOKButton().click(); } @Test public void testValidInputDialogIsShownWhenDeleteButtonIsClicked() { - Locator dialog = page.getByRole(AriaRole.DIALOG); - assertThat(dialog).isVisible(); - - Locator inputField = page.getByRole(AriaRole.TEXTBOX); - Locator deleteButton = page.getByRole(AriaRole.BUTTON, - new Page.GetByRoleOptions().setName("Delete Repository")); - - inputField.fill("7ANfB"); - deleteButton.click(); - - Locator okButton = page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("OK")); - Locator successDialog = page.getByText("Repository was deleted successfully"); - assertThat(successDialog).isVisible(); - okButton.click(); + inputDialogBasicPage.getInputField().fill("7ANfB"); + inputDialogBasicPage.getDeleteButton().click(); + assertThat(inputDialogBasicPage.getSuccessDialog()).isVisible(); + inputDialogBasicPage.getOKButton().click(); } } diff --git a/src/test/java/com/webforj/samples/views/optiondialog/input/InputDialogTypeViewIT.java b/src/test/java/com/webforj/samples/views/optiondialog/input/InputDialogTypeViewIT.java index b730488a1..c26543e4e 100644 --- a/src/test/java/com/webforj/samples/views/optiondialog/input/InputDialogTypeViewIT.java +++ b/src/test/java/com/webforj/samples/views/optiondialog/input/InputDialogTypeViewIT.java @@ -5,31 +5,26 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import com.microsoft.playwright.Locator; -import com.microsoft.playwright.Page; -import com.microsoft.playwright.options.AriaRole; +import com.webforj.samples.pages.optiondialog.input.InputDialogTypePage; import com.webforj.samples.views.BaseTest; public class InputDialogTypeViewIT extends BaseTest { + private InputDialogTypePage inputDialogTypePage; + @BeforeEach public void setupInputDialogTypeView() { - navigateToRoute("inputdialogtype"); + navigateToRoute(InputDialogTypePage.getRoute()); + inputDialogTypePage = new InputDialogTypePage(page); } @Test - public void testInputDialogTypeIsShownWhenContinueButtonIsClicked() { - Locator dialog = page.getByRole(AriaRole.DIALOG); - assertThat(dialog).isVisible(); - - Locator inputField = page.getByRole(AriaRole.TEXTBOX); - inputField.fill("mySecretPassword"); - Locator continueButton = page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("Continue")); - continueButton.click(); - Locator accessGrantedDialog = page.getByText("Access granted"); - assertThat(accessGrantedDialog).isVisible(); - Locator gotItButton = page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("Got it")); - gotItButton.click(); + public void testInputDialogTypeIsShownWhenContinueButtonIsClicked() { + + inputDialogTypePage.getInputField().fill("mySecretPassword"); + inputDialogTypePage.getContinueButton().click(); + assertThat(inputDialogTypePage.getAccessGrantedDialog()).isVisible(); + inputDialogTypePage.getGotItButton().click(); } } diff --git a/src/test/java/com/webforj/samples/views/textarea/TextAreaStatesViewIT.java b/src/test/java/com/webforj/samples/views/textarea/TextAreaStatesViewIT.java new file mode 100644 index 000000000..d7270c54b --- /dev/null +++ b/src/test/java/com/webforj/samples/views/textarea/TextAreaStatesViewIT.java @@ -0,0 +1,30 @@ +package com.webforj.samples.views.textarea; + +import com.webforj.samples.pages.textarea.TextAreaStatesPage; +import com.webforj.samples.views.BaseTest; +import org.junit.jupiter.api.BeforeEach; + +import static com.microsoft.playwright.assertions.PlaywrightAssertions.assertThat; + +import org.junit.jupiter.api.Test; + + public class TextAreaStatesViewIT extends BaseTest { + + private TextAreaStatesPage textAreaStatesPage; + + @BeforeEach + public void setupTextAreaStatesPage() { + navigateToRoute(TextAreaStatesPage.getRoute()); + textAreaStatesPage = new TextAreaStatesPage(page); + } + + @Test + public void testReadonlyAreaIsReadonly() { + assertThat(textAreaStatesPage.getReadonlyArea()).hasAttribute("readonly", ""); + } + + @Test + public void testDisabledAreaIsDisabled() { + assertThat(textAreaStatesPage.getDisabledArea()).isDisabled(); + } +}