Node.js ENOENT error explanations
  Recently when using the saveScreenshot function of
  WebdriverIO, I came across the following Node error:
ENOENT: no such file or directory, open '{filepath}'
There are a lot of reasons this error could occur, all of which I looked at when trying to solve the problem. Because they are widely spread across the internet, and I couldn't find anyone addressing the problem I actually had, I thought I would enumerate them here.
I've also given some example code for you to look at and play with. Reproducing the errors may help you figure out what causes them.
1. You're trying to read a file that doesn't exist
As the error message suggests, the file you're trying to read isn't there.
  To fix: Use the first parameter of the (e.g.
  readFile) function to catch the error. Perhaps use
  fs.stat or fs.access to check for access
  first.
2. You're trying to create a file in a directory that doesn't exist
  Node won't create your intermediary directories. So if you try to
  create a file logs/pushout.log and
  logs directory doesn't exist, you'll see this
  error.
  To fix: Create the logs directory first
  with fs.mkdir.
3. You're using a relative path incorrectly
  This often is related to Issue 2, but without the developer's
  knowledge. Paths specified in fs functions are relative
  to the _currently executing script location_, not the file where the
  code is called from. So if index.js calls
  processes/makeLogFile.js, then the path used is relative
  to index.js.
  To fix: Either use __dirname to get the
  path that the code is being written in, and add to that, or add
  subdirectories as necessary.
4. You're trying to create a file that can't exist
This was my problem. I had the following, fairly self-explanatory code:
driver.saveScreenshot('./screens/error-'   (new Date()).toISOString()   '.png');
  This was supposed to create a unique screenshot in the
  screens directory but I got the ENOENT error instead.
  What I didn't account for is that
  toISOString() creates a time format with colons in it,
  and Windows will not allow colons in file names. So the error
  wasn't really saying that the file doesn't exist, but
  that it simply couldn't.
  To fix: My fix was just using
  replace(/:/g, '-') to turn all the colons into
  hyphens. But, generally, fix this by making sure there are no
  disallowed characters in the file name.
I hope these explanations help you. If you've got any questions, corrections or additions, please open an issue on the GitHub repository containing the example code.