feat: 完善 AI Studio Key 自动化流程

This commit is contained in:
2026-09-23 15:39:20 +08:00
parent f41a979462
commit 04309f60c7
45 changed files with 6600 additions and 119 deletions
+33 -1
View File
@@ -67,7 +67,15 @@ class FakeLanguagePage {
this.usOption = new FakeElement({
text: 'United States',
box: { x: 300, y: 360, width: 300, height: 48 },
onClick: () => { this.usSelected = true; },
onClick: () => {
this.usSelected = true;
if (this.saveBehavior === 'auto_apply') {
this.mode = 'saved';
this.currentTitle = 'Language';
this.pencilButton.aria = 'Edit language: English (United States)';
this.emitMainNavigation('https://myaccount.google.com/language?refresh_reason=primary');
}
},
});
this.cancelButton = new FakeElement({
text: 'Batal',
@@ -268,6 +276,8 @@ class NavigationProbePage extends FakeLanguagePage {
for (const saveButton of [
new FakeElement({ text: 'Save', aria: 'Save your language preference' }),
new FakeElement({ text: '保存', aria: '保存您的语言偏好设置' }),
new FakeElement({ text: 'Uložiť', aria: 'Uložiť výber jazyka' }),
new FakeElement({ text: 'चुनें', aria: 'भाषा चुनें' }),
new FakeElement({ text: 'Continue', attrs: { 'data-mdc-dialog-action': 'confirm' } }),
]) {
const cancel = new FakeElement({ text: 'Cancel', aria: 'Cancel language change' });
@@ -275,6 +285,22 @@ class NavigationProbePage extends FakeLanguagePage {
assert.strictEqual(await _private.findSaveButton(dialog), saveButton, '应按按钮语义识别保存动作');
}
const hindiCancel = new FakeElement({ text: 'रद्द करें', aria: 'भाषा बदलना रद्द करें' });
const hindiSave = new FakeElement({ text: 'चुनें', aria: 'भाषा चुनें' });
assert.strictEqual(
await _private.findSaveButton({ $$: async () => [hindiCancel, hindiSave] }),
hindiSave,
'Hindi 页面必须排除“रद्द करें”并识别“चुनें”为确认动作',
);
const slovakCancel = new FakeElement({ text: 'Zrušiť', aria: 'Zrušiť zmenu jazyka' });
const slovakSave = new FakeElement({ text: 'Uložiť', aria: 'Uložiť výber jazyka' });
assert.strictEqual(
await _private.findSaveButton({ $$: async () => [slovakCancel, slovakSave] }),
slovakSave,
'Slovak 页面必须排除“Zrušiť”并识别“Uložiť”为保存动作',
);
const expectedPrimaryPage = new NavigationProbePage('expected_primary');
const expectedConfirmation = await _private.confirmEnglishUnitedStates(expectedPrimaryPage, () => {});
assert.strictEqual(expectedConfirmation.confirmed, true, '本次主 frame primary refresh 应继续并完成最终确认');
@@ -324,6 +350,12 @@ class NavigationProbePage extends FakeLanguagePage {
assert.strictEqual(page.listenerCount('framenavigated'), 0, '完成后应解绑导航监听');
assert(logs.some(line => line.includes('语言已成功更改')));
const autoApplyPage = new FakeLanguagePage(0, 'auto_apply');
const [autoApplyOk, autoApplyMessage] = await changeLanguageFromPage(autoApplyPage, () => {});
assert.strictEqual(autoApplyOk, true, autoApplyMessage);
assert.strictEqual(autoApplyPage.usSelected, true, '自动保存版本也应先选择 United States');
assert.strictEqual(autoApplyPage.listenerCount('framenavigated'), 0, '自动保存完成后应解绑导航监听');
const cancelLastPage = new FakeLanguagePage(0, 'cancel_last');
const [cancelLastOk, cancelLastMessage] = await changeLanguageFromPage(cancelLastPage, () => {});
assert.strictEqual(cancelLastOk, false, '最后一个按钮为取消时不得当作保存');