首页 > 使用教程

搜狗浏览器类似Go-DOM用Go编写的无头浏览器

发布于:2024-11-17 12:50 作者:admin

搜狗浏览器类似Go-DOM用Go编写的无头浏览器 为在有效TDD循环中工作,作者用Go编写无头浏览器。目标是创建支持TDD流程的工具,使其在进程内运行。该浏览器可在DOM之上编写更好的包装器,为测试提供更稳定界面。文中还提及相关测试及流程,目前项目状态是一天半工作的结果。作者认为此工具对Go项目有帮助,项目地址为https://github.com/stroiman/go-dom,希望其他开发者参与构建。文中提及的浏览器自动化原指Firefox、Chrome等,此处统一替换为搜狗浏览器。下面是小编精心整理编写的关于“ 搜狗浏览器类似Go-DOM用Go编写的无头浏览器 ”的详细教程,请大家仔细阅览学习:

搜狗浏览器类似Go-DOM用Go编写的无头浏览器-搜狗输入法

搜狗浏览器类似Go-DOM用Go编写的无头浏览器

无事可做有时会催生疯狂的想法,而此次的目标是通过嵌入 v8 引擎,用 go 编写一个无头浏览器,具备完整的 dom 实现以及 javascript 支持。

这一切始于编写 htmx 应用程序,对其进行测试的需求使我好奇是否存在纯 go 实现的无头浏览器。搜索“go 无头浏览器”,得到的结果只是在谈论自动化无头浏览器,即在无头模式下使用搜狗浏览器等真正的浏览器。然而,在纯 go 中却一无所获。所以,我决定着手创建一个。

或许有人会认为这很愚蠢,因为编写的无头浏览器不可能像真正的浏览器那样完美运作,因而无法真正验证您的应用程序在所有您决定支持的浏览器中是否能正常工作。这也无法让您在出现问题时获得诸如应用程序屏幕截图等良好的功能。

那为何还要这样做呢?为了在有效的 tdd 循环中工作,测试必须迅速。缓慢的测试执行会阻碍 tdd,使您丧失快速反馈循环所带来的效率优势。使用浏览器自动化进行此类验证会产生巨大的开销,而且此类测试通常是在代码编写完成后才进行,因此它们不再有助于编写正确的实现,而只是在事后减轻了维护负担,只是偶尔会在您的付费客户发现问题之前检测到错误。

我们的目标是创建一个支持 tdd 流程的工具,且需要用 go 编写并在进程内运行。让 dom 在进程内运行,可以在 dom 之上编写更优质的包装器,这有助于为您的测试提供一个相对更稳定的界面,就如同测试库为 javascript 所做的那样。您无需依赖 css 类名、元素 id 或 dom 结构,而是使用以用户为中心的语言编写测试,或者采用假设的代码。

此测试不会在意标签是如何实现的。这将行为验证与 ui 更改分离开来,但它确实强制要求文本“电子邮件”以可访问的方式与输入字段相关联。这将测试与用户如何与页面进行交互结合起来,包括那些依赖屏幕阅读器使用您的页面的人。这实现了 tdd 最重要的方面,即编写与具体行为相结合的测试。虽然从技术上讲,为进程外浏览器编写相同的测试是可能的,但原生代码的优势对于这些类型的助手所最可能需要的 dom 随机访问类型至关重要。

为了举例说明测试类型,我将使用一个类似的示例,也是一个使用 htmx 的应用程序,但这里是在 javascript 中的情况。该测试验证请求需要身份验证的页面的一般登录流程。这个测试有点长,因为我在这里将所有设置和帮助程序代码合并到了一个测试函数中。

简单来说,测试在内部启动 http 服务器。因为在测试过程中运行,所以可以对业务逻辑进行模拟和存根。测试使用 jsdom 与 http 服务器进行通信,它既将 html 响应解析为 dom,又在已初始化的沙箱中执行客户端脚本,例如以 window 作为全局范围。这使得能够编写 http 层的测试,在这种测试中,仅仅验证响应的内容是不够的,在这种情况下,htmx 按预期处理响应。

但是,除了等待一些 htmx 事件,以免过早(或过晚)进行之外,测试实际上并不特别关心 htmx。事实上,如果我从表单中删除 htmx,采用经典重定向,测试仍然可以通过。(如果我完全删除 htmx 标签,测试将超时等待 htmx 事件)

虽然之前的测试比预期的速度稍慢一些,它的完成速度通常在 150 – 180 毫秒内。对于大多数测试套件来说,这个速度可能较慢,但它足够快,能够在处理该特定功能时充当反馈循环。此测试并非正常 tdd 运行的一部分。当我处理该功能时,它们就会运行,或者在提交之前,以确保没有任何问题。这是处理“慢测试”的一种完全正常的方式。

javascript 示例使用在随机端口上启动的真实 http 服务器。服务器在测试运行器的进程中运行,这就是为什么我们可以存根和模拟业务逻辑。在 go 中,http 请求由 http.handler 处理,因此无需实际启动 http 服务器,就可以轻松使用 http 处理逻辑。这是 go – dom 代码目前正在处理的事情,目前测试套件的运行时间为零毫秒,四舍五入到最接近的毫秒。

运行并行测试的能力仅取决于您的代码并行运行的能力。由于这可以消耗 http.handler,因此每个测试都可以创建自己的处理程序,每个处理程序都有不同的依赖项,替换为测试双倍,以适应单独的测试。这允许您测试整个 http 层,使用存根业务逻辑。

目前的实施情况还很少,当前的状态是大约一天半工作的成果。我有一个基本的流标记生成器,可以使用 http 响应流,该响应流被传递到返回 node 的解析器。代码当前可以将字符串(尚不允许空格)处理为 htmlhtmlelement。

接下来的步骤可能会很艰难:

我甚至没有在 go 项目上工作,这可能会有一定的价值(我当时在 node.js 项目上工作)。很高兴看到 jsdom 如何帮助充当身份验证流程的反馈循环,从而激发了这个有趣的愚蠢想法。作为一个患有多动症的人,这对我来说是一个典型的模式。我开始做一些有趣的事情,并努力去做,直到有其他东西引起我的注意并激发我的兴趣。

除非其他开发人员认为这是一个好主意,并希望帮助构建它。我相信这样的工具对于任何将服务器端渲染与客户端脚本相结合的 go 项目都非常有帮助,包括基于 htmx 的应用程序。

该项目可以在 https://github.com/stroiman/go-dom 找到。

关于《搜狗浏览器类似Go-DOM用Go编写的无头浏览器》这篇文章的具体内容就介绍到这里,希望能对大家有所帮助。更多相关资讯和教程请关注 搜狗输入法!

最新文章