replace file-loader with assets to get demo mouse working again
fix mouse pointer
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
// const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer');
|
// const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer');
|
||||||
const HtmlWebpackPlugin = require('html-webpack-plugin');
|
const HtmlWebpackPlugin = require('html-webpack-plugin')
|
||||||
const webpack = require('webpack');
|
const webpack = require('webpack')
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
entry: {
|
entry: {
|
||||||
@@ -63,13 +63,8 @@ module.exports = {
|
|||||||
use: ['style-loader', 'css-loader'],
|
use: ['style-loader', 'css-loader'],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
test: /\.(png|jpg|gif)$/,
|
test: /\.(png|jpg|gif)$/i,
|
||||||
use: [
|
type: 'asset/resource',
|
||||||
{
|
|
||||||
loader: 'file-loader',
|
|
||||||
options: {},
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
},
|
||||||
// {
|
// {
|
||||||
// test: /\.node$/,
|
// test: /\.node$/,
|
||||||
@@ -101,4 +96,4 @@ module.exports = {
|
|||||||
// "react": "React",
|
// "react": "React",
|
||||||
// "react-dom": "ReactDOM"
|
// "react-dom": "ReactDOM"
|
||||||
},
|
},
|
||||||
};
|
}
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
import * as fs from 'fs'
|
import * as fs from 'fs'
|
||||||
import * as os from 'os'
|
import * as os from 'os'
|
||||||
|
import * as path from 'path'
|
||||||
|
|
||||||
import { ElectronApplication, Page, _electron as electron } from 'playwright'
|
import { ElectronApplication, Page, _electron as electron } from 'playwright'
|
||||||
|
|
||||||
import mockMqtt, { stop as stopMqtt } from './mock-mqtt'
|
import mockMqtt, { stop as stopMqtt } from './mock-mqtt'
|
||||||
@@ -33,7 +35,16 @@ async function doStuff() {
|
|||||||
console.log('Starting playwright/electron')
|
console.log('Starting playwright/electron')
|
||||||
|
|
||||||
// Launch Electron app.
|
// Launch Electron app.
|
||||||
const electronApp: ElectronApplication = await electron.launch({ args: [`${__dirname}/../../..`] })
|
const electronApp: ElectronApplication = await electron.launch({
|
||||||
|
args: [`${__dirname}/../../..`],
|
||||||
|
// recordVideo: {
|
||||||
|
// dir: path.join(__dirname, '..', 'playwright-videos'),
|
||||||
|
// size: {
|
||||||
|
// width: 1280,
|
||||||
|
// height: 720,
|
||||||
|
// },
|
||||||
|
// },
|
||||||
|
})
|
||||||
|
|
||||||
// Get the first window that the app opens, wait if necessary.
|
// Get the first window that the app opens, wait if necessary.
|
||||||
const page = await electronApp.firstWindow({ timeout: 3000 })
|
const page = await electronApp.firstWindow({ timeout: 3000 })
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ export async function clearOldTopics(browser: Page) {
|
|||||||
await sleep(1000)
|
await sleep(1000)
|
||||||
|
|
||||||
const deleteButton = await browser.locator('//button[contains(@title, "Delete retained topic")]')
|
const deleteButton = await browser.locator('//button[contains(@title, "Delete retained topic")]')
|
||||||
await moveToCenterOfElement(deleteButton, browser)
|
await moveToCenterOfElement(deleteButton)
|
||||||
await clickOn(deleteButton)
|
await clickOn(deleteButton)
|
||||||
await sleep(700)
|
await sleep(700)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ export async function publishTopic(browser: Page) {
|
|||||||
await clickOn(formatJsonButton)
|
await clickOn(formatJsonButton)
|
||||||
|
|
||||||
const publishButton = await browser.locator('#publish-button')
|
const publishButton = await browser.locator('#publish-button')
|
||||||
await moveToCenterOfElement(publishButton, browser)
|
await moveToCenterOfElement(publishButton)
|
||||||
await showText('Lamp turns on', 1000, browser, 'top')
|
await showText('Lamp turns on', 1000, browser, 'top')
|
||||||
await sleep(500)
|
await sleep(500)
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import { moveToCenterOfElement, clickOn, clickOnHistory, expandTopic, sleep, wri
|
|||||||
export async function showNumericPlot(browser: Page) {
|
export async function showNumericPlot(browser: Page) {
|
||||||
await expandTopic('kitchen/coffee_maker', browser)
|
await expandTopic('kitchen/coffee_maker', browser)
|
||||||
let heater = await valuePreviewGuttersShowChartIcon('heater', browser)
|
let heater = await valuePreviewGuttersShowChartIcon('heater', browser)
|
||||||
await moveToCenterOfElement(heater, browser)
|
await moveToCenterOfElement(heater)
|
||||||
await sleep(1000)
|
await sleep(1000)
|
||||||
// Refocus and click
|
// Refocus and click
|
||||||
heater = await valuePreviewGuttersShowChartIcon('heater', browser)
|
heater = await valuePreviewGuttersShowChartIcon('heater', browser)
|
||||||
@@ -12,7 +12,7 @@ export async function showNumericPlot(browser: Page) {
|
|||||||
|
|
||||||
await sleep(1000)
|
await sleep(1000)
|
||||||
let temperature = await valuePreviewGuttersShowChartIcon('temperature', browser)
|
let temperature = await valuePreviewGuttersShowChartIcon('temperature', browser)
|
||||||
await moveToCenterOfElement(temperature, browser)
|
await moveToCenterOfElement(temperature)
|
||||||
await sleep(1000)
|
await sleep(1000)
|
||||||
// Refocus and click
|
// Refocus and click
|
||||||
temperature = await valuePreviewGuttersShowChartIcon('temperature', browser)
|
temperature = await valuePreviewGuttersShowChartIcon('temperature', browser)
|
||||||
@@ -64,7 +64,7 @@ async function clickAway(name: string, browser: Page) {
|
|||||||
const settings = await browser.locator(
|
const settings = await browser.locator(
|
||||||
`//*[contains(@data-test-type, "ChartPaper")][contains(@data-test, "${name}")]`
|
`//*[contains(@data-test-type, "ChartPaper")][contains(@data-test, "${name}")]`
|
||||||
)
|
)
|
||||||
await moveToCenterOfElement(settings, browser)
|
await moveToCenterOfElement(settings)
|
||||||
await settings.press('Escape')
|
await settings.press('Escape')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -55,11 +55,9 @@ export async function setTextInInput(name: string, text: string, browser: Page)
|
|||||||
await input.fill(text)
|
await input.fill(text)
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function moveToCenterOfElement(element: Locator, browser: Page) {
|
export async function moveToCenterOfElement(element: Locator) {
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
const { x, y } = element
|
const { x, y, width, height } = await element.boundingBox();
|
||||||
// @ts-ignore
|
|
||||||
const { width, height } = element
|
|
||||||
|
|
||||||
const targetX = x + width / 2
|
const targetX = x + width / 2
|
||||||
const targetY = y + height / 2
|
const targetY = y + height / 2
|
||||||
@@ -67,12 +65,13 @@ export async function moveToCenterOfElement(element: Locator, browser: Page) {
|
|||||||
const duration = fast ? 1 : 500
|
const duration = fast ? 1 : 500
|
||||||
|
|
||||||
const js = `window.demo.moveMouse(${targetX}, ${targetY}, ${duration});`
|
const js = `window.demo.moveMouse(${targetX}, ${targetY}, ${duration});`
|
||||||
await runJavascript(js, browser)
|
await runJavascript(js, element.page())
|
||||||
await sleep(duration)
|
await sleep(duration)
|
||||||
await sleep(250, true)
|
await sleep(250, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function runJavascript(js: string, browser: Page) {
|
export async function runJavascript(js: string, browser: Page) {
|
||||||
|
console.log(js)
|
||||||
await browser.evaluate(_js => eval(_js), js)
|
await browser.evaluate(_js => eval(_js), js)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -81,18 +80,12 @@ export async function clickOnHistory(browser: Page) {
|
|||||||
await clickOn(messageHistory)
|
await clickOn(messageHistory)
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function clickOn(element: Locator, clicks = 1, force = false) {
|
export async function clickOn(element: Locator, clicks = 1, delay = 0, button: 'left' | 'right' | 'middle' = 'left', force = false) {
|
||||||
await moveToCenterOfElement(element, element.page())
|
await moveToCenterOfElement(element)
|
||||||
for (let i = 0; i < clicks; i += 1) {
|
await element.hover()
|
||||||
if (force) {
|
await element.click({ clickCount: clicks, delay, button, force })
|
||||||
await element.dispatchEvent('click')
|
|
||||||
} else {
|
|
||||||
await element.click()
|
|
||||||
}
|
|
||||||
|
|
||||||
await sleep(50)
|
await sleep(50)
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
export async function createFakeMousePointer(browser: Page) {
|
export async function createFakeMousePointer(browser: Page) {
|
||||||
const js = 'window.demo.enableMouse();'
|
const js = 'window.demo.enableMouse();'
|
||||||
|
|||||||
Reference in New Issue
Block a user