目前,我正在尝试创建一些E2E测试,这些测试需要在线登录Excel,然后上传扩展程序。
我能够登录,打开Excel并单击“上传插件”按钮,但是,我无法再继续了。
到目前为止,我已经发现有2个iframe,一个嵌套在另一个iframe中。
打开Excel后,我将访问第一个
let targetIFrame = await this.page.frames().find(f => f.name() === 'sdx_ow_iframe');
关于第二个问题的棘手部分是,它仅在我单击“上传插件”按钮后才出现在DOM中,并且嵌套在我上面访问的那个中。
我尝试了不同的延迟等,但是看起来木偶没有看到它。
答案 0 :(得分:0)
根据我的研究,您可以构建实现以查找包含在父框架中的iframe。
请测试以下代码:
/**
* @return {!Promise<ElementHandle>}
*/
async ownerFrame() {
if (!this._frame._parentFrame)
throw new Error('No parent frame');
const rootElementHandle = await this._frame.$('*');
const rootElementDescriptionHandle = await this._client.send('DOM.describeNode', { objectId: rootElementHandle._remoteObject.objectId });
const parentsIframes = await this._frame._parentFrame.$$('iframe');
if (!parentsIframes.length)
throw new Error('No iframe elements found in parent');
return parentsIframes.find(async parentsIframe => {
const iframeDescription = await this._client.send('DOM.describeNode', { objectId: parentsIframe._remoteObject.objectId, pierce: true, depth: 2 });
const iframesRootDescription = iframeDescription.node.contentDocument.children[0];
return iframesRootDescription.backendNodeId === rootElementDescriptionHandle.node.backendNodeId;
});
}