selenium-ide 開發手冊
https://github.com/SeleniumHQ/selenium-ide
peru
包管理器,用於在項目中包含其他人的代碼
- Peru is a tool for including other people's code in your projects. It fetches from anywhere -- git, hg, svn, tarballs -- and puts files wherever you like. Peru helps you track exact versions of your dependencies, so that your history is always reproducible. And it fits inside your scripts and Makefiles, so your build stays simple and foolproof.
- https://github.com/buildinspace/peru#installation
安裝
- pip3 install peru
同步
peru sync
peru reup
清理
peru clean
lerna clean
peru.yaml
imports: # This is where we want peru to put the module.
atoms: packages/selenium-ide/selenium/atoms
selenium-atoms: packages/selenium-ide/selenium/selenium-atoms
selenium-core: packages/selenium-ide/selenium/selenium-core-scripts
webdriver: packages/selenium-ide/selenium/webdriver
third_party: packages/selenium-ide/selenium/third_party
git module atoms:
url: https://github.com/SeleniumHQ/selenium
rev: 07c4a7c99eb1ac8f2d82fd92141adcd3eefd5e42
export: "javascript/atoms"
git module selenium-atoms:
url: https://github.com/SeleniumHQ/selenium
rev: 07c4a7c99eb1ac8f2d82fd92141adcd3eefd5e42
export: "javascript/selenium-atoms"
git module selenium-core:
url: https://github.com/SeleniumHQ/selenium
rev: 07c4a7c99eb1ac8f2d82fd92141adcd3eefd5e42
export: "javascript/selenium-core/scripts"
git module webdriver:
url: https://github.com/SeleniumHQ/selenium
rev: 07c4a7c99eb1ac8f2d82fd92141adcd3eefd5e42
export: "javascript/webdriver/atoms"
git module third_party:
url: https://github.com/SeleniumHQ/selenium
rev: 07c4a7c99eb1ac8f2d82fd92141adcd3eefd5e42
export: "third_party/js"
peru 命令使用說明:
Usage:
peru [-hqv] [--file=<file>] [--sync-dir=<dir>] [--state-dir=<dir>]
[--cache-dir=<dir>] [--file-basename=<name>] <command> [<args>...]
peru [--help|--version]
Commands:
sync fetch imports and copy them to your project
reup update revision information for your modules
clean delete imports from your project
copy copy files directly from a module to somewhere else
override substitute a local directory for the contents of a module
module get information about the modules in your project
help show help for subcommands, same as -h/--help
Options:
-h --help so much help
-q --quiet don't print anything
-v --verbose print everything
--file=<file>
The project file to use instead of 'peru.yaml'. This must be used
together with --sync-dir.
--sync-dir=<dir>
The root directory for your imports, instead of the directory
containing 'peru.yaml'. This must be used together with --file.
--state-dir=<dir>
The directory where peru keeps all of its metadata, including the cache
and the current imports tree. Defaults to '.peru' next to 'peru.yaml'.
--cache-dir=<dir>
The directory for caching all the files peru fetches. Defaults to
'.peru/cache', or $PERU_CACHE_DIR if it's defined.
--file-basename=<name>
An alternative filename (not a path) for 'peru.yaml'. As usual, peru
will search the current dir and its parents for this file, and import
paths will be relative to it. Incompatible with --file.
yarn
是什麼
- Yarn is a package ( package.json ) manager for your code. It allows you to use and share code
install
curl -o- -L https://yarnpkg.com/install.sh | bash -s -- --nightly
Usage
- Starting a new project
yarn init
Adding a dependency
yarn add [package]
yarn add [package]@[version]
yarn add [package]@[tag]
Adding a dependency to different categories of dependencies
Add to devDependencies, peerDependencies, and optionalDependencies respectively:
yarn add [package] --dev
yarn add [package] --peer
yarn add [package] --optional
Upgrading a dependency
yarn upgrade [package]
yarn upgrade [package]@[version]
yarn upgrade [package]@[tag]
Removing a dependency
yarn remove [package]
Installing all the dependencies of project
yarn
or
yarn install
(https://yarnpkg.com/en/docs/cli/install)
清理緩存
$ yarn cache clean
指定端口
$ yarn --mutex network:30330
lerna
是什麼呢?
- A tool for managing JavaScript projects with multiple packages.
工作原理
- 自動解決packages之間的依賴關係
- 通過git 檢測文件改動,自動發佈
- 根據git 提交記錄,自動生成CHANGELOG
全局安裝lerna
npm install lerna -g
開發程序
清緩存依賴:
yarn cache clean
清理 peru 代碼緩存:
peru clean & peru sync
下載所有依賴:
yarn --mutex network:30333
構建工程:
$ lerna bootstrap
lerna notice cli v3.6.0
lerna info Bootstrapping 5 packages
lerna info Installing external dependencies
- 背後是:
lerna run build --ignore selenium-ide-extension-boilerplate
Build the extension
- yarn build
等同於:
npm run-script build
yarn build:webdriver
yarn build:ext
完整命令集
* "start": "cd packages/selenium-ide && yarn start",
* "build": "lerna run build --ignore selenium-ide-extension-boilerplate",
* "build:ext": "cd packages/selenium-ide && yarn build-dev",
* "build:runner": "cd packages/selenium-side-runner && yarn build",
* "build:selianize": "cd packages/selianize && yarn build",
* "build:webdriver": "cd packages/browser-webdriver && yarn build",
* "build:webdriver:dev": "cd packages/browser-webdriver && yarn build:dev",
* "build:ext:prod": "cd packages/selenium-ide && yarn build",
* "pack:chrome": "cd packages/selenium-ide && yarn build-chrome",
* "pack:firefox": "cd packages/selenium-ide && yarn build-firefox",
* "pack:runner": "cd packages/selenium-side-runner && yarn pkg",
* "test": "jest",
* "test:ext": "jest --testMatch \"**/packages/selenium-ide/tests/**/*.spec.js\"",
* "test:runner": "cd tests/examples && node ../../packages/selenium-side-runner/dist/index.js *.side",
* "test:webdriver": "jest --testMatch \"**/packages/browser-webdriver/tests/**/*.spec.js\"",
* "lint": "yarn lint:scripts && yarn lint:styles",
* "lint:scripts": "eslint \"packages/*/src/**/*.js\" \"packages/*/src/**/*.jsx\" \"packages/*/__tests__/**/*.js\" \"packages/*/tests/**/*.js\" \"packages/*/__mocks__/**/*.js\" --ignore-pattern=\"extension-boilerplate\"",
* "lint:styles": "stylelint \"packages/selenium-ide/src/neo/**/*.css\"",
* "postinstall": "lerna bootstrap"
.pem 文件:打包 chrome 插件時使用
openssl genrsa -out selenium-ide.pem 2048
"./build.sh build ../../selenium-ide.pem 1>/dev/null && mkdir -p dist && mv build.crx dist/selenium-ide.crx && echo \"Wrote dist/selenium-ide.crx\""
開發過程剪輯:
$ peru sync
或者: peru reup 更新依賴 code
╶ atoms: Receiving objects: 8% (34366/426117), 40.00 MiB | 5.53 MiB/s
$ yarn --ignore-engines
yarn install v1.13.0-20181209.2324
[1/4] 🔍 Resolving packages...
[2/4] 🚚 Fetching packages...
[3/4] 🔗 Linking dependencies...
warning " > [email protected]" has unmet peer dependency "babel-core@^6.0.0 || ^7.0.0-0".
[4/4] 🔨 Building fresh packages...
$ lerna bootstrap
lerna notice cli v3.4.3
lerna info Bootstrapping 5 packages
lerna info Installing external dependencies
lerna info Symlinking packages and binaries
lerna success Bootstrapped 5 packages
✨ Done in 288.93s.
$ npm run-script build
> selenium-ide@ build /Users/jack/ui/selenium-ide
> lerna run build --ignore selenium-ide-extension-boilerplate
lerna notice cli v3.4.3
lerna info filter [ '!selenium-ide-extension-boilerplate' ]
lerna info Executing command in 4 packages: "yarn run build"
yarn run v1.13.0-20181209.2324
$ rollup -c
Done in 4.75s.
yarn run v1.13.0-20181209.2324
$ yarn run browserify src/index.js -s browser-webdriver -o build/webdriver.js
$ /Users/jack/ui/selenium-ide/packages/browser-webdriver/node_modules/.bin/browserify src/index.js -s browser-webdriver -o build/webdriver.js
Done in 5.11s.
yarn run v1.13.0-20181209.2324
$ babel -d dist src --ignore=__test__
src/capabilities.js -> dist/capabilities.js
src/child.js -> dist/child.js
src/config.js -> dist/config.js
src/index.js -> dist/index.js
src/npm.js -> dist/npm.js
src/proxy.js -> dist/proxy.js
src/versioner.js -> dist/versioner.js
Done in 1.13s.
yarn run v1.13.0-20181209.2324
$ rm -rf build && env NODE_ENV=production webpack
Hash: a0b9a689f65fddd040b4
Version: webpack 3.12.0
Time: 119676ms
Asset Size Chunks Chunk Names
media/[email protected] 3.62 kB [emitted]
media/selenium-ide.461193c2.ttf 7.44 kB [emitted]
media/selenium-ide.9b39b00c.svg 21.8 kB [emitted]
playback.js 99.7 kB 0 [emitted] playback
record.js 39.4 kB 1 [emitted] record
neo.js 2.45 MB 2 [emitted] [big] neo
atoms.js 494 kB 3 [emitted] [big] atoms
background.js 24 kB 4 [emitted] background
polyfills.js 7.15 kB 5 [emitted] polyfills
escape.js 2.99 kB 6 [emitted] escape
playback.js.map 387 kB 0 [emitted] playback
record.js.map 162 kB 1 [emitted] record
neo.js.map 8.56 MB 2 [emitted] neo
atoms.js.map 2.23 MB 3 [emitted] atoms
background.js.map 113 kB 4 [emitted] background
polyfills.js.map 40.6 kB 5 [emitted] polyfills
escape.js.map 14.2 kB 6 [emitted] escape
highlight.css 952 bytes [emitted]
vendor/selenium-browserdetect.js 5.27 kB [emitted]
vendor/global.js 825 bytes [emitted]
prompt.js 7.25 kB [emitted]
../manifest.json 1.74 kB [emitted]
indicator.js 694 bytes [emitted]
../bootstrap.html 1.57 kB [emitted]
../indicator.html 1.03 kB [emitted]
../icons/icon_menu32.png 1.22 kB [emitted]
../icons/icon_menu64.png 2.76 kB [emitted]
../icons/icon_menu16.png 552 bytes [emitted]
../icons/icon128.png 5.88 kB [emitted]
../icons/icon16.png 612 bytes [emitted]
../icons/icon64.png 2.91 kB [emitted]
../icons/icon32.png 1.29 kB [emitted]
../index.html 315 bytes [emitted]
[41] ./common/utils.js 1.5 kB {1} {2} {4} [built]
[77] ./content/closure-polyfill.js 2.9 kB {3} [built]
[136] ./content/commands-api.js 6.84 kB {0} [built]
[149] ./content/escape.js 5.11 kB {0} {6} [built]
[229] ./content/selenium-api.js 122 kB {0} [built]
[320] multi ./content/setup 28 bytes {5} [built]
[321] ./content/setup.js 1.28 kB {5} [built]
[322] multi ./content/commands-api 28 bytes {0} [built]
[385] multi ./background/background 28 bytes {4} [built]
[386] ./background/background.js 5.09 kB {4} [built]
[387] multi ./content/record 28 bytes {1} [built]
[388] ./content/record.js 19.5 kB {1} [built]
[391] multi ./content/escape 28 bytes {6} [built]
[392] multi react-hot-loader/patch ./neo/containers/Root 40 bytes {2} [built]
[396] ./neo/containers/Root/index.jsx 1.61 kB {2} [built]
+ 1083 hidden modules
Child html-webpack-plugin for "../index.html":
1 asset
[0] ../node_modules/html-webpack-plugin/lib/loader.js!./neo/index.html 720 bytes {0} [built]
+ 3 hidden modules
Done in 129.29s.
lerna success run Ran npm script 'build' in 4 packages:
lerna success - browser-webdriver
lerna success - selenium-ide-extension
lerna success - selenium-side-runner
lerna success - selianize
到 selenium-ide 工程目錄下面構建:
selenium-ide/packages/selenium-ide$ webpack
Hash: 64055d2df5f64506be6d
Version: webpack 3.12.0
Time: 51650ms
Asset Size Chunks Chunk Names
media/[email protected] 3.62 kB [emitted]
media/selenium-ide.461193c2.ttf 7.44 kB [emitted]
media/selenium-ide.9b39b00c.svg 21.8 kB [emitted]
playback.js 617 kB 0 [emitted] [big] playback
record.js 298 kB 1 [emitted] [big] record
neo.js 18 MB 2 [emitted] [big] neo
atoms.js 4.28 MB 3 [emitted] [big] atoms
background.js 227 kB 4 [emitted] background
polyfills.js 76.8 kB 5 [emitted] polyfills
escape.js 17.9 kB 6 [emitted] escape
highlight.css 952 bytes [emitted]
prompt.js 7.25 kB [emitted]
vendor/global.js 825 bytes [emitted]
vendor/selenium-browserdetect.js 5.27 kB [emitted]
../indicator.html 1.03 kB [emitted]
../bootstrap.html 1.57 kB [emitted]
indicator.js 694 bytes [emitted]
../manifest.json 1.74 kB [emitted]
../icons/icon_menu16.png 552 bytes [emitted]
../icons/icon128.png 5.88 kB [emitted]
../icons/icon_menu32.png 1.22 kB [emitted]
../icons/icon_menu64.png 2.76 kB [emitted]
../icons/icon64.png 2.91 kB [emitted]
../icons/icon16.png 612 bytes [emitted]
../icons/icon32.png 1.29 kB [emitted]
../index.html 315 bytes [emitted]
[41] ./common/utils.js 2.46 kB {1} {2} {4} [built]
[80] ./content/closure-polyfill.js 2.9 kB {3} [built]
[141] ./content/commands-api.js 7.77 kB {0} [built]
[154] ./content/escape.js 5.96 kB {0} {6} [built]
[234] ./content/selenium-api.js 124 kB {0} [built]
[328] multi ./content/setup 28 bytes {5} [built]
[329] ./content/setup.js 1.36 kB {5} [built]
[330] multi ./content/commands-api 28 bytes {0} [built]
[393] multi ./background/background 28 bytes {4} [built]
[394] ./background/background.js 6.57 kB {4} [built]
[395] multi ./content/record 28 bytes {1} [built]
[396] ./content/record.js 23.2 kB {1} [built]
[399] multi ./content/escape 28 bytes {6} [built]
[400] multi react-hot-loader/patch ./neo/containers/Root 40 bytes {2} [built]
[404] ./neo/containers/Root/index.jsx 1.82 kB {2} [built]
+ 1094 hidden modules
Child html-webpack-plugin for "../index.html":
1 asset
[0] ../node_modules/html-webpack-plugin/lib/loader.js!./neo/index.html 720 bytes {0} [built]
+ 3 hidden modules