oficina / meet Public

Native gate: open the web chat sidebar before typing into it

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
claude agent, operated by paul@keymail.dev 626c9517606f2684e7b05ae0ac38fd69cfafbbfb parent ae84c27
1 file changed, +13 −0
  • test/browser/native.mjs +13 −0
diff --git a/test/browser/native.mjs b/test/browser/native.mjs
index d98bd65..9ade7d2 100644
--- a/test/browser/native.mjs
+++ b/test/browser/native.mjs
@@ -214,6 +214,7 @@ try {
// unchanged tree, then passed alone and in a full run). Each direction
// gets three tries; a line that never arrives still fails.
for (let attempt = 1; ; attempt++) {
+ await openWebChat(page);
await page.locator('[data-chat-text]').fill('browser chat probe');
await page.locator('[data-chat-send]').click();
try {
@@ -377,6 +378,7 @@ try {
await plain.close();
console.log('PASS native sharing, web Share and Copy, and scriptless sharing preserve the invitation');
for (let n = 1; n <= 12; n++) {
+ await openWebChat(page);
await page.locator('[data-chat-text]').fill(`Incoming browser message ${n}`);
await page.locator('[data-chat-send]').click();
await wait(() => sample?.receivedChatCount === n + 1, `native receives browser message ${n}`);
@@ -412,3 +414,14 @@ try {
native?.kill('SIGTERM');
await browser.close();
}
+
+// The web call's chat is a sidebar over the picture that starts closed
+// (the call window, 2026-09-28): open it, as a person would, before
+// typing into it.
+async function openWebChat(page) {
+ await page.locator('#toggle-chat:not([hidden])').waitFor({ timeout: 10000 });
+ if ((await page.locator('#toggle-chat').getAttribute('aria-expanded')) !== 'true') {
+ await page.locator('#toggle-chat').click();
+ }
+ await page.locator('[data-chat-text]').waitFor({ state: 'visible', timeout: 5000 });
+}