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)); }); });