是否可以使用 Selenium WebDriver 来自动化桌面应用程序?
Posted
技术标签:
【中文标题】是否可以使用 Selenium WebDriver 来自动化桌面应用程序?【英文标题】:Is it possible to use Selenium WebDriver for automating desktop applications? 【发布时间】:2017-05-30 03:00:57 【问题描述】:我正准备为目前处于开发初期的 Web/桌面应用程序编写自动化测试。将使用的技术是 Laravel、VueJS 和最重要的 Electron 框架。 Electron 是一个使用 javascript、html 和 CSS 等 Web 技术创建原生应用程序的框架。
所以我很好奇是否可以使用 Selenium WebDriver 来自动化使用 Web 技术(例如 Electron)创建的桌面应用程序?
我已经成功地为“Slack Web 应用程序”编写了一些 Selenium/Java 测试(Slack 是使用 Electron framefork 开发的)
现在我想尝试使用相同的测试来测试“Slack 桌面应用程序”。如果可能的话,也许我可以更改“SetupSelenium”@Before 方法?
这是基于 Web 的应用程序的初始“SetupSelenium”方法: @BeforeMethod
public void setupSelenium()
baseUrl = "https://slack.com/";
System.setProperty("webdriver.chrome.driver", "C:\\UOOP\\WorkspaceJava\\chromedriver.exe");
driver = new ChromeDriver();
driver.manage().timeouts().implicitlyWait(1, TimeUnit.SECONDS);
driver.manage().window().maximize();
driver.navigate().to(baseUrl);
homePage = new HomePage(driver);
signInPage = new SignInPage(driver);
signInToYourTeamPage = new SignInToYourTeamPage(driver);
如果有人有任何想法,我很感激帮助...也许可以将二进制路径设置为 slack.exe ?? 收件人:C:\Users\Danant\AppData\Local\slack\slack.exe
【问题讨论】:
【参考方案1】:创建ChromeDriver
时需要设置一些ChromeOptions
,比如:
ChromeOptions options = new ChromeOptions();
options.setBinary(new File("C:\\path\\to\\slack.exe"));
ChromeDriver driver = new ChromeDriver(options);
Electron 文档中也有关于此主题的教程:https://xwartz.gitbooks.io/electron-gitbook/content/en//tutorial/using-selenium-and-webdriver.html
【讨论】:
谢谢。我在上面尝试了您的代码,但收到以下错误: [2996:0115/154221:INFO:CONSOLE(24)] "(node:7180) DeprecationWarning: 'root' is deprecated, use 'global'", source: internal/process/warning. js (24) 即将针对 C:\Users\Danant\AppData\Local\slack\app-2.4.1\slack.exe 修复 Slack Tray Icons 未能提升 Tray 图标:System.Runtime.InteropServices.InvalidComObjectException: COM 对象已经与其底层分离的RCW不能使用。在 SlackNotifier.TrayStateChanger.如果您只是测试电子应用程序,请查看专为此目的设计的 spectron。
当我测试我的应用程序的开发版本时,我会运行以下测试:
const Application = require('spectron').Application
...
beforeEach(function ()
this.app = new Application(
path: './node_modules/electron/dist/electron.exe',
args: ['./www/']
);
return this.app.start()
)
afterEach(function ()
if (this.app && this.app.isRunning())
return this.app.stop()
)
it('shows an initial single window', function ()
return this.app.client
.getWindowCount()
.should.eventually.equal(1)
)
要测试生产应用,只需修改传递给Application
选项的path
。
【讨论】:
谢谢。如果您使用 Java Script 编写代码,此解决方案可能会起作用。我更喜欢用 Java 编写代码。我的朋友在 Java Script 方面比我更有经验,他们告诉我他们在使用 Spectron 和 Webriver IO 时遇到了问题。所以我决定尝试使用 Selenium。 非常正确。仅限 JavaScript/TypeScript。虽然您无法通过 Selenuim 访问电子 API。以上是关于是否可以使用 Selenium WebDriver 来自动化桌面应用程序?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用selenium Webdriver验证页面中是否存在重复文本
是否不赞成使用Selenium中的WebDriverWait(WebDriver驱动程序,long timeoutInSeconds)?
是否可以通过 selenium webdriver 执行 OnClick javascript 函数而无需单击
我们是否需要同时拥有Selenium服务器和Selenium WebDriver?