Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
B
bit-pm
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
燕伟桐
bit-pm
Commits
25195d09
Unverified
提交
25195d09
authored
6月 02, 2025
作者:
Will Chen
提交者:
GitHub
6月 02, 2025
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Drag & drop image attachment (#304)
上级
0229f47f
显示空白字符变更
内嵌
并排
正在显示
3 个修改的文件
包含
70 行增加
和
0 行删除
+70
-0
attach_image.spec.ts
e2e-tests/attach_image.spec.ts
+40
-0
test_helper.ts
e2e-tests/helpers/test_helper.ts
+4
-0
attach_image.spec.ts_attach-image-via-drag---chat-1.aria.yml
...ach_image.spec.ts_attach-image-via-drag---chat-1.aria.yml
+26
-0
没有找到文件。
e2e-tests/attach_image.spec.ts
浏览文件 @
25195d09
import
{
test
}
from
"./helpers/test_helper"
;
import
{
test
}
from
"./helpers/test_helper"
;
import
*
as
fs
from
"fs"
;
// attach image is implemented in two separate components
// attach image is implemented in two separate components
// - HomeChatInput
// - HomeChatInput
...
@@ -20,6 +21,7 @@ test("attach image - chat", async ({ po }) => {
...
@@ -20,6 +21,7 @@ test("attach image - chat", async ({ po }) => {
await
po
.
setUp
({
autoApprove
:
true
});
await
po
.
setUp
({
autoApprove
:
true
});
await
po
.
sendPrompt
(
"basic"
);
await
po
.
sendPrompt
(
"basic"
);
// attach via file input (click-to-upload)
await
po
await
po
.
getChatInputContainer
()
.
getChatInputContainer
()
.
locator
(
"input[type='file']"
)
.
locator
(
"input[type='file']"
)
...
@@ -28,3 +30,41 @@ test("attach image - chat", async ({ po }) => {
...
@@ -28,3 +30,41 @@ test("attach image - chat", async ({ po }) => {
await
po
.
snapshotServerDump
({
onlyLastMessage
:
true
});
await
po
.
snapshotServerDump
({
onlyLastMessage
:
true
});
await
po
.
snapshotMessages
({
replaceDumpPath
:
true
});
await
po
.
snapshotMessages
({
replaceDumpPath
:
true
});
});
});
// attach image via drag-and-drop to chat input container
test
(
"attach image via drag - chat"
,
async
({
po
})
=>
{
await
po
.
setUp
({
autoApprove
:
true
});
await
po
.
sendPrompt
(
"basic"
);
// read fixture and convert to base64 for browser context
const
fileBase64
=
fs
.
readFileSync
(
"e2e-tests/fixtures/images/logo.png"
,
"base64"
,
);
// locate the inner drop target (first child div of the container)
const
dropTarget
=
po
.
getChatInputContainer
().
locator
(
"div"
).
first
();
// simulate dragenter, dragover, and drop with a File
await
dropTarget
.
evaluate
((
element
,
fileBase64
)
=>
{
// convert base64 to Uint8Array
const
binary
=
atob
(
fileBase64
);
const
len
=
binary
.
length
;
const
array
=
new
Uint8Array
(
len
);
for
(
let
i
=
0
;
i
<
len
;
i
++
)
array
[
i
]
=
binary
.
charCodeAt
(
i
);
// create file and dataTransfer
const
blob
=
new
Blob
([
array
],
{
type
:
"image/png"
});
const
file
=
new
File
([
blob
],
"logo.png"
,
{
type
:
"image/png"
});
const
dt
=
new
DataTransfer
();
dt
.
items
.
add
(
file
);
// dispatch drag events
[
"dragenter"
,
"dragover"
,
"drop"
].
forEach
((
eventType
)
=>
{
element
.
dispatchEvent
(
new
DragEvent
(
eventType
,
{
dataTransfer
:
dt
,
bubbles
:
true
}),
);
});
},
fileBase64
);
// submit and verify
await
po
.
sendPrompt
(
"[dump]"
);
// Note: this should match EXACTLY the server dump from the previous test.
await
po
.
snapshotServerDump
({
onlyLastMessage
:
true
});
await
po
.
snapshotMessages
({
replaceDumpPath
:
true
});
});
e2e-tests/helpers/test_helper.ts
浏览文件 @
25195d09
...
@@ -245,6 +245,10 @@ class PageObject {
...
@@ -245,6 +245,10 @@ class PageObject {
await
closeButtons
.
nth
(
i
).
click
();
await
closeButtons
.
nth
(
i
).
click
();
}
}
}
}
async
sleep
(
ms
:
number
)
{
await
new
Promise
((
resolve
)
=>
setTimeout
(
resolve
,
ms
));
}
}
}
// From https://github.com/microsoft/playwright/issues/8208#issuecomment-1435475930
// From https://github.com/microsoft/playwright/issues/8208#issuecomment-1435475930
...
...
e2e-tests/snapshots/attach_image.spec.ts_attach-image-via-drag---chat-1.aria.yml
0 → 100644
浏览文件 @
25195d09
-
paragraph
:
basic
-
'
button
"Thinking
`<dyad-write>`:
I'
'
ll
think
about
the
problem
and
write
a
bug
report.
<dyad-write>
<dyad-write
path=\"file1.txt\">
Fake
dyad
write
</dyad-write>"'
:
-
img
-
img
-
paragraph
:
-
code
:
"
`<dyad-write>`"
-
text
:
"
:
I'll
think
about
the
problem
and
write
a
bug
report."
-
paragraph
:
<dyad-write>
-
paragraph
:
<dyad-write path="file1.txt"> Fake dyad write </dyad-write>
-
img
-
text
:
file1.txt
-
img
-
text
:
file1.txt
-
paragraph
:
More EOM
-
img
-
text
:
Approved
-
paragraph
:
"
[dump]"
-
paragraph
:
"
Attachments:"
-
list
:
-
listitem
:
logo.png (image/png)
-
paragraph
:
"
[[dyad-dump-path=*]]"
-
img
-
text
:
Approved
-
button "Retry"
:
-
img
\ No newline at end of file
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论