electron-userland / spectron

DEPRECATED: 🔎 Test Electron apps using ChromeDriver
http://electronjs.org/spectron
MIT License
1.68k stars 229 forks source link

Spectron: Deprecation Announcement #1045

Open VerteDinde opened 2 years ago

VerteDinde commented 2 years ago

Hey folks! This spring, we posted a warning that Spectron may cease working after Electron 14 (see this pinned issue: #896 ). I wanted to post an official update and announcement:

Beginning in February 2022, Spectron will be officially deprecated by the Electron team.

Why Deprecate Spectron?

Spectron currently has no active maintainers; while we've consistently put out new releases for each new version of Electron, Spectron has had very little maintenance and improvements for well over a year. Spectron now requires a major rewrite to continue working without relying on the external remote module.

We put out a call for community help in the spring, but have unfortunately not received interest in another person maintaining Spectron full-time. Thus, we've decided to deprecate Spectron, rather than leave developers wondering about the future state of the project and possibly dependent on an unsupported project.

Deprecation Timeline

The following is our timeline toward deprecation:

Following February 1st, 2022, we will continue to leave the Spectron repo up indefinitely, so that others are welcome to fork or use the existing code for their projects. We hope this will help provide a longer transition to any projects that still depend on Spectron.

I would like to maintain/rewrite Spectron!

There has been some discussion about forking and/or rewriting Spectron in the community, including issues like #1044 . We want to encourage that! If you have any interest in maintaining Spectron or contributing to this upstream repo, please respond to this issue.


Thanks all! We appreciate you using Spectron and Electron. 🙇‍♀️ We understand that many of you depend on Spectron for testing your apps, and we want to make this transition as painless for you as possible. If you have any questions or concerns about the deprecation plan, please let us know here.

suwi commented 2 years ago

"We want to make this transition as painless for you as possible" - transition to, any recommendations?

vladimiry commented 2 years ago

@suwi transition to "playwright" I guess, see details in #896.

MasterOdin commented 2 years ago

How well does playwright handle different versions of electron? Is there a need for a similar compatibility table as spectron has for different versions of electron?

tanshuai commented 2 years ago

"We want to make this transition as painless for you as possible" - transition to, any recommendations?

Check Playwright doc for Electron support.

I tried Playwright by created a minimal Playwright E2E Testing Sample with CI/CT based on GitHub Actions for Electron App and it seems to work better with the latest electron.

eric-burel commented 2 years ago

My feedback:

Eventually this seems to work, defining a tsconfig.json at the root of my e2e test folder:

{
    "extends": "../../tsconfig.json",
    "compilerOptions": {
    },
    "exclude": [
        "jest"
    ],
    "include": [
        "./**/*.spec.ts"
    ]
}

But to be confirmed, behaviour can be slightly erratic.

So I am almost there with Playwright but I seem to need a more recent version of Electron for "windows" to be detected as expected. Also I couldn't fix the bad interaction with Jest typings, that are global and clashes with expect.

eric-burel commented 2 years ago

Update: it does work with Electron v9+, it correctly gets the window from "firstWindow", but not for earlier versions. Which I guess is ok these days for people maintaining apps in the long run.

eric-burel commented 2 years ago

Hi guys, any idea how to grab dialogs with Playwright Electron? Eg when uploading a file? FileChooser doesn't seem to be the most appropriate, see https://github.com/microsoft/playwright/issues/5013, but the dialog doesn't appear as a window object either.

This package seems to address the issue, but I didn't test it yet: https://github.com/wsw0108/playwright-fake-dialog

I suspect also that keypress events are caught by the browser app but not electron menu, it might require some mocking/programmatic trigger as well. We can couple evaluate and getting the app menu to force triggering relevant actions.

Finally, console.log doesn't work in electronApp.evaluate, that's smth to be careful about when debugging.

Daveiano commented 2 years ago

@eric-burel Have you had a look into this comment? https://github.com/microsoft/playwright/issues/8278#issuecomment-1009957411

eric-burel commented 2 years ago

@eric-burel Have you had a look into this comment? microsoft/playwright#8278 (comment)

Yes that's basically the same code. I've managed to make it work with evaluate indeed, that's the goto solution to either mock the main process API or programmatically trigger it

christian-bromann commented 2 years ago

The WebdriverIO community has build a service for WebdriverIO to seamlessly run Electron UI tests in parallel and with all the features WebdriverIO provides. You can find the instructions here. Thanks to @goosewobbler for making this happen!