Javascript 无法返回chrome://downloads/ 从量角器下载测试用例的列表

Javascript 无法返回chrome://downloads/ 从量角器下载测试用例的列表,javascript,selenium,google-chrome,download,protractor,Javascript,Selenium,Google Chrome,Download,Protractor,好的,我不久前就编写了这个函数,它运行得很好。 基本上,我下载一个文件,然后检查其中是否有n个项目chrome://downloads/ 如果文件名匹配 this.checkDownload = async function checkDownload(fileNameRegEx) { var regex = new RegExp(fileNameRegEx); if ((await browser.getCapabilities()).get('browserName') ==

好的,我不久前就编写了这个函数,它运行得很好。
基本上,我下载一个文件,然后检查其中是否有n个项目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未定义。
ChromeAPI有什么变化吗?有些东西有了新名字?
我在官方的chrome补丁说明中找不到任何关于这个的文档。

我尝试查看downloads对象,但找不到任何列出已下载项目的属性/方法。

我无法说明它最近是否发生了更改,但我注意到getCabilities返回一个映射作为主对象的子对象。生成错误的可能是与此部分关联的
get()
,而不是执行脚本中的部分。你能试着像下面那样添加“['map\']吗

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

您可以通过选择器获取第一个元素(或更改选择器以获取任何其他元素):

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;");

查看以下答案

如果您想检查是否有下载并且下载完成,这是可行的:

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], []);
我基于
下载的代码。Manager
也坏了。。。我很想知道它被移除的原因


编辑:请参见此处,有人遇到了相同的问题,并且有一个修复程序:

Chrome版本80.0.3987.87(正式版本)(64位)无法读取未定义的属性“get”来自“'return downloads.Manager.get().items”。我在Chrome版本7x上进行了测试,它返回和object,但在8x中没有定义。我猜他们不赞成它或其他什么。谢谢你的建议!谢谢这正是我想要的。问我的那个人:)你提供的链接现在死了。能得到一个解释或解决方案会很好