diff --git a/app/package.json b/app/package.json index 09b21bb..2dd4dce 100644 --- a/app/package.json +++ b/app/package.json @@ -6,7 +6,7 @@ "scripts": { "build": "yarn rebuild && webpack --mode production", "dev": "node_modules/.bin/webpack-dev-server --mode development --progress", - "rebuild": "cd node_modules/heapdump && node-gyp rebuild --target=5.0.0 --arch=x64 --dist-url=https://atom.io/download/electron; cd -" + "rebuild": "cd node_modules/heapdump && node-gyp rebuild --target=5.0.0 --arch=x64 --dist-url=https://atom.io/download/electron || echo Could not build heapdump; cd -" }, "author": "", "license": "CC-BY-ND-4.0", diff --git a/backend/src/ConfigStorage.ts b/backend/src/ConfigStorage.ts index 5ea262f..1e48cad 100644 --- a/backend/src/ConfigStorage.ts +++ b/backend/src/ConfigStorage.ts @@ -1,13 +1,15 @@ import * as FileAsync from 'lowdb/adapters/FileAsync' +import * as fs from 'fs-extra' import * as lowdb from 'lowdb' +import * as path from 'path' import { backendEvents } from '../../events' import { + makeStorageAcknowledgementEvent, makeStorageResponseEvent, storageClearEvent, storageLoadEvent, - storageStoreEvent, - makeStorageAcknowledgementEvent -} from '../../events/StorageEvents' + storageStoreEvent + } from '../../events/StorageEvents' export default class ConfigStorage { private file: string @@ -17,6 +19,10 @@ export default class ConfigStorage { } private async getDb() { + const pathInfo = path.parse(this.file) + + // Ensure that Settings dir exists + await fs.mkdirp(pathInfo.dir) const adapter = new FileAsync(this.file) if (!this.database) { this.database = await lowdb(adapter) diff --git a/src/spec/demoVideo.ts b/src/spec/demoVideo.ts index 6e175bc..f29e5e8 100644 --- a/src/spec/demoVideo.ts +++ b/src/spec/demoVideo.ts @@ -24,9 +24,6 @@ import { hideText, showText, sleep, - getHeapDump, - countInstancesOf, - ClassNameMapping } from './util' process.on('unhandledRejection', (error: Error) => { @@ -59,7 +56,12 @@ async function doStuff() { await createFakeMousePointer(browser) // Wait for Username input to be visible - await browser.$(`//label[contains(text(), "Username")]/..//input`) + let inputField = undefined + let start = Date.now() + let maxWaitDuration = 30000 + while ((!inputField || !inputField.isExisting) && ((Date.now() - start) < maxWaitDuration)) { + inputField = await browser.$(`//label[contains(text(), "Username")]/..//input`) + } const scenes = new SceneBuilder() await scenes.record('connect', async () => { await connectTo('127.0.0.1', browser) diff --git a/src/spec/util/index.ts b/src/spec/util/index.ts index 4a5d72f..7389cc5 100644 --- a/src/spec/util/index.ts +++ b/src/spec/util/index.ts @@ -57,7 +57,7 @@ export async function moveToCenterOfElement(element: Element, browser: Bro const js = `window.demo.moveMouse(${targetX}, ${targetY}, ${duration});` await browser.execute(js) await sleep(duration) - await sleep(20, true) + await sleep(250, true) await element.moveTo() }