在日常的测试场景中经常会遇到多个驱动混用的情况。例如测试手机 APP 时,需要填写验证码,验证码又需要从某些 PC 端方可获取,还有很多情况需要手机,PC 端联动,我们来举个简单的例子如何来解决此类。
Macaca 支持一个任务中同一端口创建多 session,不同的 session 处理不同 driver 的任务即可。
代码如下:
var _ = require('macaca-utils');
var webdriverClient = require('webdriver-client');
var AndroidChromeOpts = {
platformName: 'Android',
browserName: 'Chrome'
};
var ElectronOpts = {
platformName: 'desktop',
browserName: 'electron'
};
function initElectron() {
var electron_wd = webdriverClient(ElectronOpts);
return electron_wd.initPromiseChain();
}
function initAndroidChrome() {
var android_chrome_wd = webdriverClient(AndroidChromeOpts);
return android_chrome_wd.initPromiseChain();
}
describe('macaca mobile sample', function() {
this.timeout(5 * 60 * 1000);
var driver2 = initElectron();
before(function() {
return driver2
.initDriver();
});
after(function() {
return driver2
.quit();
});
it('#0 should get url', function() {
return driver2
.setWindowSize(800, 600)
.get('http://www.weibo.com')
.sleep(5000)
.elementByCss('input.W_input')
.sendKeys('达峰的夏天')
.sleep(3000)
.elementByCss('[node-type="searchSubmit"]')
.click()
.sleep(5000)
.elementByCss('#pl_weibo_directtop .star_card')
.text()
.then(content => {
var arr = content.split(' ');
var url = arr[arr.length - 1];
console.log(`get url: ${url}`);
const driver1 = initAndroidChrome();
return driver1
.initDriver()
.get(url)
.sleep(5000);
});
});
});
示例中先打开 PC 端页面拿到 url,然后进入 Android 模拟器调用浏览器再次打开移动版。
本示例添加了持续集成,可以通过 log 看到执行效果,加深理解。
本示例源代码:macaca-multi-driver-sample
欢迎讨论,互相学习。
微博: http://weibo.com/xudafeng
Github: https://github.com/xudafeng