0

有没有办法在 Windows 中(同时)使用多个无头浏览器进行 Web 自动化测试?

最好我需要自动化一个完全支持 javascript 的浏览器,所以一个现代的 Qt 后端,实现了 webkit,将是理想的。

SpynnerGhost.py看起来很有希望,但只支持“多于 1 个浏览器”设置的 X11 环境。

有任何想法吗?

4

3 回答 3

0

看看https://github.com/sgentle/phantomjs-node它说“你也可以通过多次调用 phantom.create() 来创建多个 phantomjs 进程,所以如果你出于某种疯狂的原因需要它,把自己搞砸!”

此外, https ://groups.google.com/forum/#!msg/phantomjs/Uj5SV6o214w/chFBUnw3vxQJ 还提到了在一个 Phantom.js 线程上运行多个“页面请求”。http://daker.me/2013/07/testing-your-responsive-design-with-phantomjs.html还展示了一种使用异步库实现此功能的方法。

我让它使用以下代码:

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 模块是:

于 2013-09-05T12:13:38.210 回答
0

怎么样http://dalekjs.com/ 它看起来很有希望。

于 2013-09-09T19:50:18.203 回答
0

在过去的一年里,我能够让它在两种语言中工作......

我用于zombie节点和Ghost.pypython。

Qt webkit 后端现在支持其浏览器对象中的“选项卡”,允许多个沙盒浏览器同时运行。我相信还有一个增强功能可以破坏单个 webkit 模型之间的共享实例,不允许一次实例化多个实例。

在节点上,我一次拥有超过 60 个独立浏览器,它们使用对象池进行轮换,而在 Python 中,我只需要 20-30 个;但它也完美无缺。

于 2014-09-16T16:48:33.930 回答