ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

SeleniumBase 多语言测试指南:10 种语言的本地化测试编写与 translate 翻译 API 实战

2026/9/15 15:47:06 拓冰建站 浏览量
SeleniumBase 多语言测试指南:10 种语言的本地化测试编写与 translate 翻译 API 实战 SeleniumBase 多语言测试指南10 种语言的本地化测试编写与 translate 翻译 API 实战【免费下载链接】SeleniumBaseAPIs for browser automation, testing, and bypassing bot-detection. Includes CDP Mode: A stealthy configuration for chromium that passes every bot detection test.项目地址: https://gitcode.com/GitHub_Trending/se/SeleniumBaseSeleniumBase 内置了一套翻译测试Translated Tests机制允许开发者直接用中文、日文、韩文、俄文等自然语言编写浏览器自动化测试代码测试方法与受支持语言一一对应且与普通测试一样通过 pytest 运行。同时项目还提供seleniumbase translate控制台命令可把任意一份 SeleniumBase 测试文件在 10 种语言之间互相翻译。读完本文你将掌握多语言测试类的导入方式、本地化方法名的实际映射关系以及翻译 API 的完整命令行用法与底层实现原理。一、支持的语言与整体运行方式SeleniumBase 的翻译测试目前支持以下10 种语言语言测试基类父类名2 字母语言代码English英语默认BaseCaseenChinese中文硒测试用例zhDutch荷兰语TestgevalnlFrench法语CasDeBasefrItalian意大利语CasoDiProvaitJapanese日语セレニウムテストケースjaKorean韩语셀레늄_테스트_케이스koPortuguese葡萄牙语CasoDeTesteptRussian俄语ТестНаСеленruSpanish西班牙语CasoDePruebaes以上语言与父类的一一对应关系可以在 seleniumbase/translate/master_dict.py 中通过MD_F.get_languages_list()、MD_F.get_parent_classes_list()、MD_F.get_lang_parent_class()等函数直接查证对应的 2 字母语言代码由MD_F.get_locale_code()返回。多语言测试文件与普通测试完全相同统一使用 pytest 运行例如在 examples/translations 目录下执行pytest chinese_test_1.py pytest japanese_test_1.py该目录下的 pytest.ini 配置了测试发现规则python_files test_*.py *_test.py ...、python_functions test_*以及常用 markers 注册保证翻译后的测试类与方法能够被 pytest 正常收集。二、用母语编写测试中文与日文示例中文翻译测试官方文档给出的中文示例见 help_docs/translations.md如下# Chinese Translation from seleniumbase.translate.chinese import 硒测试用例 class 我的测试类(硒测试用例): def test_例子1(self): self.开启(https://zh.wikipedia.org/wiki/) self.断言标题(维基百科自由的百科全书) self.断言元素(a[titleWikipedia:关于]) self.如果可见请单击(button[aria-label关闭]) self.如果可见请单击(button[aria-label關閉]) self.断言元素(span:contains(创建账号)) self.断言元素(span:contains(登录)) self.输入文本(input[namesearch], 舞龍) self.单击(button:contains(搜索)) self.断言文本(舞龍, #firstHeading) self.断言元素(img[src*Chinese_draak.jpg])仓库中的 examples/translations/chinese_test_1.py 是这份示例的完整可运行版本它比文档示例更进一步追加了硒测试用例.main(__name__, __file__)入口便于直接以脚本方式运行并在断言之后使用self.回去()返回上一页继续搜索麻婆豆腐精武英雄并断言对应结果展示了更完整的测试流程。日文翻译测试# Japanese Translation from seleniumbase.translate.japanese import セレニウムテストケース class 私のテストクラス(セレニウムテストケース): def test_例1(self): self.を開く(https://ja.wikipedia.org/wiki/) self.テキストを確認する(ウィキペディア) self.要素を確認する([title*ウィキペディアへようこそ]) self.JS入力(input[namesearch], アニメ) self.クリックして(#searchform button) self.テキストを確認する(アニメ, #firstHeading) self.JS入力(input[namesearch], 寿司) self.クリックして(#searchform button) self.テキストを確認する(寿司, #firstHeading) self.要素を確認する(img[src*Various_sushi])仓库中的 examples/translations/japanese_test_1.py 还额外演示了self.を訪問()、self.リンクテキストを確認する()、self.リンクテキストをクリックします()等更多本地化方法并断言了 LEGOLAND JAPAN、名古屋城、テーマパーク等页面内容。本地化方法名的真实映射原理这些形如开启断言元素输入文本的本地化方法并非魔法而是定义在 seleniumbase/translate/chinese.py 等语言模块中的普通方法。以中文为例# seleniumbase/translate/chinese.py节选 class 硒测试用例(BaseCase): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self._language Chinese def 开启(self, *args, **kwargs): # open(url) return self.open(*args, **kwargs) def 输入文本(self, *args, **kwargs): # type(selector, text) # Same as update_text() return self.type(*args, **kwargs)可以看到每个本地化方法本质上都是对 SeleniumBase 原生方法open、type、click、assert_text等的薄封装thin wrapper通过*args, **kwargs原样透传参数。因此方法名可以用母语书写但参数的含义、顺序与原生 API 完全一致例如self.断言文本(舞龍, #firstHeading)对应self.assert_text(舞龍, #firstHeading)本地化基类继承自BaseCase源自 seleniumbase/fixtures/base_case.py因此完整继承了 SeleniumBase 的全部自动化能力包括元素定位、等待、断言、截图、CDP 模式等。而每个本地化方法名与原生方法名、以及 10 种语言之间的映射关系统一维护在 seleniumbase/translate/master_dict.py 的MD.md主字典中。例如md[open]在 10 种语言中分别对应open / 开启 / openen / ouvrir / apri / を開く / 열기 / abrir / открыть / abrir翻译器正是依靠这份字典完成方法名的双向替换。三、Translation API命令行翻译任意测试文件除了手动编写多语言测试SeleniumBase 还提供了控制台脚本接口可以把任意一份测试文件从一种语言翻译成另一种语言。翻译过程中文件中所有的self.方法名(...)调用以及顶部的import行都会被替换为对应语言版本。例如把测试翻译成葡萄牙语时BaseCase会变成CasoDeTeste。基本用法seleniumbase translate也可使用其短别名sbase translate见 seleniumbase/translate/translator.py 中的命令入口。完整的命令行规格如下* Usage: seleniumbase translate [SB_FILE.py] [LANGUAGE] [ACTION] * Languages: --en / --English | --zh / --Chinese --nl / --Dutch | --fr / --French --it / --Italian | --ja / --Japanese --ko / --Korean | --pt / --Portuguese --ru / --Russian | --es / --Spanish * Actions: -p / --print (Print translation output to the screen) -o / --overwrite (Overwrite the file being translated) -c / --copy (Copy the translation to a new .py file) * Options: -n (include line Numbers when using the Print action) * Examples: Translate test_1.py into Chinese and only print the output: seleniumbase translate test_1.py --zh -p Translate test_2.py into Portuguese and overwrite the file: seleniumbase translate test_2.py --pt -o Translate test_3.py into Dutch and make a copy of the file: seleniumbase translate test_3.py --nl -c参数行为细节语言LANGUAGE与动作ACTION都必须指定二者缺一不可否则命令会打印错误提示并退出。动作可以组合-p打印到屏幕可以与其他任一动作搭配使用即同时打印 覆盖或打印 复制但-o覆盖与-c复制不能同时使用。-c/--copy的命名规则新文件名 原文件名去掉扩展名后追加下划线 新语言的 2 字母代码。例如把test_1.py翻译成日语ja并复制将生成test_1_ja.py。这一逻辑在 translator.py 中通过MD_F.get_locale_code(new_lang)与_ locale .py拼接实现并且会智能处理文件本身已经是某种语言版本的情况如test_1_ja.py再次翻译时会以test_1为基底重新命名避免出现test_1_ja_zh.py这类嵌套后缀。-n选项仅在-p打印动作时生效用于在输出的代码行前显示行号。文件校验被翻译的文件必须是.py文件且内容中必须包含def test_或from seleniumbase否则命令会报错not a valid SeleniumBase test file!。输出美化-p打印模式使用 rich 库对翻译结果进行语法高亮monokai 主题并针对中文、日文、韩文等全角字符做了双宽度计算get_width()函数会把 CJK 字符按 2 个字符宽度计算从而在控制台中实现精确的自动换行与对齐不会因全角字符导致排版错乱。翻译工作的核心流程从源码实现看seleniumbase translate的翻译逻辑集中在 translator.py 的process_test_file()函数中它逐行处理测试文件并完成三类替换import 行替换当行以from seleniumbase开头且包含import时用MD_F.get_import_line(new_lang)匹配并替换为对应语言的 import 语句普通BaseCase与MasterQA两种 import 均被支持。类定义替换当检测到class 类名(父类):且父类属于 10 种语言的测试基类之一时把父类替换为目标语言的父类。因此类名可以保持不变只切换父类语言。方法调用替换当行内出现self.xxx(且xxx能在主字典MD.md中查到当前语言的对应方法名时将其替换为目标语言的方法名。替换是按字典遍历完成的同一行中出现多个self.方法时也会逐一替换例如self.assert_true(Name in self.get_title())这类嵌套调用。此外翻译器还会保留行尾注释、自动移除 flake8 的# noqa跳过标记因为翻译后的新行通常已满足行宽要求。若目标语言与原语言相同命令会提示was already in [语言]!且不做任何改动若文件中根本没有 SeleniumBase 相关的 import 与基类则会提示需要先包含from seleniumbase ...与受支持语言的 BaseCase 导入。四、多语言在 SeleniumBase 生态中的延伸翻译测试能力并非孤立功能它与项目其他模块是打通的与 MasterQA 的结合seleniumbase/translate/master_dict.py中还维护了 10 种语言的MasterQA_中文、MasterQA_Nederlands、MasterQA_日本語等本地化父类意味着基于 MasterQA 的人工验证测试同样可以用本地化语言编写。与 pytest 生态完全兼容翻译后的测试类仍继承自BaseCase因此 SeleniumBase 的 pytest 插件、fixture、报告、截图等能力见 examples/translations/pytest.ini 与 seleniumbase/plugins均对其生效。安装集成seleniumbase.translate子包在 setup.py 中被正式声明为项目包的一部分因此通过 pip 安装 SeleniumBase 后即可直接使用翻译功能。五、使用建议与注意事项两种使用方式按需选择如果团队本身就是多语言、国际化团队建议直接用手写本地化测试类的方式编写测试语义直观、便于非英语开发者评审如果已有大量英文测试存量则优先使用seleniumbase translate test.py --zh -c一键生成目标语言版本再人工校对参数与断言内容。注意方法名与参数的对应关系翻译只替换方法名不替换参数。使用本地化方法时务必对照 seleniumbase/translate/chinese.py 中每个方法上方的注释如# assert_text(text, selector)确认参数顺序。文件名命名规范配合-c复制翻译时新文件名会自动追加语言代码后缀如_ja、_zh且该后缀能被翻译器识别重复翻译时不会叠加后缀。运行前提多语言测试需要正确安装 SeleniumBase 及对应浏览器驱动参见 help_docs/install.md 与 help_docs/webdriver_installation.md并在项目根目录或示例目录下使用 pytest 运行示例配置可参考 examples/pytest.ini 与 examples/translations/pytest.ini。六、参考资源关联文档help_docs/translations.md多语言示例目录examples/translations内含中、日、韩、俄、法、意、葡、西、荷等语言的实际测试文件语言模块源码seleniumbase/translate/chinese.py、seleniumbase/translate/japanese.py10 个语言模块各对应一个文件翻译映射字典seleniumbase/translate/master_dict.py翻译 API 实现seleniumbase/translate/translator.py基础能力来源seleniumbase/fixtures/base_case.py【免费下载链接】SeleniumBaseAPIs for browser automation, testing, and bypassing bot-detection. Includes CDP Mode: A stealthy configuration for chromium that passes every bot detection test.项目地址: https://gitcode.com/GitHub_Trending/se/SeleniumBase创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考