|
2 | 2 | PROMPT_TEXTAREA_SELECTORS = [ |
3 | 3 | 'ms-prompt-box textarea[aria-label="Enter a prompt"]', |
4 | 4 | 'ms-prompt-box textarea[placeholder="Start typing a prompt"]', |
5 | | - 'ms-prompt-box .prompt-box-container .text-wrapper textarea', |
6 | | - 'ms-prompt-box textarea', |
| 5 | + "ms-prompt-box .prompt-box-container .text-wrapper textarea", |
| 6 | + "ms-prompt-box textarea", |
7 | 7 | ] |
8 | 8 | PROMPT_TEXTAREA_SELECTOR = PROMPT_TEXTAREA_SELECTORS[0] |
9 | 9 | INPUT_SELECTOR = PROMPT_TEXTAREA_SELECTOR |
10 | 10 | INPUT_SELECTOR2 = PROMPT_TEXTAREA_SELECTOR |
11 | 11 |
|
12 | 12 | # 提交按钮 |
13 | 13 | SUBMIT_BUTTON_SELECTORS = [ |
14 | | - 'ms-run-button button[aria-label="Run"]', |
15 | | - 'ms-prompt-box ms-run-button button', |
16 | | - 'button[aria-label="Run"]', |
| 14 | + 'ms-run-button button[type="submit"]', |
| 15 | + 'ms-prompt-box ms-run-button button[type="submit"]', |
| 16 | + "ms-run-button button:has(.run-button-label)", |
17 | 17 | ] |
18 | 18 | SUBMIT_BUTTON_SELECTOR = SUBMIT_BUTTON_SELECTORS[0] |
19 | 19 |
|
20 | 20 | # 文件上传 |
21 | 21 | INSERT_BUTTON_SELECTORS = [ |
22 | 22 | 'button[data-test-id="add-media-button"]', |
23 | 23 | 'button[aria-label="Insert images, videos, audio, or files"]', |
24 | | - 'ms-add-media-button button', |
25 | | - 'button[data-test-add-chunk-menu-button]', |
| 24 | + "ms-add-media-button button", |
| 25 | + "button[data-test-add-chunk-menu-button]", |
26 | 26 | ] |
27 | 27 | INSERT_BUTTON_SELECTOR = INSERT_BUTTON_SELECTORS[0] |
28 | 28 |
|
29 | 29 | UPLOAD_BUTTON_SELECTORS = [ |
30 | | - 'button.upload-file-menu-item', |
| 30 | + "button.upload-file-menu-item", |
31 | 31 | 'button[role="menuitem"]:has-text("Upload files")', |
32 | 32 | 'button[role="menuitem"]:has-text("Upload File")', |
33 | 33 | ] |
|
39 | 39 | ] |
40 | 40 | HIDDEN_FILE_INPUT_SELECTOR = HIDDEN_FILE_INPUT_SELECTORS[0] |
41 | 41 |
|
42 | | -UPLOADED_MEDIA_ITEM_SELECTOR = 'ms-prompt-box .multi-media-row ms-media-chip' |
| 42 | +UPLOADED_MEDIA_ITEM_SELECTOR = "ms-prompt-box .multi-media-row ms-media-chip" |
43 | 43 |
|
44 | 44 | # 响应区域 |
45 | | -SKIP_PREFERENCE_VOTE_BUTTON_SELECTOR = 'button[data-test-id="skip-button"][aria-label="Skip preference vote"]' |
46 | | -RESPONSE_CONTAINER_SELECTOR = 'ms-chat-turn .chat-turn-container.model' |
47 | | -RESPONSE_TEXT_SELECTOR = 'ms-cmark-node.cmark-node' |
| 45 | +SKIP_PREFERENCE_VOTE_BUTTON_SELECTOR = ( |
| 46 | + 'button[data-test-id="skip-button"][aria-label="Skip preference vote"]' |
| 47 | +) |
| 48 | +RESPONSE_CONTAINER_SELECTOR = "ms-chat-turn .chat-turn-container.model" |
| 49 | +RESPONSE_TEXT_SELECTOR = "ms-cmark-node.cmark-node" |
48 | 50 |
|
49 | 51 | # 加载状态 |
50 | 52 | LOADING_SPINNER_SELECTORS = [ |
51 | | - 'ms-run-button button svg .stoppable-spinner', |
52 | | - 'ms-prompt-box ms-run-button button svg .stoppable-spinner', |
53 | | - 'button[aria-label="Run"] svg .stoppable-spinner', |
| 53 | + 'ms-run-button button[type="submit"] svg .stoppable-spinner', |
| 54 | + "ms-prompt-box ms-run-button button svg .stoppable-spinner", |
| 55 | + "ms-run-button button svg .stoppable-spinner", |
54 | 56 | ] |
55 | 57 | LOADING_SPINNER_SELECTOR = LOADING_SPINNER_SELECTORS[0] |
56 | 58 |
|
57 | 59 | # 对话框/遮罩层 |
58 | | -OVERLAY_SELECTOR = '.mat-mdc-dialog-inner-container' |
59 | | -ZERO_STATE_SELECTOR = 'ms-zero-state' |
60 | | -ERROR_TOAST_SELECTOR = 'div.toast.warning, div.toast.error' |
| 60 | +OVERLAY_SELECTOR = ".mat-mdc-dialog-inner-container" |
| 61 | +ZERO_STATE_SELECTOR = "ms-zero-state" |
| 62 | +ERROR_TOAST_SELECTOR = "div.toast.warning, div.toast.error" |
61 | 63 |
|
62 | 64 | # 消息编辑 |
63 | | -EDIT_MESSAGE_BUTTON_SELECTOR = 'button[aria-label="Edit"].toggle-edit-button:has(span:text-is("edit"))' |
64 | | -MESSAGE_TEXTAREA_SELECTOR = 'ms-chat-turn:last-child ms-text-chunk ms-autosize-textarea' |
| 65 | +EDIT_MESSAGE_BUTTON_SELECTOR = ( |
| 66 | + 'button[aria-label="Edit"].toggle-edit-button:has(span:text-is("edit"))' |
| 67 | +) |
| 68 | +MESSAGE_TEXTAREA_SELECTOR = "ms-chat-turn:last-child ms-text-chunk ms-autosize-textarea" |
65 | 69 | FINISH_EDIT_BUTTON_SELECTOR = 'button[aria-label="Stop editing"].toggle-edit-button' |
66 | 70 | MORE_OPTIONS_BUTTON_SELECTOR = 'button[aria-label="Open options"]' |
67 | 71 | COPY_MARKDOWN_BUTTON_SELECTOR = 'button[role="menuitem"]:has-text("Copy markdown")' |
68 | 72 | COPY_MARKDOWN_BUTTON_SELECTOR_ALT = 'div[role="menu"] button:has-text("Copy Markdown")' |
69 | 73 |
|
70 | 74 | # 高级设置 |
71 | | -ADVANCED_SETTINGS_EXPANDER_SELECTOR = 'button[aria-label="Expand or collapse advanced settings"]' |
| 75 | +ADVANCED_SETTINGS_EXPANDER_SELECTOR = ( |
| 76 | + 'button[aria-label="Expand or collapse advanced settings"]' |
| 77 | +) |
72 | 78 | MAX_OUTPUT_TOKENS_SELECTOR = 'input[aria-label="Maximum output tokens"]' |
73 | 79 | STOP_SEQUENCE_INPUT_SELECTOR = 'input[aria-label="Add stop token"]' |
74 | | -MAT_CHIP_REMOVE_BUTTON_SELECTOR = 'mat-chip-set mat-chip-row button[aria-label*="Remove"]' |
| 80 | +MAT_CHIP_REMOVE_BUTTON_SELECTOR = ( |
| 81 | + 'mat-chip-set mat-chip-row button[aria-label*="Remove"]' |
| 82 | +) |
75 | 83 | TOP_P_INPUT_SELECTOR = '//div[contains(@class, "settings-item-column") and .//h3[normalize-space()="Top P"]]//input[@role="spinbutton"]' |
76 | 84 | TEMPERATURE_INPUT_SELECTOR = '//div[contains(@class, "settings-item-column") and .//h3[normalize-space()="Temperature"]]//input[@role="spinbutton"]' |
77 | 85 |
|
78 | 86 | # 工具面板 |
79 | 87 | USE_URL_CONTEXT_SELECTOR = 'ms-browse-as-a-tool mat-slide-toggle button[role="switch"]' |
80 | | -GROUNDING_WITH_GOOGLE_SEARCH_TOGGLE_SELECTOR = 'div[data-test-id="searchAsAToolTooltip"] mat-slide-toggle button' |
| 88 | +GROUNDING_WITH_GOOGLE_SEARCH_TOGGLE_SELECTOR = ( |
| 89 | + 'div[data-test-id="searchAsAToolTooltip"] mat-slide-toggle button' |
| 90 | +) |
81 | 91 |
|
82 | 92 | # 思考模式 |
83 | 93 | THINKING_MODE_TOGGLE_SELECTOR = 'mat-slide-toggle[data-test-toggle="enable-thinking"]' |
84 | | -SET_THINKING_BUDGET_TOGGLE_SELECTOR = 'mat-slide-toggle[data-test-toggle="manual-budget"]' |
| 94 | +SET_THINKING_BUDGET_TOGGLE_SELECTOR = ( |
| 95 | + 'mat-slide-toggle[data-test-toggle="manual-budget"]' |
| 96 | +) |
85 | 97 | THINKING_BUDGET_INPUT_SELECTOR = 'ms-slider[data-test-slider] input[type="number"]' |
86 | | -THINKING_LEVEL_SELECT_SELECTOR = 'mat-select[aria-label="Thinking Level"], mat-select[aria-label="Thinking level"]' |
| 98 | +THINKING_LEVEL_SELECT_SELECTOR = ( |
| 99 | + 'mat-select[aria-label="Thinking Level"], mat-select[aria-label="Thinking level"]' |
| 100 | +) |
87 | 101 | THINKING_LEVEL_OPTIONS = { |
88 | | - 'minimal': 'mat-option:has-text("Minimal")', |
89 | | - 'low': 'mat-option:has-text("Low")', |
90 | | - 'medium': 'mat-option:has-text("Medium")', |
91 | | - 'high': 'mat-option:has-text("High")', |
| 102 | + "minimal": 'mat-option:has-text("Minimal")', |
| 103 | + "low": 'mat-option:has-text("Low")', |
| 104 | + "medium": 'mat-option:has-text("Medium")', |
| 105 | + "high": 'mat-option:has-text("High")', |
92 | 106 | } |
93 | | -THINKING_LEVEL_OPTION_HIGH_SELECTOR = THINKING_LEVEL_OPTIONS['high'] |
94 | | -THINKING_LEVEL_OPTION_LOW_SELECTOR = THINKING_LEVEL_OPTIONS['low'] |
| 107 | +THINKING_LEVEL_OPTION_HIGH_SELECTOR = THINKING_LEVEL_OPTIONS["high"] |
| 108 | +THINKING_LEVEL_OPTION_LOW_SELECTOR = THINKING_LEVEL_OPTIONS["low"] |
95 | 109 | DEFAULT_THINKING_LEVEL = "high" |
96 | 110 |
|
97 | 111 | # 系统指令 |
98 | 112 | SYSTEM_INSTRUCTIONS_BUTTON_SELECTOR = 'button[aria-label="System instructions"]' |
99 | 113 | SYSTEM_INSTRUCTIONS_TEXTAREA_SELECTOR = 'textarea[aria-label="System instructions"]' |
100 | 114 |
|
101 | 115 | # 模型选择器 |
102 | | -MODEL_SELECTOR_CARD_TITLE = '.model-selector-card .title' |
| 116 | +MODEL_SELECTOR_CARD_TITLE = ".model-selector-card .title" |
103 | 117 | MODEL_SELECTOR_CARD_NAME = '[data-test-id="model-name"]' |
104 | | -MODEL_SELECTOR_CARD_SUBTITLE = '.model-selector-card .subtitle' |
105 | | -MODEL_SELECTOR_LEGACY_PRIMARY = 'mat-select[data-test-ms-model-selector] .model-option-content span' |
106 | | -MODEL_SELECTOR_LEGACY_FALLBACK = 'mat-select[data-test-ms-model-selector] span' |
107 | | -MODEL_SELECTOR_LEGACY_GENERIC = '[data-test-ms-model-selector] span' |
108 | | -MODEL_SELECTOR_BUTTON_SPAN = 'button[data-test-ms-model-selector] span' |
109 | | -MODEL_OPTION_CONTENT_SPAN = '.model-option-content span' |
110 | | -MODEL_SELECTORS_LIST = [MODEL_SELECTOR_CARD_TITLE, MODEL_SELECTOR_CARD_NAME, MODEL_SELECTOR_CARD_SUBTITLE, MODEL_SELECTOR_LEGACY_PRIMARY, MODEL_SELECTOR_LEGACY_FALLBACK, MODEL_SELECTOR_LEGACY_GENERIC, '.model-selector span', MODEL_SELECTOR_BUTTON_SPAN, MODEL_OPTION_CONTENT_SPAN] |
| 118 | +MODEL_SELECTOR_CARD_SUBTITLE = ".model-selector-card .subtitle" |
| 119 | +MODEL_SELECTOR_LEGACY_PRIMARY = ( |
| 120 | + "mat-select[data-test-ms-model-selector] .model-option-content span" |
| 121 | +) |
| 122 | +MODEL_SELECTOR_LEGACY_FALLBACK = "mat-select[data-test-ms-model-selector] span" |
| 123 | +MODEL_SELECTOR_LEGACY_GENERIC = "[data-test-ms-model-selector] span" |
| 124 | +MODEL_SELECTOR_BUTTON_SPAN = "button[data-test-ms-model-selector] span" |
| 125 | +MODEL_OPTION_CONTENT_SPAN = ".model-option-content span" |
| 126 | +MODEL_SELECTORS_LIST = [ |
| 127 | + MODEL_SELECTOR_CARD_TITLE, |
| 128 | + MODEL_SELECTOR_CARD_NAME, |
| 129 | + MODEL_SELECTOR_CARD_SUBTITLE, |
| 130 | + MODEL_SELECTOR_LEGACY_PRIMARY, |
| 131 | + MODEL_SELECTOR_LEGACY_FALLBACK, |
| 132 | + MODEL_SELECTOR_LEGACY_GENERIC, |
| 133 | + ".model-selector span", |
| 134 | + MODEL_SELECTOR_BUTTON_SPAN, |
| 135 | + MODEL_OPTION_CONTENT_SPAN, |
| 136 | +] |
111 | 137 |
|
112 | 138 | # 速率限制 |
113 | | -RATE_LIMIT_CALLOUT_SELECTOR = 'ms-callout.error-callout .message, ms-callout.warning-callout .message' |
| 139 | +RATE_LIMIT_CALLOUT_SELECTOR = ( |
| 140 | + "ms-callout.error-callout .message, ms-callout.warning-callout .message" |
| 141 | +) |
114 | 142 | RATE_LIMIT_KEYWORDS = ["exceeded quota", "out of free generations"] |
115 | 143 |
|
116 | 144 | # Function Calling (尚未使用,改为合并到system prompt) |
117 | | -FUNCTION_CALLING_TOGGLE_SELECTOR = 'div[data-test-id="functionCallingTooltip"] mat-slide-toggle' |
118 | | -EDIT_FUNCTION_DECLARATIONS_BUTTON_SELECTOR = 'button.edit-function-declarations-button' |
119 | | -FUNCTION_DECLARATIONS_DIALOG_SELECTOR = 'ms-edit-function-declarations-dialog' |
120 | | -FUNCTION_DECLARATIONS_DIALOG_CLOSE_BUTTON_SELECTOR = 'ms-edit-function-declarations-dialog h2 button[aria-label="close"]' |
121 | | -FUNCTION_DECLARATIONS_CODE_EDITOR_TAB_SELECTOR = 'ms-edit-function-declarations-dialog button[role="tab"]:has-text("Code Editor")' |
122 | | -FUNCTION_DECLARATIONS_TEXTAREA_SELECTOR = 'ms-edit-function-declarations-dialog ms-text-editor textarea' |
123 | | -FUNCTION_DECLARATIONS_SAVE_BUTTON_SELECTOR = 'ms-edit-function-declarations-dialog mat-dialog-actions button:has-text("Save")' |
| 145 | +FUNCTION_CALLING_TOGGLE_SELECTOR = ( |
| 146 | + 'div[data-test-id="functionCallingTooltip"] mat-slide-toggle' |
| 147 | +) |
| 148 | +EDIT_FUNCTION_DECLARATIONS_BUTTON_SELECTOR = "button.edit-function-declarations-button" |
| 149 | +FUNCTION_DECLARATIONS_DIALOG_SELECTOR = "ms-edit-function-declarations-dialog" |
| 150 | +FUNCTION_DECLARATIONS_DIALOG_CLOSE_BUTTON_SELECTOR = ( |
| 151 | + 'ms-edit-function-declarations-dialog h2 button[aria-label="close"]' |
| 152 | +) |
| 153 | +FUNCTION_DECLARATIONS_CODE_EDITOR_TAB_SELECTOR = ( |
| 154 | + 'ms-edit-function-declarations-dialog button[role="tab"]:has-text("Code Editor")' |
| 155 | +) |
| 156 | +FUNCTION_DECLARATIONS_TEXTAREA_SELECTOR = ( |
| 157 | + "ms-edit-function-declarations-dialog ms-text-editor textarea" |
| 158 | +) |
| 159 | +FUNCTION_DECLARATIONS_SAVE_BUTTON_SELECTOR = ( |
| 160 | + 'ms-edit-function-declarations-dialog mat-dialog-actions button:has-text("Save")' |
| 161 | +) |
0 commit comments