有没有办法在Windows中使用多个无头浏览器(同时)进行Web自动化测试?
最好我需要使用完整的javascript支持自动化浏览器,因此实现webkit的现代Qt后端将是理想的。
Spynner和Ghost.py看起来很有前景,但仅支持“超过1个浏览器”设置的X11环境。
有什么想法吗?
答案 0 :(得分:0)
看看https://github.com/sgentle/phantomjs-node它说“你也可以通过多次调用phantom.create()来制作多个幻像进程,所以如果你出于某种疯狂的原因需要它,那么就把自己搞得一团糟!”
此外,https://groups.google.com/forum/#!msg/phantomjs/Uj5SV6o214w/chFBUnw3vxQJ还说明了在一个Phantom.js线程上运行多个“页面请求”的问题。此外,http://daker.me/2013/07/testing-your-responsive-design-with-phantomjs.html显示了使用Async库实现此目的的方法。
我使用以下代码:
var phantom = require('phantom');
var async = require('async');
var pagesToCall = [
['http://www.google.com', 8000],
['http://www.allthingsd.com', 8001],
['http://www.wired.com', 8002],
['http://www.mashable.com', 8003],
['http://www.stackoverflow.com', 8004]
];
function callPage(pageToCall) {
console.log(new Date().getTime() + ': Started page ' + pageToCall[0]);
console.log(new Date().getTime() + ': port:' + pageToCall[1]);
phantom.create({port: pageToCall[1]}, function(ph) {
ph.createPage(function(page) {
page.open(pageToCall[0], function(status) {
console.log(new Date().getTime() + ': Opened page? %s', status);
page.set('viewportSize', {
width: 1280,
height: 800
});
page.set('settings.userAgent', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1');
var filename = pageToCall[0].replace('http:\/\/', '') + '.png';
page.render('./screenshots/' + filename, function() {
console.log(new Date().getTime() + ': Wrote page ' + pageToCall[0]);
page.close();
ph.exit();
});
});
});
});
}
//Main
async.each(pagesToCall, callPage, function (e) {
if (e) console.log(e);
});
这是一个快速的黑客攻击。我相信这可以用更多的时间更好地实现。 pagesToCall数组有两个参数:要调用的网站的URL,以及与PhantomJS通信套接字的端口号。
我使用的NodeJS模块是:
答案 1 :(得分:0)
http://dalekjs.com/怎么样 看起来很有希望。
答案 2 :(得分:0)
在过去的一年里,我能够用两种语言工作......
我使用zombie
表示节点,Ghost.py
表示python。
Qt webkit后端现在支持"标签"在他们的浏览器对象中,允许多个沙盒浏览器同时运行。我相信还有一个增强功能打破了单个webkit模型之间的共享实例,不允许一次实例化多个。
在节点上,我使用对象池同时拥有超过60个独立浏览器,而在Python中,我只需要20-30个;但它也完美无瑕。