我想在Google Chrome上运行e2e文件下载测试。我提到了几个帖子,包括Protractor - Jasmine - Download file to a relative path,Protractor e2e test case for downloading pdf file和Setting chromedriver preferences on protractor tests,但他们并没有让我满意。
以下是我的量角器配置的简短介绍。
...
'os': 'Windows',
'os_version': '8.1',
'browserName': 'Chrome',
'version': '55',
'chromeOptions': {
args: ['--no-sandbox', '--test-type=browser'],
prefs: {
download: {
'prompt_for_download': false,
'directory_upgrade': true,
'default_directory': '/tmp'
}
}
}
...
这是我的测试规范。
it('file download test', () => {
let filePath = path.resolve('/tmp/' + download-filename);
// unlink(filePath);
// click on a link by invoking anchor_element.click()
// at the moment, file download will be done on chrome
// with no prompt experienced
// wait until file has been downloaded,
// (in fact, download can be finished within a sec)
browser.wait(
() => fs.existsSync(filePath),
10000
).then(() => {
// and then expectations here
});
});
因此,对于我的情况,文件已成功下载,但chromeOptions
似乎不起作用,因为文件未下载到'default_directory'
中给出的目录中。
我错了什么?或者在我的情况下,使用chrome下载文件的位置,默认情况下?
我正在使用BrowserStack for selenium服务器并运行本地测试。
我正在使用getMultiCapabilities
选项配置具有多种功能的量角器。
希望有人会给我一些关键的提示。
答案 0 :(得分:3)
请在conf.js中添加以下代码
prefs: {
download: {
'prompt_for_download': false,
'directory_upgrade': true,
'default_directory': downloadsPath
}
}
请参考首选项中的'downloadsPath'。
function checkValue() {
if (remainingTime < 10) {
document.getElementById("leading-zero").style.display = "inline";
} else {
document.getElementById("leading-zero").style.display = "none";
}
}
我希望这会有所帮助。
由于
答案 1 :(得分:0)
尝试将MyObject objUnderTest = new MyObject();
MethodInfo methodInfo = typeof(MyObject).GetMethod("SomePrivateMethod", BindingFlags.NonPublic | BindingFlags.Instance);
object[] parameters = {"parameters here"};
methodInfo.Invoke(objUnderTest, parameters);
替换为'default_directory': '/tmp'
答案 2 :(得分:0)
由于测试在不同的服务器上运行,因此不会在本地计算机上进行下载。如果硒实例在同一台计算机上,那么您的方法将很好地工作。通过在配置文件中删除硒地址再尝试一次,然后添加“ directconnect:true” 这样,您就可以将文件下载到所需的路径。
但是对于相同的用例,我指的是:Remote File Downloads How to download a file using the remote selenium webdriver?
答案 3 :(得分:0)
您必须在default_directory中提供绝对路径。
答案 4 :(得分:0)
您可以在项目中创建一个下载文件夹并为Chrome设置。 单击下载按钮后,需要浏览器等待功能来下载文件。我不知道如何在FireFox上使用它,但是Chrome通过了。我认为FireFox的偏好与Chrome的偏好不同。
要打开firefox的首选项:打开FF并粘贴about:config
我认为您应该使用此:
{
browserName: 'chrome',
acceptInsecureCerts: true,
chromeOptions: {
args: [
// "--headless",
],
prefs: {
'download': {
'prompt_for_download': false,
'directory_upgrade': true,
'default_directory': process.cwd() + "/resources/test/download",
},
},
},
}
您可以将default_directory
与process.cwd()
或__dirname
一起使用绝对路径(__dirname
= _ _ d a r a m e)
此外,如果您想在firefox中的about:config中找到所需的内容,则可以使用https://www.freeformatter.com/mime-types-list.html 获得Firefox偏好的价值。
答案 5 :(得分:0)
这解决了我的问题:
npm i webdriver-manager@latest
之后,下载的文件出现在default_directory