2020-10-26 15:18:23 +03:00
|
|
|
import { resolve } from 'path';
|
|
|
|
import webdriver from 'selenium-webdriver';
|
2021-10-21 17:15:09 +03:00
|
|
|
import chrome from 'selenium-webdriver/chrome';
|
2020-10-26 15:18:23 +03:00
|
|
|
import { switchMonitorTests, delay } from '../utils/e2e';
|
|
|
|
|
2022-11-07 03:26:12 +03:00
|
|
|
const path = resolve(__dirname, '..', '..', 'dist');
|
2020-10-26 15:18:23 +03:00
|
|
|
const extensionId = 'lmhkpmbekcpmknklioeibfkpmmfibljd';
|
2021-06-18 06:56:36 +03:00
|
|
|
const actionsPattern =
|
|
|
|
/^@@INIT(.|\n)+@@reduxReactRouter\/routerDidChange(.|\n)+@@reduxReactRouter\/initRoutes(.|\n)+$/;
|
2020-10-26 15:18:23 +03:00
|
|
|
|
|
|
|
describe('Chrome extension', function () {
|
2021-08-27 19:08:40 +03:00
|
|
|
let driver;
|
|
|
|
|
2020-12-19 23:01:09 +03:00
|
|
|
beforeAll(async () => {
|
2021-08-27 19:08:40 +03:00
|
|
|
driver = new webdriver.Builder()
|
2021-10-21 17:15:09 +03:00
|
|
|
.setChromeOptions(
|
2023-12-08 03:15:18 +03:00
|
|
|
new chrome.Options()
|
|
|
|
.setBrowserVersion('stable')
|
|
|
|
.addArguments(`load-extension=${path}`),
|
2021-10-21 17:15:09 +03:00
|
|
|
)
|
2020-10-26 15:18:23 +03:00
|
|
|
.forBrowser('chrome')
|
|
|
|
.build();
|
|
|
|
});
|
2021-08-27 19:08:40 +03:00
|
|
|
|
2020-12-19 23:01:09 +03:00
|
|
|
afterAll(async () => {
|
2021-08-27 19:08:40 +03:00
|
|
|
await driver.quit();
|
2020-10-26 15:18:23 +03:00
|
|
|
});
|
|
|
|
|
|
|
|
it("should open extension's window", async () => {
|
2024-08-17 22:11:46 +03:00
|
|
|
await driver.get(`chrome-extension://${extensionId}/devpanel.html`);
|
2021-08-27 19:08:40 +03:00
|
|
|
const url = await driver.getCurrentUrl();
|
2024-08-17 22:11:46 +03:00
|
|
|
expect(url).toBe(`chrome-extension://${extensionId}/devpanel.html`);
|
2020-10-26 15:18:23 +03:00
|
|
|
});
|
|
|
|
|
|
|
|
it('should match document title', async () => {
|
2021-08-27 19:08:40 +03:00
|
|
|
const title = await driver.getTitle();
|
2020-10-26 15:18:23 +03:00
|
|
|
expect(title).toBe('Redux DevTools');
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should get actions list', async () => {
|
2023-12-08 03:15:18 +03:00
|
|
|
const url = 'https://zalmoxisus.github.io/examples/router/';
|
2021-08-27 19:08:40 +03:00
|
|
|
await driver.executeScript(`window.open('${url}')`);
|
2020-10-26 15:18:23 +03:00
|
|
|
await delay(2000);
|
|
|
|
|
2021-08-27 19:08:40 +03:00
|
|
|
const tabs = await driver.getAllWindowHandles();
|
2020-10-26 15:18:23 +03:00
|
|
|
|
2021-08-27 19:08:40 +03:00
|
|
|
await driver.switchTo().window(tabs[1]);
|
|
|
|
expect(await driver.getCurrentUrl()).toMatch(url);
|
2020-10-26 15:18:23 +03:00
|
|
|
|
2021-08-27 19:08:40 +03:00
|
|
|
await driver.switchTo().window(tabs[0]);
|
2020-10-26 15:18:23 +03:00
|
|
|
|
2024-08-17 22:11:46 +03:00
|
|
|
await delay(1000);
|
2021-08-27 19:08:40 +03:00
|
|
|
const result = await driver.wait(
|
|
|
|
driver
|
2023-12-12 07:02:35 +03:00
|
|
|
.findElement(webdriver.By.xpath('//div[@data-testid="actionListRows"]'))
|
2020-10-26 15:18:23 +03:00
|
|
|
.getText()
|
|
|
|
.then((val) => {
|
|
|
|
return actionsPattern.test(val);
|
|
|
|
}),
|
|
|
|
15000,
|
2023-07-12 21:03:20 +03:00
|
|
|
"it doesn't match actions pattern",
|
2020-10-26 15:18:23 +03:00
|
|
|
);
|
|
|
|
expect(result).toBeTruthy();
|
|
|
|
});
|
2024-08-17 22:11:46 +03:00
|
|
|
|
|
|
|
it("should contain inspector monitor's component", async () => {
|
|
|
|
const val = await driver
|
|
|
|
.findElement(webdriver.By.xpath('//div[@data-testid="inspector"]'))
|
|
|
|
.getText();
|
|
|
|
expect(val).toBeDefined();
|
|
|
|
});
|
|
|
|
|
|
|
|
Object.keys(switchMonitorTests).forEach((description) =>
|
|
|
|
it(description, () => switchMonitorTests[description](driver)),
|
|
|
|
);
|
2020-10-26 15:18:23 +03:00
|
|
|
});
|