我们正在寻求在桌面工作中开发用于特定网站自动化的ElectronJS应用,其中包括登录,表单填写,报告下载等常见任务。
我们已经尝试了ElectronJS,Spectron,NightmareJS,Puppeteer等基础教程,并且它们都可以单独很好地工作,但是相互集成的文档很少(尽管有开放的github问题)。
我们要实现以下目标:
session
)不应在ElectronJS应用关闭时删除,而应在应用重启时可用。browserWindow
上启动一些自动化任务,例如下载,填写表格等我们不需要无头的自动化,因为在幕后发生了一些魔术。我们仅需要当前页面上基于菜单/按钮单击的操作/任务即可。
NightmareJS
,Puppeteer
等似乎都启动了自己的网页实例(因为它们是为测试独立应用程序而构建的),但是我们需要的是使现有BrowserWindows
自动化
puppeteer
或nightmarejs
是实现此类目标的正确工具吗?如果是,有任何文档吗?
否则,我们是否应该在控制台中注入自己的本机JS事件(例如mouseclick
等事件以执行操作?
答案 0 :(得分:1)
您可以使用puppeteer-core
。默认情况下,core
版不会下载Chromium,如果要控制Electron应用程序,则不需要下载。
然后在测试中调用launch
方法,在该方法中,您将electron
定义为可执行文件而不是Chromium,如下例所示:
const electron = require("electron");
const puppeteer = require("puppeteer-core");
const delay = ms =>
new Promise(resolve => {
setTimeout(() => {
resolve();
}, ms);
});
(async () => {
try {
const app = await puppeteer.launch({
executablePath: electron,
args: ["."],
headless: false,
});
const pages = await app.pages();
const [page] = pages;
await page.setViewport({ width: 1200, height: 700 });
await delay(5000);
const image = await page.screenshot();
console.log(image);
await page.close();
await delay(2000);
await app.close();
} catch (error) {
console.error(error);
}
})();
简单的演示仓库: https://github.com/peterdanis/electron-puppeteer-demo
答案 1 :(得分:0)
Spectron是电子构建应用的最佳选择。
您将有权使用所有电子API。我们只能通过spectron来启动和停止您的应用。
我们可以运行打包应用程序,也可以不打包运行。
答案 2 :(得分:0)
您可以使用Spectron,但如果您想查看文档,Spectron会使用webdriverio,该文档具有很好的文档。
我建议您使用Spectron,因为我尝试使用java-selenium自动化测试,但是在某些情况下无法通过。如果要使用硒,请编写以下代码来设置将电子应用设置为chromedriver的功能。
ChromeOptions options = new ChromeOptions();
options.setBinary(binaryPath);
options.addArguments("--app=" + argPath);
options.setCapability("chromeOptions", options);
driver = new ChromeDriver(options);
希望这对您有所帮助。
答案 3 :(得分:0)
使用Selenium和ChromeDriver的Java中的自动化脚本
package setUp;
import helper.Constants;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.DesiredCapabilities;
public class Test {
public static void main(String[] args) {
System.setProperty(Constants.WebDriverType, Constants.WebDriverPath + Constants.WindowsDriver);
ChromeOptions opt = new ChromeOptions();
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("chromeOptions", opt);
capabilities.setBrowserName("chrome");
capabilities.setVersion("73.0.3683.121");
ChromeOptions options = new ChromeOptions();
options.merge(capabilities);
options.setBinary("C:\\\\Program Files\\\\Audio\\\\Audio-Configuration\\\\Audio-Configuration.exe");
options.setCapability("chromeOptions", options);
ChromeDriver driver = new ChromeDriver(options);
try {
Thread.sleep(5000);
WebElement webElement = driver.findElement(By.xpath(
"/html/body/app-root/mat-drawer-container/mat-drawer/div/app-bottom-side-nav/div/app-settings-nav/div/div/a/div"));
webElement.click();
} catch (Exception e) {
System.out.println("Exception trace");
System.out.println(e);
}
}
}
使用Spectron在JavaScript中使用自动化脚本(在ChromeDriver和WebDriverIO的顶部构建)。
const Application = require("spectron").Application;
const path =
"C:/Program Files/Audio/Audio-Configuration/Audio-Configuration.exe";
const myApp = new Application({
path: path,
chromeDriverArgs: ["--disable-extensions"],
env: {
SPECTRON: true,
ELECTRON_ENABLE_LOGGING: true,
ELECTRON_ENABLE_STACK_DUMPING: true
}
});
const windowClick = async app => {
await app.start();
try {
// Identifying by class name
await app.client.click(".ic-setting");
// Identifying by Id
// await app.client.click("#left-btn");
} catch (error) {
// Log any failures
console.error("Test failed", error.message);
}
// Stop the application
await app.stop();
};
windowClick(myApp);
答案 4 :(得分:0)
如果集成电子梦night是一个很好的库,即使可以随时分发,也可以使用它,以下是同一resource1的有用文档 和