Selenium 和 WebDriver

    Spectron 是 Electron 官方支持的 ChromeDriver 测试框架。 它是建立在 的顶层,并且 帮助你在测试中访问 Electron API 和绑定 ChromeDriver。

    1. const Application = require('spectron').Application
    2. const assert = require('assert')
    3. const myApp = new Application({
    4. path: '/Applications/MyApp.app/Contents/MacOS/MyApp'
    5. })
    6. const verifyWindowIsVisibleWithTitle = async (app) => {
    7. await app.start()
    8. try {
    9. const isVisible = await app.browserWindow.isVisible()
    10. // 验证窗口是否可见
    11. assert.strictEqual(isVisible, true)
    12. // 获取窗口标题
    13. const title = await app.client.getTitle()
    14. // 验证窗口标题
    15. assert.strictEqual(title, 'My App')
    16. } catch (error) {
    17. console.error('Test failed', error.message)
    18. }
    19. // 停止应用
    20. await app.stop()
    21. }
    22. verifyWindowIsVisibleWithTitle(myApp)

    WebDriverJs 是一个可以配合 WebDriver 做测试的 node 模块,我们会用它来做个演示。

    记住 9515 这个端口号,我们后面会用到

    2. 安装 WebDriverJS

    1. $ npm install selenium-webdriver

    在 Electron 下使用 selenium-webdriver 和其平时的用法并没有大的差异,只是你需要手动设置连接 ChromeDriver,以及 Electron 的路径:

    WebdriverIO 也是一个配合 WebDriver 用来测试的 node 模块.

    1. Start ChromeDriver

    1. $ npm install electron-chromedriver
    2. $ ./node_modules/.bin/chromedriver --url-base=wd/hub --port=9515
    3. Starting ChromeDriver (v2.10.291558) on port 9515
    4. Only local connections are allowed.

    记住 9515 这个端口号,我们后面会用到

    3. 连接到 chrome 驱动

    1. const options = {
    2. port: 9515, // "9515" is the port opened by chrome driver.
    3. desiredCapabilities: {
    4. browserName: 'chrome',
    5. 'goog:chromeOptions': {
    6. binary: '/Path-to-Your-App/electron', // Path to your Electron binary.
    7. args: [/* cli arguments */] // Optional, perhaps 'app=' + /path/to/your/app/
    8. }
    9. }
    10. }
    11. const client = webdriverio.remote(options)
    12. client
    13. .init()
    14. .url('http://google.com')
    15. .setValue('#q', 'webdriverio')
    16. .click('#btnG')
    17. .getTitle().then((title) => {
    18. console.log('Title was: ' + title)
    19. .end()

    无需重新编译 Electron,只要把 app 的源码 Electron的资源目录 里就可直接开始测试了。

    Alternatively, pass an argument to run with your Electron binary that points to your app’s folder. 这就消除了将您的应用复制粘贴到 Electron 资源目录的必要性。