Sto provando a utilizzare una griglia di server di selenio per eseguire più comandi in parallelo. Ecco il mio primo codice di prova:Effettuare richieste parallele a una griglia Selenium Webdriver
var webdriver = require('selenium-webdriver');
for(var u = 0; u < 3; u++) {
makeScreenshot('foo/test' + u + '.png');
}
function makeScreenshot(path) {
var driver = new webdriver.Builder().forBrowser('firefox').usingServer('http://someurl:44111/wd/hub/').build();
console.log('Get');
driver.get('http://www.somepage.com').then(function() {
console.log('Screenshot');
driver.takeScreenshot().then(function(data){
console.log(path);
//var decodedImage = new Buffer(data, 'base64')
driver.quit();
});
});
}
Questo è il risultato:
Get
Get
Get
Screenshot
foo/test0.png
Screenshot
foo/test1.png
Screenshot
foo/test2.png
Il appare "Get" immediatamente in sequenza, "driver.get" crea una promessa. La mia idea qui è che le tre richieste sono fatte in modo asincrono e quindi appaiono quasi simultaneamente. Ma come puoi vedere nello screenshot saranno realizzati uno dopo l'altro. La griglia ha sicuramente abbastanza istanze di selenio, quindi perché il driver non funziona in parallelo? Mi sembra che "nuovo webdriver.Builder()" crei una sorta di singleton che non funziona asincrono ma aspetta che la richiesta precedente finisca !?
Grazie per qualsiasi aiuto!
Bello, grazie! Ora sembra abbastanza asincrono, non ho notato quella caratteristica. Mi chiedo se ora esegue test paralleli solo sull'istanza di selenio nell'hub o se il bilanciamento del carico funziona come previsto. Ma lo scoprirò;) – Gibbonson