Невозможно вернуть chrome: // downloads / list из тестового примера загрузки Protractor - PullRequest
3 голосов
/ 10 февраля 2020

Хорошо, поэтому я написал эту функцию некоторое время go, и она работала хорошо. В основном я загружаю файл, а затем проверяю, есть ли 1 элемент в chrome: // downloads / и совпадает ли имя файла

this.checkDownload = async function checkDownload(fileNameRegEx) {
    var regex = new RegExp(fileNameRegEx);
    if ((await browser.getCapabilities()).get('browserName') === 'chrome') {
        await browser.get('chrome://downloads/');
        const items = await browser.executeScript('return downloads.Manager.get().items_');
        expect(items.length).toBe(1);
        expect(items[0].file_name).toMatch(regex);
    }
};

И сегодня мне пришлось повторно использовать его, и он выдает ошибку :

Невозможно прочитать свойство 'get' из неопределенного

Я думаю, что проблема заключается в том, что загрузки. Manager не определено. Что-нибудь изменилось в Chrome api? У чего-то есть новое имя? Я не смог найти никакой документации по этому вопросу. Я попытался просмотреть объект загрузок, но не смог найти свойство / метод, в котором перечислены загруженные элементы.

Ответы [ 3 ]

2 голосов
/ 12 февраля 2020

Если вы хотите проверить, есть ли загрузки и они сделаны, это работает:

var items = document.querySelector('downloads-manager').shadowRoot.querySelectorAll('#downloadsList downloads-item');
  if (Array.from(items).every(i => i.shadowRoot.querySelector('#progress') == null || i.shadowRoot.querySelector('#progress').value === 100))
    return Array.from(items).reduce((acc, curr) => [...acc, curr.shadowRoot.querySelector('div#content #file-link').href], []);

Мой код, основанный на downloads.Manager, тоже сломался ... Было бы здорово иметь некоторая информация, почему он был удален.

edit : смотрите здесь, у кого-то была такая же проблема, и есть исправление: https://support.google.com/chrome/thread/28267973?hl=en

0 голосов
/ 12 февраля 2020

Вы можете получить первый элемент (или изменить селектор, чтобы получить любой другой элемент) через селектор:

const element = browser.executeScript("return document.querySelector('downloads-manager').shadowRoot.querySelector('downloads-item').shadowRoot.querySelector('a');");

Или получить текст элемента, добавив .innerText в конце

const elementWithText = browser.executeScript("return document.querySelector('downloads-manager').shadowRoot.querySelector('downloads-item').shadowRoot.querySelector('a').innerText;");

Посмотрите на следующий ответ { ссылка }

0 голосов
/ 11 февраля 2020

Я не могу сказать, изменился ли он недавно или нет, но я заметил, что getCabilities возвращает Map как дочерний элемент основного объекта. Это может быть get(), связанный с этой частью, которая генерирует ошибку, а не внутри скрипта выполнения. Можете ли вы попробовать добавить `['map_'] как показано ниже

if ((await browser.getCapabilities())['map_'].get('browserName') === 'chrome') {
...