Ориентация на вложенный iframe с помощью кукловода - PullRequest
0 голосов
/ 29 августа 2018

В данный момент я пытаюсь создать несколько тестов E2E, которые требуют входа в Excel онлайн и затем загрузки расширения.

Мне удалось войти в систему, открыть Excel и нажать кнопку плагина загрузки, однако дальше я не могу.

До сих пор я выяснил, что есть 2 iframe, один вложенный в другой.

Я получаю доступ к первому, когда открываю Excel

let targetIFrame = await this.page.frames().find(f => f.name() === 'sdx_ow_iframe');

Сложность второй части заключается в том, что она появляется в DOM только после того, как я нажимаю кнопку «Загрузить плагин», и она вложена в ту, к которой я обращался выше.

Я пробовал разные задержки и т. Д., Но похоже, что кукловод не видит его.

1 Ответ

0 голосов
/ 30 августа 2018

Основываясь на моих исследованиях, вы можете построить реализацию, чтобы найти включение 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;
  });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...