diff --git a/cypress/e2e/create-room/create-room.spec.ts b/cypress/e2e/create-room/create-room.spec.ts
deleted file mode 100644
index a5a81b03f5..0000000000
--- a/cypress/e2e/create-room/create-room.spec.ts
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
-Copyright 2022-2023 The Matrix.org Foundation C.I.C.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-/// <reference types="cypress" />
-
-import { HomeserverInstance } from "../../plugins/utils/homeserver";
-
-describe("Create Room", () => {
-    let homeserver: HomeserverInstance;
-
-    beforeEach(() => {
-        cy.startHomeserver("default").then((data) => {
-            homeserver = data;
-
-            cy.initTestUser(homeserver, "Jim");
-        });
-    });
-
-    afterEach(() => {
-        cy.stopHomeserver(homeserver);
-    });
-
-    it("should allow us to create a public room with name, topic & address set", () => {
-        const name = "Test room 1";
-        const topic = "This room is dedicated to this test and this test only!";
-
-        cy.openCreateRoomDialog().within(() => {
-            // Fill name & topic
-            cy.findByRole("textbox", { name: "Name" }).type(name);
-            cy.findByRole("textbox", { name: "Topic (optional)" }).type(topic);
-            // Change room to public
-            cy.findByRole("button", { name: "Room visibility" }).click();
-            cy.findByRole("option", { name: "Public room" }).click();
-            // Fill room address
-            cy.findByRole("textbox", { name: "Room address" }).type("test-room-1");
-            // Submit
-            cy.findByRole("button", { name: "Create room" }).click();
-        });
-
-        cy.url().should("contain", "/#/room/#test-room-1:localhost");
-
-        cy.get(".mx_LegacyRoomHeader").within(() => {
-            cy.findByText(name);
-            cy.findByText(topic);
-        });
-    });
-});
diff --git a/playwright/e2e/create-room/create-room.spec.ts b/playwright/e2e/create-room/create-room.spec.ts
new file mode 100644
index 0000000000..0e5882e23c
--- /dev/null
+++ b/playwright/e2e/create-room/create-room.spec.ts
@@ -0,0 +1,43 @@
+/*
+Copyright 2022-2023 The Matrix.org Foundation C.I.C.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+import { test, expect } from "../../element-web-test";
+
+test.describe("Create Room", () => {
+    test.use({ displayName: "Jim" });
+
+    test("should allow us to create a public room with name, topic & address set", async ({ page, user, app }) => {
+        const name = "Test room 1";
+        const topic = "This room is dedicated to this test and this test only!";
+
+        const dialog = await app.openCreateRoomDialog();
+        // Fill name & topic
+        await dialog.getByRole("textbox", { name: "Name" }).fill(name);
+        await dialog.getByRole("textbox", { name: "Topic" }).fill(topic);
+        // Change room to public
+        await dialog.getByRole("button", { name: "Room visibility" }).click();
+        await dialog.getByRole("option", { name: "Public room" }).click();
+        // Fill room address
+        await dialog.getByRole("textbox", { name: "Room address" }).fill("test-room-1");
+        // Submit
+        await dialog.getByRole("button", { name: "Create room" }).click();
+
+        await expect(page).toHaveURL(/\/#\/room\/#test-room-1:localhost/);
+        const header = page.locator(".mx_LegacyRoomHeader");
+        await expect(header).toContainText(name);
+        await expect(header).toContainText(topic);
+    });
+});
diff --git a/playwright/pages/ElementAppPage.ts b/playwright/pages/ElementAppPage.ts
index a913675f0c..1735877f5b 100644
--- a/playwright/pages/ElementAppPage.ts
+++ b/playwright/pages/ElementAppPage.ts
@@ -52,6 +52,15 @@ export class ElementAppPage {
         return this.page.locator(".mx_UserSettingsDialog");
     }
 
+    /**
+     * Open room creation dialog.
+     */
+    public async openCreateRoomDialog(): Promise<Locator> {
+        await this.page.getByRole("button", { name: "Add room", exact: true }).click();
+        await this.page.getByRole("menuitem", { name: "New room", exact: true }).click();
+        return this.page.locator(".mx_CreateRoomDialog");
+    }
+
     /**
      * Create a room with given options.
      * @param options the options to apply when creating the room