Skip to content

Commit 68c56b8

Browse files
committed
test: 覆盖自定义 API 下拉菜单实际边界
1 parent 176e139 commit 68c56b8

1 file changed

Lines changed: 41 additions & 0 deletions

File tree

tests/frontend/test_api_settings.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ def test_api_key_settings(mock_page: Page, running_server: str):
7171
@pytest.mark.frontend
7272
def test_custom_model_headers_own_their_capsule_shape(mock_page: Page, running_server: str):
7373
"""Collapsed custom-model headers must not borrow rounded corners from a wrapper."""
74+
mock_page.set_viewport_size({"width": 1280, "height": 1200})
7475
mock_page.add_init_script("window.localStorage.setItem('neko_tutorial_settings', 'seen')")
7576
mock_page.goto(f"{running_server}/api_key")
7677

@@ -129,6 +130,46 @@ def test_custom_model_headers_own_their_capsule_shape(mock_page: Page, running_s
129130
"overflow": "visible",
130131
}
131132

133+
mock_page.wait_for_selector(
134+
"#conversationModelProvider option",
135+
state="attached",
136+
timeout=10000,
137+
)
138+
mock_page.evaluate("""
139+
() => {
140+
document.getElementById('custom-api-options').style.display = 'block';
141+
document.getElementById('custom-api-container').style.display = 'grid';
142+
document.getElementById('conversation-model-content')
143+
.closest('.model-config-container').style.display = 'block';
144+
}
145+
""")
146+
provider_trigger = mock_page.locator("#conversationModelProvider-dropdown-trigger")
147+
provider_menu = mock_page.locator("#conversationModelProvider-menu")
148+
provider_trigger.click()
149+
expect(provider_menu).to_be_visible()
150+
151+
dropdown_geometry = mock_page.evaluate("""
152+
() => {
153+
const content = document.getElementById('conversation-model-content');
154+
const menu = document.getElementById('conversationModelProvider-menu');
155+
const contentRect = content.getBoundingClientRect();
156+
const menuRect = menu.getBoundingClientRect();
157+
const probeX = menuRect.left + (menuRect.width / 2);
158+
const probeY = Math.min(menuRect.bottom - 2, contentRect.bottom + 4);
159+
const hit = document.elementFromPoint(probeX, probeY);
160+
161+
return {
162+
contentBottom: contentRect.bottom,
163+
menuBottom: menuRect.bottom,
164+
menuExtendsPastContent: menuRect.bottom > contentRect.bottom,
165+
exposedMenuPointIsVisible: !!(hit && menu.contains(hit)),
166+
};
167+
}
168+
""")
169+
170+
assert dropdown_geometry["menuExtendsPastContent"] is True
171+
assert dropdown_geometry["exposedMenuPointIsVisible"] is True
172+
132173

133174
@pytest.mark.frontend
134175
def test_custom_model_grid_uses_two_columns_and_full_width_expansion(

0 commit comments

Comments
 (0)