Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion doc/agent-smoke-cases.md
Original file line number Diff line number Diff line change
Expand Up @@ -218,13 +218,16 @@ bash scripts/agent-smoke.sh --cdp-port 9222 --cases AGENT-CHROME-001,AGENT-CHROM
2. 在 `选项` 中切到 `智能预览`、`完整主题`、`首帖 + 最新回复`
3. 确认工具栏出现 `刷新` 按钮
4. 点击 `刷新`
5. 待刷新完成后,在中间列表再次点击刚才打开的同一主题标题

断言:

1. 点击前 `刷新` 按钮存在、可见、可点击
2. 点击后按钮立即进入禁用态,并显示 `刷新中...`
3. 刷新完成后按钮恢复为 `刷新`
4. 过程中 `location.href` 保持在列表页,抽屉不关闭
4. 再次点击同一主题标题后,应触发与刷新按钮一致的刷新态:按钮立即变成 `刷新中...`
5. 二次刷新完成后按钮再次恢复为 `刷新`
6. 两次刷新过程中 `location.href` 都保持在列表页,抽屉不关闭

### AGENT-CHROME-011:快速回复粘贴图片自动上传

Expand Down
49 changes: 46 additions & 3 deletions scripts/agent-smoke.sh
Original file line number Diff line number Diff line change
Expand Up @@ -757,6 +757,35 @@ EOF
ab_eval "$script"
}

click_active_topic_link() {
local script
script=$(cat <<'EOF'
(() => {
const link = document.querySelector("#main-outlet .ld-drawer-topic-link-active");
const refreshButton = document.querySelector("#ld-drawer-root .ld-drawer-refresh");
if (!(link instanceof HTMLAnchorElement)) {
return { ok: false, reason: "active-topic-link-not-found" };
}

const href = link.href;
const text = link.textContent?.trim() || null;
link.click();
return {
ok: true,
href,
text,
refreshExists: refreshButton instanceof HTMLButtonElement,
refreshHidden: refreshButton?.hidden ?? null,
refreshDisabled: refreshButton?.disabled ?? null,
refreshText: refreshButton?.textContent?.trim() || null,
pageUrl: location.href
};
})()
EOF
)
ab_eval "$script"
}

run_001() {
local case_id="AGENT-CHROME-001"
local click_result state title clicked_text
Expand Down Expand Up @@ -985,7 +1014,7 @@ run_009() {

run_010() {
local case_id="AGENT-CHROME-010"
local open_result original_settings setup_result before click after final_state
local open_result original_settings setup_result before click after repeat_click repeat_after final_state
local passed=0
local detail=""

Expand Down Expand Up @@ -1020,6 +1049,10 @@ run_010() {
if ! after=$(wait_for_refresh_idle); then
:
fi
repeat_click=$(click_active_topic_link)
if ! repeat_after=$(wait_for_refresh_idle); then
:
fi
final_state=$(drawer_state)
restore_settings_subset "$original_settings"

Expand All @@ -1035,12 +1068,22 @@ run_010() {
&& [ "$(echo "$after" | jq -r '.hidden')" = "false" ] \
&& [ "$(echo "$after" | jq -r '.disabled')" = "false" ] \
&& [ "$(echo "$after" | jq -r '.text // empty')" = "刷新" ] \
&& [ "$(echo "$repeat_click" | jq -r '.ok')" = "true" ] \
&& [ "$(echo "$repeat_click" | jq -r '.refreshExists')" = "true" ] \
&& [ "$(echo "$repeat_click" | jq -r '.refreshHidden')" = "false" ] \
&& [ "$(echo "$repeat_click" | jq -r '.refreshDisabled')" = "true" ] \
&& [ "$(echo "$repeat_click" | jq -r '.refreshText // empty')" = "刷新中..." ] \
&& [ "$(echo "$repeat_click" | jq -r '.pageUrl // empty')" = "$BASE_URL" ] \
&& [ "$(echo "$repeat_after" | jq -r '.exists')" = "true" ] \
&& [ "$(echo "$repeat_after" | jq -r '.hidden')" = "false" ] \
&& [ "$(echo "$repeat_after" | jq -r '.disabled')" = "false" ] \
&& [ "$(echo "$repeat_after" | jq -r '.text // empty')" = "刷新" ] \
&& [ "$(echo "$final_state" | jq -r '.pageUrl // empty')" = "$BASE_URL" ] \
&& [ "$(echo "$final_state" | jq -r '.pageOpen')" = "true" ]; then
passed=1
detail="title=$(echo "$after" | jq -r '.title // empty')"
detail="title=$(echo "$repeat_after" | jq -r '.title // empty')"
else
detail="setup=$(echo "$setup_result" | jq -c '.') before=$(echo "$before" | jq -c '{exists, hidden, disabled, text}') click=$(echo "$click" | jq -c '{ok, hidden, disabled, text, pageUrl}') after=$(echo "$after" | jq -c '{exists, hidden, disabled, text}')"
detail="setup=$(echo "$setup_result" | jq -c '.') before=$(echo "$before" | jq -c '{exists, hidden, disabled, text}') click=$(echo "$click" | jq -c '{ok, hidden, disabled, text, pageUrl}') after=$(echo "$after" | jq -c '{exists, hidden, disabled, text}') repeat_click=$(echo "$repeat_click" | jq -c '{ok, reason, refreshExists, refreshHidden, refreshDisabled, refreshText, pageUrl}') repeat_after=$(echo "$repeat_after" | jq -c '{exists, hidden, disabled, text}')"
fi

if [ "$passed" -eq 1 ]; then
Expand Down
11 changes: 11 additions & 0 deletions src/content.js
Original file line number Diff line number Diff line change
Expand Up @@ -544,6 +544,11 @@
highlightLink(activeLink);
syncNavigationState();

if (shouldRefreshCurrentTopicOnRepeatOpen()) {
handleLatestRepliesRefresh();
return;
}

if (!state.currentViewTracked && !state.currentTrackRequest) {
loadTopic(topicUrl, fallbackTitle, topicIdHint);
}
Expand Down Expand Up @@ -2333,6 +2338,12 @@
}
}

function shouldRefreshCurrentTopicOnRepeatOpen() {
return canRefreshLatestReplies()
&& !state.isRefreshingLatestReplies
&& !state.abortController;
}

function refreshCurrentView() {
if (!state.currentUrl) {
return;
Expand Down
Loading