Reputation: 402
I followed the suggestions in this thread: Protractor e2e test case for downloading pdf file and the file is downloading properly, but the test is timing out before the compare/expect is reached.
var filename = 'somefilename';
var content = 'some content\r\nsome more content';
download.click();
browser.driver.wait(function() {
return fs.existsSync(filename);
}, 5000).then(function() {
expect(fs.readFileSync(filename, {encoding: 'utf8'})).toEqual(content);
});
It creates and downloads the file and then sits there for 5 seconds before continuing on. The message I get is:
Message:
Error: Wait timed out after 5000ms
Stacktrace:
Error: Wait timed out after 5000ms
at Array.forEach (native)
From: Task: <anonymous wait>
at /path/to/test/e2e/scenarios.js:337:28
at Array.forEach (native)
Where line 337 is the browser.driver.wait line.
I tried doing it without the browser.driver.wait since the download is actually very quick since the file is just two short line by doing the following:
expect(fs.existsSync(filename));
browser.sleep(5000);
expect(fs.readFileSync(filename, {encoding: 'utf8'})).toEqual(content);
but it says that the filename doesn't exist for readFileSync and I assume this is because the file is not downloaded yet and the browser.sleep(5000) doesn't do anything.
Is there another way to do promises in protractor? Or can anyone clue me in as to why this might not be working? I'm running Protractor 2.1.0. I was running 1.0.0 and updated everything before trying again, but alas, it still isn't working.
Best regards, Julie
Upvotes: 1
Views: 3016
Reputation: 402
I figured out the problem. My filename didn't contain the path that I set in the 'default_directory' of my protractor-conf.js file. Once I put in the whole path, it worked. Boy do I feel silly!
Upvotes: 3