无法从 Protractor 下载测试用例 return chrome://downloads/ 列表
Unable to return chrome://downloads/ list from a Protractor download test case
好吧,所以我前段时间写了这个函数,它运行良好。
基本上我正在下载一个文件,然后检查 chrome://downloads/ 中是否有 n 个项目以及文件名是否匹配
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);
}
};
今天我不得不重用它,但它抛出了一个错误:
Cannot read property 'get' of undefined
我认为问题在于下载。Manager 未定义。
Chrome api 有什么变化吗?有什么东西有了新名字?
我在官方 chrome 补丁说明中找不到任何相关文档。
我尝试查看下载对象,但找不到任何列出已下载项目的 property/method。
我不知道它最近是否发生了变化,但我注意到 getCabilities returns 作为主要对象的子对象的地图。可能是与此部分关联的 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], []);
我的基于 downloads.Manager
的代码也损坏了...我很高兴能知道它被删除的原因。
编辑:看到这里,有人遇到了同样的问题并且有一个修复:https://support.google.com/chrome/thread/28267973?hl=en
好吧,所以我前段时间写了这个函数,它运行良好。
基本上我正在下载一个文件,然后检查 chrome://downloads/ 中是否有 n 个项目以及文件名是否匹配
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);
}
};
今天我不得不重用它,但它抛出了一个错误:
Cannot read property 'get' of undefined
我认为问题在于下载。Manager 未定义。
Chrome api 有什么变化吗?有什么东西有了新名字?
我在官方 chrome 补丁说明中找不到任何相关文档。
我尝试查看下载对象,但找不到任何列出已下载项目的 property/method。
我不知道它最近是否发生了变化,但我注意到 getCabilities returns 作为主要对象的子对象的地图。可能是与此部分关联的 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], []);
我的基于 downloads.Manager
的代码也损坏了...我很高兴能知道它被删除的原因。
编辑:看到这里,有人遇到了同样的问题并且有一个修复:https://support.google.com/chrome/thread/28267973?hl=en