TA的每日心情 | 无聊 2024-9-19 09:07 |
---|
签到天数: 11 天 连续签到: 2 天 [LV.3]测试连长
|
前置条件- 安装环境
- 新建一个 Macaca 工程目录,macaca-client 会默认跑 macaca-test 文件夹下所有 .test.js 为后缀的文件。
- | -- README.md
- | -- macaca-test
- | | -- lib
- | | -- webdriver-client.js
- | | -- macaca-pc.test.js
- | | -- macaca-mobile.test.js
- | -- package.json
复制代码- 配置你的 package.json 文件, 最重要的是需要配置开发环境的依赖 devDependencies
- {
- "name": "macaca-test-sample",
- "version": "0.1.0",
- "description": "macaca-test-sample",
- "keywords": [
- "sample"
- ],
- "dependencies": {
- },
- "devDependencies": {
- "wd-next": "*",
- "macaca-chromedriver": "*",
- "wd": "*"
- },
- "author": "your name",
- "email": "your email",
- "license": "MIT"
- }
复制代码- 在项目根目录下执行 cnpm i 安装 node 模块
你要测什么?A. PC(跳到1)
B. iOS/Android(跳到2)
1. 桌面浏览器端测试- PC 用例 API:wd-next 是我们用 Node.js 对 selenium-webdriver 做了一层封装,接口与 WebDriver 标准统一。
- 引用 macaca-chromedriver ,这是我们用 Node.js 对 ChromeDriver 进行的封装,ChromeDriver 最终会根据参数实例化一个 WebDriver 实例,你最终看到的就是运行了一个 standalone 的 Chrome 浏览器。
- // 文件 macaca-pc.test.js
- var path = require('path');
- var wd = require('wd-next'); // 引用 wd-next
- var macacachromedriver = require('macaca-chromedriver'); // 引用 macaca-chromedriver
- module.exports = (options) => {
- var binPath = macacachromedriver.binPath;
- process.env.PATH = `${process.env.PATH}:${path.dirname(binPath)}`;
- return wd;
- };
复制代码- 查询 wd-next 编写测试用例。编写用例前,一定要先初始化一个 promise wd.initPromiseChain(),之后 it 中的所有用例的方法都是使用 promise 链式调用方法
- // 文件 macaca-pc.test.js
- var path = require('path');
- var wd = require('wd-next'); // 引用 wd-next
- var macacachromedriver = require('macaca-chromedriver'); // 引用 macaca-chromedriver
- module.exports = (options) => {
- var binPath = macacachromedriver.binPath;
- process.env.PATH = `${process.env.PATH}:${path.dirname(binPath)}`;
- /*
- * 开始编写测试用例
- */
- describe('macaca desktop sample', function () {
- this.timeout(5 * 60 * 1000);
- const driver = wd.initPromiseChain(); // 初始化一个promise
- const initialURL = 'https://www.baidu.com';
- before((done) = > {
- return driver
- .init()
- .setNormalSize()
- .end(done);
- });
- it('#0 should go into macaca', function () {
- return driver
- .get(initialURL)
- .sleep(3000);
- });
- it('#1 should works with macaca', function () {
- return driver
- .elementById('kw')
- .sendKeys('macaca')
- .sleep(3000)
- .elementById('su')
- .click()
- .sleep(5000)
- .source()
- .then(function (html) {
- html.should.containEql('macaca');
- })
- .takeScreenshot();
- });
- });
- return wd;
- };
复制代码
- 在工程根目录下执行命令行 macaca run Bravo! 就可以看到啦~
2. 移动端测试- iOS/Android 用例API: 我们推荐使用 wd.js 或者 webdriverio
- 建议可以根据自己的 APP 封装一层自己的 webdriver-client, 同时适配 iOS 和 Android。在 macaca-test/lib/ 下新建文件 webdriver-client.js,以 login 为例
iOS 代码实现如下:
- module.exports = function(username, password) {
- return this
- .waitForElementByXPath('//UIATextField[1]')
- .sendKeys(username)
- .waitForElementByXPath('//UIASecureTextField[1]')
- .sendKeys(password)
- .sleep(1000)
- .sendKeys('\n')
- .waitForElementByName('Login')
- .click()
- .sleep(5000);
- };
复制代码 但是由于 Android 下元素名会不同,实现如下:
- module.exports = function(username, password) {
- return this
- .waitForElementsByClassName('android.widget.EditText', {}, 120000)
- .then(function(els) {
- return els[0];
- })
- .sendKeys(username)
- .sleep(1000)
- .elementsByClassName('android.widget.EditText')
- .then(function(els) {
- return els[1];
- })
- .sendKeys(password)
- .sleep(1000)
- .waitForElementByName('Login')
- .click()
- .sleep(5000);
- };
复制代码
可以查看我们已经写好的例子。
注意!这不是通用的 webdriver-client ,你需要根据自己的 APP 封装出自己的 webdriver-client。
- 引入你的 webdriver-client 模块,查询 wd.js, 开始编写用例。
- // 这里是 wd 实例初始化
- var wd = require('./lib/webdriver-client')({
- platformName: platform,
- app: 'path/to/your/app'
- });
- describe('macaca mobile sample', function() {
- this.timeout(5 * 60 * 1000);
- var driver = wd.initPromiseChain();
- before(function() {
- return driver.initDriver();
- });
- after(function() {
- return driver
- .sleep(1000)
- .quit();
- });
- it('#1 should login success', function() {
- return driver
- .login('12345678', '111111')
- .sleep(1000);
- });
- ...
- });
复制代码 在工程根目录下执行命令行 macaca run --server 用例就可以跑起来了。
|
|