百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 博客教程 > 正文

Electron 使用Selenium和WebDriver

connygpt 2024-12-19 10:37 3 浏览

本节我们来学习如何在 Electron 下使用 SeleniumWebDriver

Selenium

SeleniumThoughtWorks 提供的一个强大的基于浏览器的开源自动化测试工具。
Selenium 是一个用于 Web 应用程序测试的工具,测试直接自动运行在浏览器中,就像真正的用户在手工操作一样。支持的浏览器包括 IEChrome OperaFirefox 等。这个工具的主要功能包括:

  • 测试与浏览器的兼容性,测试应用程序是否能够很好地工作在不同浏览器和操作系统之上。
  • 测试系统功能,创建回归测试检验软件功能和用户需求。
  • 支持自动录制动作和自动生成 .NETPerlPythonRubyJava 等不同语言的测试脚本。

Selenium 测试直接在浏览器中运行,就像真实用户所做的一样。Selenium 测试可以在 WindowsLinuxMacintosh 上的 Internet ExplorerChromeFirefox 中运行。其他测试工具都不能覆盖如此多的平台。

WebDriver

WebDriver 是一款开源的支持多浏览器的自动化测试工具。 它提供了操作网页、用户输入、JavaScript 执行等能力。 ChromeDriver 是一个实现了 WebDriverChromium 联接协议的独立服务。 它也是由开发了 ChromiumWebDriver 的团队开发的。

配置Spectron

SpectronElectron 官方支持的 ChromeDriver 测试框架。 它是建立在 WebdriverIO 的顶层,并且帮助我们会在测试中访问 Electron API 和绑定 ChromeDriver

spectron 的安装命令如下所示:

$ npm install --save-dev spectron

示例:

下述代码用于测试验证是否打开了一个带标题的可视窗口:

const Application = require('spectron').Application
const assert = require('assert')
const myApp = new Application({
  path: '/Applications/MyApp.app/Contents/MacOS/MyApp'
})
const verifyWindowIsVisibleWithTitle = async (app) => {
  await app.start()
  try {
    // 检查窗口是否可见
    const isVisible = await app.browserWindow.isVisible()
    // 验证窗口是否可见
    assert.strictEqual(isVisible, true)
    // 获取窗口标题
    const title = await app.client.getTitle()
    // 验证窗口标题
    assert.strictEqual(title, 'my_electron')
  } catch (error) {
    // 记录任何故障
    console.error('测试失败', error.message)
  }
  // 停止应用
  await app.stop()
}
verifyWindowIsVisibleWithTitle(myApp)

Spectron 导出一个 Application 类,该类在配置后可以启动和停止 Electron 应用程序。path 字段表示要启动的 Electron 应用程序可执行文件的字符串路径。

通过WebDriverJs配置

WebDriverJs 是一个可以配合 WebDriver 做测试的 Node 模块。

启动ChromeDriver

首先,我们要下载 chromedriver,运行如下命令:

$ npm install electron-chromedriver

如下图所示:

然后运行以下命令:

$ ./node_modules/.bin/chromedriver
Starting ChromeDriver (v2.10.291558) on port 9515
Only local connections are allowed.

在执行这个命令时可能会报错:

$ C:\Users\lu\Desktop\my_electron>./node_modules/.bin/chromedriver
'.' 不是内部或外部命令,也不是可运行的程序 或批处理文件。

我们可以将目录分隔符换成 Windows 默认的 \ 符号:

记住端口号 9515,稍后将使用到。

安装WebDriverJS

然后我们需要安装 WebDriverJS, 执行如下命令:

$ npm install selenium-webdriver

如下图所示:

连接到ChromeDriver

Electron 下使用 selenium-webdriver 和平时的用法并没有大的差异,只是需要手动设置连接 ChromeDriver,以及 Electron 的路径。

示例:

代码如下所示:

const webdriver = require('selenium-webdriver')
const driver = new webdriver.Builder()
  // "9515" 是ChromeDriver使用的端口
  .usingServer('http://localhost:9515')
  .withCapabilities({
    chromeOptions: {
      // 这里设置Electron的路径
      binary: '/Path-to-Your-App.app/Contents/MacOS/Electron'
    }
  })
  .forBrowser('electron')
  .build()
driver.get('http://www.google.com')
driver.findElement(webdriver.By.name('q')).sendKeys('webdriver')
driver.findElement(webdriver.By.name('btnG')).click()
driver.wait(() => {
  return driver.getTitle().then((title) => {
    return title === 'webdriver - Google Search'
  })
}, 1000)
driver.quit()

通过WebdriverIO配置

WebdriverIO 也是一个配合 WebDriver 用来测试的 Node 模块。

启动ChromeDriver

首先我们要安装 chromedriver,命令如下所示:

$ npm install electron-chromedriver

如下图:

然后运行如下命令:

$ ./node_modules/.bin/chromedriver --url-base=wd/hub --port=9515

效果如下图所示:

安装WebdriverIO

安装 WebdriverIO 的命令如下所示:

$ npm install webdriverio

如下图所示:

连接到chrome driver

然后连接到 chrome driver,代码如下所示:

const webdriverio = require('webdriverio')
const options = {
  host: 'localhost', // 使用本地主机作为chrome driver服务器
  port: 9515, // "9515" 端口是否由chrome driver打开
  desiredCapabilities: {
    browserName: 'chrome',
    chromeOptions: {
      binary: '/Path-to-Your-App/electron', // Electron的路径
      args: [/* cli arguments */] // Optional, perhaps 'app=' + /path/to/your/app/
    }
  }
}
let client = webdriverio.remote(options)
client
  .init()
  .url('http://google.com')
  .setValue('#q', 'webdriverio')
  .click('#btnG')
  .getTitle().then((title) => {
    console.log('Title was: ' + title)
  })
  .end()

不需要重新编译 Electron,只要把 app 的源码放到 Electron 的资源目录里就可直接开始测试了。或者我们也可以在运行 Electron 时传入参数指定应用所在文件夹。这样可以免去拷贝粘贴应用到 Electron 资源目录的步骤。

链接:https://www.9xkd.com/

相关推荐

3分钟让你的项目支持AI问答模块,完全开源!

hello,大家好,我是徐小夕。之前和大家分享了很多可视化,零代码和前端工程化的最佳实践,今天继续分享一下最近开源的Next-Admin的最新更新。最近对这个项目做了一些优化,并集成了大家比较关注...

干货|程序员的副业挂,12个平台分享

1、D2adminD2Admin是一个完全开源免费的企业中后台产品前端集成方案,使用最新的前端技术栈,小于60kb的本地首屏js加载,已经做好大部分项目前期准备工作,并且带有大量示例代码,助...

Github标星超200K,这10个可视化面板你知道几个

在Github上有很多开源免费的后台控制面板可以选择,但是哪些才是最好、最受欢迎的可视化控制面板呢?今天就和大家推荐Github上10个好看又流行的可视化面板:1.AdminLTEAdminLTE是...

开箱即用的炫酷中后台前端开源框架第二篇

#头条创作挑战赛#1、SoybeanAdmin(1)介绍:SoybeanAdmin是一个基于Vue3、Vite3、TypeScript、NaiveUI、Pinia和UnoCSS的清新优...

搭建React+AntDeign的开发环境和框架

搭建React+AntDeign的开发环境和框架随着前端技术的不断发展,React和AntDesign已经成为越来越多Web应用程序的首选开发框架。React是一个用于构建用户界面的JavaScrip...

基于.NET 5实现的开源通用权限管理平台

??大家好,我是为广大程序员兄弟操碎了心的小编,每天推荐一个小工具/源码,装满你的收藏夹,每天分享一个小技巧,让你轻松节省开发效率,实现不加班不熬夜不掉头发,是我的目标!??今天小编推荐一款基于.NE...

StreamPark - 大数据流计算引擎

使用Docker完成StreamPark的部署??1.基于h2和docker-compose进行StreamPark部署wgethttps://raw.githubusercontent.com/a...

教你使用UmiJS框架开发React

1、什么是Umi.js?umi,中文可发音为乌米,是一个可插拔的企业级react应用框架。你可以将它简单地理解为一个专注性能的类next.js前端框架,并通过约定、自动生成和解析代码等方式来辅助...

简单在线流程图工具在用例设计中的运用

敏捷模式下,测试团队的用例逐渐简化以适应快速的发版节奏,大家很早就开始运用思维导图工具比如xmind来编写测试方法、测试点。如今不少已经不少利用开源的思维导图组件(如百度脑图...)来构建测试测试...

【开源分享】神奇的大数据实时平台框架,让Flink&Spark开发更简单

这是一个神奇的框架,让Flink|Spark开发更简单,一站式大数据实时平台!他就是StreamX!什么是StreamX大数据技术如今发展的如火如荼,已经呈现百花齐放欣欣向荣的景象,实时处理流域...

聊聊规则引擎的调研及实现全过程

摘要本期主要以规则引擎业务实现为例,陈述在陌生业务前如何进行业务深入、调研、技术选型、设计及实现全过程分析,如果你对规则引擎不感冒、也可以从中了解一些抽象实现过程。诉求从硬件采集到的数据提供的形式多种...

【开源推荐】Diboot 2.0.5 发布,自动化开发助理

一、前言Diboot2.0.5版本已于近日发布,在此次发布中,我们新增了file-starter组件,完善了iam-starter组件,对core核心进行了相关优化,让devtools也支持对IAM...

微软推出Copilot Actions,使用人工智能自动执行重复性任务

IT之家11月19日消息,微软在今天举办的Ignite大会上宣布了一系列新功能,旨在进一步提升Microsoft365Copilot的智能化水平。其中最引人注目的是Copilot...

Electron 使用Selenium和WebDriver

本节我们来学习如何在Electron下使用Selenium和WebDriver。SeleniumSelenium是ThoughtWorks提供的一个强大的基于浏览器的开源自动化测试工具...

Quick 'n Easy Web Builder 11.1.0设计和构建功能齐全的网页的工具

一个实用而有效的应用程序,能够让您轻松构建、创建和设计个人的HTML网站。Quick'nEasyWebBuilder是一款全面且轻巧的软件,为用户提供了一种简单的方式来创建、编辑...