function resolve(id, result) {
__TAURI_INTERNALS__.invoke("plugin:automation|resolve", {
id,
result:
result instanceof Error
? {
error: result.name,
message: result.message,
stacktrace: result.stack,
}
: result,
});
}
function staleElementError() {
const err = new Error(
"The element referenced by this selector is no longer attached to the DOM.",
);
err.name = "stale element reference";
return err;
}
function getElement(selector, position) {
const element = document.querySelectorAll(selector)[position];
if (element === undefined) {
throw staleElementError();
}
return element;
}
function getCachedElement(selector, position) {
if (
__AUTOMATION__.cache[selector] &&
__AUTOMATION__.cache[selector][position] !== undefined
) {
const cached = __AUTOMATION__.cache[selector][position];
if (!cached.isConnected) {
throw staleElementError();
}
return cached;
}
return getElement(selector, position);
}
Object.defineProperty(window, "__AUTOMATION__", {
value: {},
});
Object.defineProperty(window.__AUTOMATION__, "resolve", {
value: resolve,
writable: false,
});
Object.defineProperty(window.__AUTOMATION__, "cache", {
value: {},
writable: false,
});
Object.defineProperty(window.__AUTOMATION__, "getElement", {
value: getElement,
writable: false,
});
Object.defineProperty(window.__AUTOMATION__, "getCachedElement", {
value: getCachedElement,
writable: false,
});
Object.defineProperty(window.__AUTOMATION__, "cookies", {
value: [],
writable: true,
});
Object.defineProperty(window.__AUTOMATION__, "alert", {
value: { text: null, type: null, defaultResponse: true, promptText: "" },
writable: true,
});
const _origAlert = window.alert;
const _origConfirm = window.confirm;
const _origPrompt = window.prompt;
window.alert = function (message) {
window.__AUTOMATION__.alert = {
text: String(message),
type: "alert",
defaultResponse: true,
promptText: "",
};
};
window.confirm = function (message) {
window.__AUTOMATION__.alert = {
text: String(message),
type: "confirm",
defaultResponse: true,
promptText: "",
};
return window.__AUTOMATION__.alert.defaultResponse;
};
window.prompt = function (message, defaultValue) {
window.__AUTOMATION__.alert = {
text: String(message),
type: "prompt",
defaultResponse: true,
promptText: defaultValue !== undefined ? String(defaultValue) : "",
};
if (!window.__AUTOMATION__.alert.defaultResponse) {
return null;
}
return window.__AUTOMATION__.alert.promptText;
};