单步调试找到 cy.visit 的实现源代码(一) - 找到了 BlueBird

简介: 单步调试找到 cy.visit 的实现源代码(一) - 找到了 BlueBird

这里的 stack_utils__WEBPACK_IMPORTED_MODULE_5_,

1dc618a0ed9580ce8bfa6facb208c08f.png

这些 imported module 可以在文件头看到:

5d4c6812c8535adbb050f4ddf2e1bce8.png

harmony import:

46a9d80a6e05e4e3b19d57a0ee70bcdf.png

cypress_runner.js 源码里这个 harmony import 的含义:


https://stackoverflow.com/questions/52871611/what-is-harmony-and-what-are-harmony-exports

其实就是 ES6 import 语法:


https://en.wikipedia.org/wiki/ECMAScript#4th_Edition_(abandoned)


As the first “ECMAScript Harmony” specification, it is also known as “ES6 Harmony”.

Harmony 是项目代号


创建一个 chainer 实例,以便稍后访问:

66ba272a0bfc97be54a5fa679e3d5482.png

chainer 实例的创建:

1dc618a0ed9580ce8bfa6facb208c08f.png

调用 chainer 实例的 visit 方法:


chainer 实例原型链上有个 visit 方法:

5d4c6812c8535adbb050f4ddf2e1bce8.png

参数为 visit 传入的 url 和 beforeHook:

46a9d80a6e05e4e3b19d57a0ee70bcdf.png

这里 enqueue 的是创建好的 chainer id 和对应 command 的 name,参数。

66ba272a0bfc97be54a5fa679e3d5482.png

单步调试进去:找到这个 commandFns 对象:


visit 的实现也在里面:


这里能看到 visit 实现的具体位置:

1dc618a0ed9580ce8bfa6facb208c08f.png

单击这个超链接进去,设置一个断点:

5d4c6812c8535adbb050f4ddf2e1bce8.png

然后继续执行 Cypress,断点触发,可以看到这个 visit 命令是如何得到调度的:

46a9d80a6e05e4e3b19d57a0ee70bcdf.png

这个 options 填充的代码,很像 AJAX 或者 fetch API 调用之前的 option 或者 header 填充准备工作:

66ba272a0bfc97be54a5fa679e3d5482.png

先把一个箭头函数赋给常量 const visit,然后立即执行这个箭头函数:

1dc618a0ed9580ce8bfa6facb208c08f.png

我们调用 cy.visit 时指定的 url 到哪里去了呢?

5d4c6812c8535adbb050f4ddf2e1bce8.png

继续执行,进入 then 指定的回调函数:

46a9d80a6e05e4e3b19d57a0ee70bcdf.png

66ba272a0bfc97be54a5fa679e3d5482.png

下图代码的意思是,调用 ../driver/src/cypress/utils.ts 文件里的工具函数:

1dc618a0ed9580ce8bfa6facb208c08f.png

通过闭包维护的 url:

5d4c6812c8535adbb050f4ddf2e1bce8.png

为这个 url 封装一个对象:

46a9d80a6e05e4e3b19d57a0ee70bcdf.png

终于看到曙光了,requestUrl 函数,看名字判断,应该离我们寻找的目标很接近了:

66ba272a0bfc97be54a5fa679e3d5482.png

requestUrl 函数的实现:

1dc618a0ed9580ce8bfa6facb208c08f.png

当这个函数触发时,已经从 url 得到回应了,所以这里并不是我们要找的函数:

5d4c6812c8535adbb050f4ddf2e1bce8.png

收到的回应:

46a9d80a6e05e4e3b19d57a0ee70bcdf.png

这个 bluebird 是什么鬼?

1dc618a0ed9580ce8bfa6facb208c08f.png

5d4c6812c8535adbb050f4ddf2e1bce8.png

46a9d80a6e05e4e3b19d57a0ee70bcdf.png






目录
相关文章
|
7月前
|
资源调度 前端开发
关于 Cypress 的启动和 cy.visit 的调试
关于 Cypress 的启动和 cy.visit 的调试
107 0
|
PyTorch 算法框架/工具 Python
成功解决python.exe 无法找到程序入口 无法定位程序输入点
成功解决python.exe 无法找到程序入口 无法定位程序输入点
成功解决python.exe 无法找到程序入口 无法定位程序输入点
|
7月前
|
Web App开发 前端开发 JavaScript
如何通过单步调试的方式找到引起 Fiori Launchpad 路由错误的原因试读版
如何通过单步调试的方式找到引起 Fiori Launchpad 路由错误的原因试读版
31 0
|
3月前
小技巧分享:如何使用动态断点快速找到成对的 ABAP 内存 IMPORT 和 EXPORT 的代码位置
小技巧分享:如何使用动态断点快速找到成对的 ABAP 内存 IMPORT 和 EXPORT 的代码位置
23 0
|
7月前
|
前端开发 JavaScript API
单步调试找到 cy.visit 的实现源代码(一) - 找到了 BlueBird
单步调试找到 cy.visit 的实现源代码(一) - 找到了 BlueBird
59 0
|
7月前
|
资源调度 Windows
单步调试找到 cy.visit 的实现源代码(二) - WebSocket?
单步调试找到 cy.visit 的实现源代码(二) - WebSocket?
48 2
|
7月前
|
调度 Windows
cy.visit 执行逻辑的单步调试
cy.visit 执行逻辑的单步调试
58 0
python.exe 无法找到入口 无法定位程序输入点
python.exe 无法找到入口 无法定位程序输入点
663 0
python.exe 无法找到入口 无法定位程序输入点
|
Windows
【Windows 逆向】OD 调试器工具 ( CE 中获取子弹动态地址前置操作 | OD 中调试指定地址的数据 )(一)
【Windows 逆向】OD 调试器工具 ( CE 中获取子弹动态地址前置操作 | OD 中调试指定地址的数据 )(一)
159 0
【Windows 逆向】OD 调试器工具 ( CE 中获取子弹动态地址前置操作 | OD 中调试指定地址的数据 )(一)