AppFlowy/frontend/appflowy_tauri/webdriver/selenium/test/test.cjs

77 lines
2.3 KiB
JavaScript
Raw Normal View History

const os = require("os");
const path = require("path");
const { expect } = require("chai");
const { spawn, spawnSync } = require("child_process");
const { Builder, By, Capabilities, until } = require("selenium-webdriver");
const { elementIsVisible, elementLocated } = require("selenium-webdriver/lib/until.js");
// create the path to the expected application binary
const application = path.resolve(
__dirname,
"..",
"..",
"..",
"src-tauri",
"target",
"release",
"appflowy_tauri"
);
// keep track of the webdriver instance we create
let driver;
// keep track of the tauri-driver process we start
let tauriDriver;
before(async function() {
// set timeout to 2 minutes to allow the program to build if it needs to
this.timeout(120000);
// ensure the program has been built
spawnSync("cargo", ["build", "--release"]);
// start tauri-driver
tauriDriver = spawn(
path.resolve(os.homedir(), ".cargo", "bin", "tauri-driver"),
[],
{ stdio: [null, process.stdout, process.stderr] }
);
const capabilities = new Capabilities();
capabilities.set("tauri:options", { application });
capabilities.setBrowserName("wry");
// start the webdriver client
driver = await new Builder()
.withCapabilities(capabilities)
.usingServer("http://localhost:4444/")
.build();
});
after(async function() {
// stop the webdriver session
await driver.quit();
// kill the tauri-driver process
tauriDriver.kill();
});
describe("AppFlowy Unit Test", () => {
it("should find get started button", async () => {
// should sign out if already sign in
const getStartedButton = await driver.wait(until.elementLocated(By.xpath("//*[@id=\"root\"]/form/div/div[3]")));
getStartedButton.click();
});
it("should get sign out button", async (done) => {
// const optionButton = await driver.wait(until.elementLocated(By.css('*[test-id=option-button]')));
// const optionButton = await driver.wait(until.elementLocated(By.id('option-button')));
// const optionButton = await driver.wait(until.elementLocated(By.css('[aria-label=option]')));
// Currently, only the find className is work
const optionButton = await driver.wait(until.elementLocated(By.className("relative h-8 w-8")));
optionButton.click();
await new Promise((resolve) => setTimeout(resolve, 4000));
});
});