Strong Points You can access any DOM via Webdriver.io. You can call any Electron API in your spec. No need setup script.(use Chromium inside Electron) Support CI services.(Travis, AppVeyor, etc)
Spectron is nice. But it can't access Native API. (latest v3.7.2) So it can't mock Menu, Dialog, etc modules... https://github.com/electron/spectron/issues/94
I created two modules to resolve it. spectronfakemenu https://github.com/joere/spectronfakemenu spectronfakedialog https://github.com/joere/spectronfakedialog
How do they work? Electron provides 'require' option same as Node.js. It can preload a module before run main script. These modules inject extra IPC and provide API which call or mock Native API inside your specs.