【发布时间】:2020-07-13 08:44:15
【问题描述】:
我需要知道 puppeteer 如何处理点击对象,以及 Chromium DevTools API。我尝试自己研究它,发现自己无法找到处理它的实际代码。
我需要知道的原因是我正在开发一个包装器来测试代码中的事件以测试网页,并且正在寻找实现事件处理例程而不是使用 puppeteers 事件接口(点击和点击悬停,以及其他可能需要的事件,如触摸事件或滚动)
这是我已经走了多远:
Puppeteer API 使用 DevTools 的 Frame Logic 来联系 API: https://github.com/puppeteer/puppeteer/blob/master/lib/Page.js
/**
* @param {string} selector
* @param {!{delay?: number, button?: "left"|"right"|"middle", clickCount?: number}=} options
*/
click(selector, options = {}) {
return this.mainFrame().click(selector, options);
}
/**
* @return {!Puppeteer.Frame}
*/
/**
* @param {!Protocol.Page.Frame} framePayload`
*/
_onFrameNavigated(framePayload) {
const isMainFrame = !framePayload.parentId;
let frame = isMainFrame ? this._mainFrame : this._frames.get(framePayload.id);
assert(isMainFrame || frame, 'We either navigate top level or have old version of the navigated frame');
// Detach all child frames first.
if (frame) {
for (const child of frame.childFrames())
this._removeFramesRecursively(child);
}
if (isMainFrame) {
if (frame) {
// Update frame id to retain frame identity on cross-process navigation.
this._frames.delete(frame._id);
frame._id = framePayload.id;
} else {
// Initial main frame navigation.
frame = new Frame(this, this._client, null, framePayload.id);
}
this._frames.set(framePayload.id, frame);
this._mainFrame = frame;
}
这是我所得到的,因为我试图查找页面协议,但我无法弄清楚那里发生了什么。
我们将不胜感激,即使是在研究中。
【问题讨论】:
标签: testing events click puppeteer chromium