appwright
Version:
E2E mobile app testing done right, with the Playwright test runner
90 lines (89 loc) • 4.22 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const vitest_1 = require("vitest");
const locator_1 = require("../locator");
const errors_1 = require("../types/errors");
(0, vitest_1.test)("isVisible on unknown element", async () => {
const mockFindElements = vitest_1.vi.fn().mockResolvedValue([]);
//@ts-ignore
const wdClientMock = {
findElements: mockFindElements,
};
const locator = new locator_1.Locator(wdClientMock, { expectTimeout: 1_000 }, "//unknown-selector", "xpath");
const isVisible = await locator.isVisible();
(0, vitest_1.expect)(isVisible).toBe(false);
(0, vitest_1.expect)(mockFindElements).toHaveBeenCalledTimes(2);
});
(0, vitest_1.test)("isVisible on element that is found but fails displayed check", async () => {
const mockFindElements = vitest_1.vi.fn().mockResolvedValue([
{
"element-6066-11e4-a52e-4f735466cecf": "element-id",
},
]);
const mockIsElementDisplayed = vitest_1.vi.fn().mockResolvedValue(false);
//@ts-ignore
const wdClientMock = {
findElements: mockFindElements,
isElementDisplayed: mockIsElementDisplayed,
};
const locator = new locator_1.Locator(wdClientMock, { expectTimeout: 1_000 }, "//known-but-hidden-element", "xpath");
const isVisible = await locator.isVisible();
(0, vitest_1.expect)(isVisible).toBe(false);
(0, vitest_1.expect)(mockFindElements).toHaveBeenCalledTimes(2);
(0, vitest_1.expect)(mockIsElementDisplayed).toHaveBeenCalledTimes(2);
(0, vitest_1.expect)(mockIsElementDisplayed).toHaveBeenCalledWith("element-id");
});
(0, vitest_1.test)("isVisible on element that throws stale element reference", async () => {
const mockFindElements = vitest_1.vi.fn().mockResolvedValue([
{
"element-6066-11e4-a52e-4f735466cecf": "element-id",
},
]);
const mockIsElementDisplayed = vitest_1.vi.fn().mockImplementation(() => {
class WebDriverInteralError extends Error {
constructor(name, ...args) {
super(...args);
this.name = name;
}
}
throw new WebDriverInteralError(`random stale element reference random`);
});
//@ts-ignore
const wdClientMock = {
findElements: mockFindElements,
isElementDisplayed: mockIsElementDisplayed,
};
const locator = new locator_1.Locator(wdClientMock, { expectTimeout: 1_000 }, "//known-element-that-keeps-throwing-stale-element-reference", "xpath");
const isVisible = await locator.isVisible();
(0, vitest_1.expect)(isVisible).toBe(false);
(0, vitest_1.expect)(mockFindElements).toHaveBeenCalledTimes(2);
(0, vitest_1.expect)(mockIsElementDisplayed).toHaveBeenCalledTimes(2);
(0, vitest_1.expect)(mockIsElementDisplayed).toHaveBeenCalledWith("element-id");
});
(0, vitest_1.test)("waitFor attached state works for hidden element", async () => {
const mockFindElements = vitest_1.vi.fn().mockResolvedValue([
{
"element-6066-11e4-a52e-4f735466cecf": "element-id",
},
]);
const mockIsElementDisplayed = vitest_1.vi.fn().mockResolvedValue(false);
//@ts-ignore
const wdClientMock = {
findElements: mockFindElements,
isElementDisplayed: mockIsElementDisplayed,
};
const locator = new locator_1.Locator(wdClientMock, { expectTimeout: 1_000 }, "//attached-hidden-element", "xpath");
(0, vitest_1.expect)(await locator.waitFor("attached")).toBe(true);
(0, vitest_1.expect)(mockFindElements).toHaveBeenCalledTimes(1);
(0, vitest_1.expect)(mockIsElementDisplayed).toHaveBeenCalledTimes(0);
});
(0, vitest_1.test)("waitFor attached state throws TimeoutError", async () => {
const mockFindElements = vitest_1.vi.fn().mockResolvedValue([]);
//@ts-ignore
const wdClientMock = {
findElements: mockFindElements,
};
const locator = new locator_1.Locator(wdClientMock, { expectTimeout: 1_000 }, "//attached-hidden-element", "xpath");
await (0, vitest_1.expect)(locator.waitFor("attached")).rejects.toThrowError(errors_1.TimeoutError);
(0, vitest_1.expect)(mockFindElements).toHaveBeenCalledTimes(2);
});