electron - 在 GitlabCI 上运行测试时 ChromeDriver 出现问题
问题描述
我是 Gitlab CI 的新手,我正在尝试在提交时自动测试我的应用程序。
我不知道它是如何工作的,我知道它使用 docker 映像并运行您想要的命令。
我选择 node:8 图像开始(我正在做一个电子项目,也许有更好的图像)
问题是,如果我在我的计算机上运行命令“npm test”,它运行良好并且所有测试都通过,但它不适用于 gitlab ci 作业,我不知道为什么。
我在windows上开发这个,docker镜像使用linux,这可能是个问题吗?
该错误总是发生在 ChromeDriver 上。我查看了文件夹,发现只有一个exe,所以我下载了驱动程序的linux发行版并将其插入其中。我还在运行测试之前执行了驱动程序(在我的计算机中这不是必需的,它会自动执行),但仍然得到相同的错误。
我很迷茫。有什么替代方法可以工作吗?也许另一个码头形象?
我的 gitlab-ci.yml:
variables:
VERSION_ID: '1.0.$CI_PIPELINE_ID'
stages:
- build
build:
image: node:8
stage: build
artifacts:
paths:
- $CI_PROJECT_DIR/dist/*.*
script:
- apt-get update
- apt-get -y install libnss3-dev
- npm install
- chmod 0777 ./node_modules/.bin/mocha
- chmod 0777 ./node_modules/electron-chromedriver/bin/chromedriver
- ./node_modules/electron-chromedriver/bin/chromedriver&
- npm test
解决方案
你可以用硒做什么?
例如,如果您的电子应用程序是一项民意调查,那么使用 selenium 您可以:
- 验证投票应用显示 10 个问题。如果检测到负数小于 10,则抛出错误
- 如果需要您的问题,您可以确保在按下提交按钮时,每个问题旁边都会出现红色警告。如果提交操作未触发警告和/或提交表单,则抛出错误。
硒的工作原理
- 开发人员在 selenium 语言实现(java、nodejs、python 等)中创建一些测试
- 选择了具有正确浏览器安装的机器(将称为 selenium 机器)。在这台机器上,必须至少安装一个浏览器及其各自的SeleniumDriver。OperaChromiunDriver 用于 Opera,FirefoxDriver 用于 Firefox 等
- 在 selenium 机器中,您必须启动具有适当配置的 selenium 服务器。该服务器发布一种带有用户名和密码的 url
- 从您的开发人员笔记本电脑上,您可以执行您的测试是使用配置的 selenium 机器。
- 在开发人员阶段,您可以避免使用 selenium 服务器,因为您的笔记本电脑上已经存在所有必需的人员。但是,如果您在企业或组织中,则无法或不推荐在您的笔记本电脑上运行测试。想象一下你自己在凌晨 2:00 在你的笔记本电脑上运行你工作的所有 Web 应用程序的测试:s。另一方面,假设您的持续集成服务器在凌晨 2:00 运行了数十个测试,并将结果发送给您一个漂亮的仪表板。
你的问题
我在windows上开发这个,docker镜像使用linux,这可能是个问题吗?
Windows 不是开发的最佳选择。默认浏览器“向导”安装将帮助您进行开发,但如果您升级到下一阶段“测试/生产”,那么世界上没有任何像样的云提供商试图为硒测试或任何技术提供 WINDOWS。众所周知,Windows 中对 docker 的支持很差。我建议你使用https://elementary.io/的linux,这对于像我们这样的程序员来说非常酷!
我很迷茫。有什么替代方法可以工作吗?也许另一个码头形象?
您正在使用电子进行开发。Electron 是一种“浏览器”,因此 Selenium 是自动化测试的最佳选择。
问题是,如果我在我的计算机上运行命令“npm test”,它运行良好并且所有测试都通过,但它不适用于 gitlab ci 作业,我不知道为什么。
因为您的测试代码执行视觉测试,这需要一台具有视觉浏览器及其各自硒驱动程序的机器。
我必须做什么才能使它起作用?
www.browserstack.com
总而言之,browserstack 为您提供了一个带有许多桌面和安卓浏览器的 selenium 服务器。只需几行代码,您的测试将运行它 browserstack 云,您将拥有一个仪表板,其中包含结果和视频作为错误证明。
这里有一些替代方案:https ://alternative.me/browserstack
实现你自己的 selenium 服务器
正如我所说,您将需要一台具有用户界面、浏览器、硒驱动程序等的机器
无头浏览器
如果您没有机器或浏览器堆栈不适合您,您可以研究:无头浏览器
总而言之,无头浏览器是一种在内存中实现的浏览器,因此您可以在没有用户界面(azure、amazon、google 等)的 shell 中执行测试。
无论如何,您将需要 selenium 驱动程序和其他配置,以实现您的测试在没有用户界面或 chrome、firefox、opera 等的机器上运行
这种方法的缺点是浏览器在内存中实现。无法识别您的 Web 或 javascript 的一些很酷的功能。例如:拖放效果。如果没有用户界面,这将如何工作:S?如果只是简单的表格,Headless Browser可以帮助你。
这里有一些选项:
推荐阅读
- swift - 快速,在具有复合谓词的提取结果控制器中找不到实体的键路径
- sql-server - 消息 102,级别 15,状态 1,第 6 行附近的语法不正确
- javascript - 将 2 条路由设置到同一个组件的最佳方法是什么
- spring-boot - 在 spring boot oauth2 授权服务器中添加额外的登录字段
- sql - 基于来自不同列的值的比较组合相邻行
- json - 格式化 json 查询输出,以便使用 ansible 给出路径列表
- java - 下一个元素可见性需要 Selenium 框架通用功能
- go - 去空接口类型断言并创建一个副本
- javascript - 无法使用 WebdriverIO (Selenium) 切换窗口
- sql - SQL:如何在 SQL 数据库中创建触发器以更新上次修改日期列