2013-08-31 2 views
0

Есть ли способ использовать несколько браузеров без браузера (одновременно) в Windows для тестирования веб-автоматизации?Несколько браузеров без браузера в среде Windows?

Предпочтительно мне нужно автоматизировать браузер с полной поддержкой javascript, поэтому современный Qt-сервер с встроенным webkit будет идеальным.

Spynner и Ghost.py выглядели многообещающими, но поддерживали только среду X11 для настроек «более одного браузера».

Любые идеи?

+0

Не знаю, из любопытства, есть ли что-то, что вы используете, что делает * одиночный * безголовый браузер на окнах? – AdamKG

+0

Механизм для нескольких головок в Python, но не поддержка JS. Селен для безголового. Но одна виртуальная машина для каждого теста не очень легко масштабируется. – blakev

+0

Это что без головы? Не удалось сделать win32 + selenium через пару лет, но в то время он был полностью виден. И ... ну ... куча виртуальных машин - это простой способ: P. Облака imo. – AdamKG

ответ

0

В прошлом году я был в состоянии получить эту работу на обоих языках ...

Я использовал zombie для узла и Ghost.py для питона.

Теперь бэкенд Qt webkit поддерживает «вкладки» в своих объектах браузера, что позволяет одновременно запускать несколько изолированных браузеров. Я считаю, что было также усовершенствование, которое разбило общий экземпляр между одной моделью веб-калит, не позволяя создавать несколько экземпляров за один раз.

На узле у меня было свыше 60 независимых браузеров одновременно, которые вращаются с использованием пула объектов, а в Python мне только понадобилось 20-30; но он работал безупречно.

+0

Можете ли вы поделиться более подробной информацией/сценарием? – Volatil3

0

Посмотрите на https://github.com/sgentle/phantomjs-node. Он говорит: «Вы также можете сделать несколько процессов phantomjs, вызвав 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 модули I используются:

+0

Я знаю, что он говорит, что «может» это сделать ... но на самом деле это не работает. – blakev

+1

На самом деле, это работает для меня в Windows 7: см. Https://gist.github.com/tobilg/6493767 для кода! – Tobi

+0

Награжден за наибольшее усилие - мне нужно будет изучить это чуть позже. Спасибо чувак!! – blakev

Смежные вопросы