Open krzkaczor opened 8 years ago
Any ideas?
I don't think dialogs can be tested well yet via ChromeDriver and Spectron. Will look into this further.
Same issue with dialog.showMessageBox
Also encountered this. Got around it with a super-simple mock version of dialog
that is used when the application is started with a test ENV. It works ok but it's very messy.
See #94 for a somewhat graceful way of mocking dialogs for the moment.
I guess we can't just use the webdriver alert accept/dismiss functionality? http://webdriver.io/api/protocol/alertAccept.html
it doesn't look like that works, but seems like I can use robotjs to send keypresses that are intercepted by the dialog so that I can hit enter and close the dialog etc., which is at least part of the job done I guess ...
issue is still there as discussed with webdriverio community https://github.com/electron/spectron/issues/236
This node package spectron-fake-dialog implements a technique that I thought worked pretty well https://www.npmjs.com/package/spectron-fake-dialog
Hi - are we now able to use the real dialog object instead of the mock?
Don't think so. I've been trying for the last couple of days but can't seem to find a way to mock dialogs.
Darn - here's a snippet of my code on how I'm mocking for now. I can probably clean this up, but it does the job for now. Basically it uses the NODE_ENV to decide to inject a mock dialog or not.
import path from "path"
import { Dialog, OpenDialogOptions, OpenDialogReturnValue } from "electron"
export const dialogMock: Dialog = {
showOpenDialog: (options: OpenDialogOptions) => {
const openDialogReturnValue: OpenDialogReturnValue = {
canceled: false,
filePaths: [
path.join(__dirname, "..", process.env.E2E_TEST_FOLDER),
],
}
return Promise.resolve(openDialogReturnValue)
},
} as any
import { onSelectFolderStart as _onSelectFolderStart } from "./integration/openDialog"
import { dialog, IpcMainEvent } from "electron"
import { dialogMock } from "../../../e2e/dialogMock"
// need to use mocked dialog (set from e2e test file) for spectron testing due to limitations of not being able to interact with OS dialogs
const dialogModule = process.env.NODE_ENV === "spectron" ? dialogMock : dialog
export const onSelectFolderStart = ((dialog) => (event: IpcMainEvent) =>
_onSelectFolderStart(dialog, event))(dialogModule)
And then I run my test using:
npm run NODE_ENV=spectron E2E_TEST_FOLDER=e2e-temp jest --config=jest.config.e2e.js
There's also the https://github.com/joe-re/spectron-fake-dialog though it didn't work with my code (maybe because of my factory function).
There is also spectron-dialog-addon which is a newer fork of spectron-fake-dialog but it only supports electron up to 6 and I am on electron 9 and I didn't get it to work.
I am opening dialog in my app like this:
And I cannot find way to select directory in tests. I tried using webdriverio's
keys
with no luck. I thought that maybe electron creates second window and that's why I can't interact with it but by usingclient.getWindowCount()
it founds only 1 window. Any ideas?