diff --git a/.changeset/pretty-ants-joke.md b/.changeset/pretty-ants-joke.md
new file mode 100644
index 000000000000..c1af1d4515f2
--- /dev/null
+++ b/.changeset/pretty-ants-joke.md
@@ -0,0 +1,6 @@
+---
+"@gradio/image": patch
+"gradio": patch
+---
+
+feat:Add `gr.Image` interaction test + `gr.ImageEditor` interaction test improvement
diff --git a/js/app/test/kitchen_sink.spec.ts b/js/app/test/kitchen_sink.spec.ts
index 575145d79a2a..f4d41062f0b7 100644
--- a/js/app/test/kitchen_sink.spec.ts
+++ b/js/app/test/kitchen_sink.spec.ts
@@ -1,7 +1,13 @@
import { test, expect } from "@gradio/tootils";
-import { BASE64_IMAGE } from "./media_data";
+import { chromium } from "playwright";
test("test inputs", async ({ page }) => {
+ const browser = await chromium.launch();
+ const context = await browser.newContext({
+ permissions: ["camera"]
+ });
+ context.grantPermissions(["camera"]);
+
const textbox = await page.getByLabel("Textbox").nth(0);
await expect(textbox).toHaveValue("Lorem ipsum");
@@ -32,6 +38,11 @@ test("test inputs", async ({ page }) => {
const uploaded_image_cropper = await page.locator("img").nth(0);
const image_data_cropper = await uploaded_image_cropper.getAttribute("src");
await expect(image_data_cropper).toContain("cheetah1.jpg");
+
+ // Image Input w/ Webcam
+ await page.getByRole("button", { name: "Click to Access Webcam" }).click();
+ await page.getByRole("button", { name: "select input source" }).click();
+ expect(await page.getByText("fake_device_0")).toBeTruthy();
});
test("test outputs", async ({ page }) => {
diff --git a/js/image/shared/Webcam.svelte b/js/image/shared/Webcam.svelte
index a21d7138728d..71ecfaaa4ede 100644
--- a/js/image/shared/Webcam.svelte
+++ b/js/image/shared/Webcam.svelte
@@ -250,12 +250,11 @@
{#if !recording}
{/if}
diff --git a/js/imageeditor/ImageEditor.stories.svelte b/js/imageeditor/ImageEditor.stories.svelte
index 28c403fe679b..cd370b32c6bd 100644
--- a/js/imageeditor/ImageEditor.stories.svelte
+++ b/js/imageeditor/ImageEditor.stories.svelte
@@ -51,6 +51,9 @@