Ich versuche ein Selen Server Grid zu verwenden, um mehrere Befehle parallel auszuführen. Hier mein erster Testcode ist:Erstelle parallele Anfragen an ein Selenium Webdriver Grid
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();
});
});
}
Das ist das Ergebnis:
Get
Get
Get
Screenshot
foo/test0.png
Screenshot
foo/test1.png
Screenshot
foo/test2.png
Das "Get" erscheint sofort in der Folge "driver.get" schafft ein Versprechen. Meine Idee hier ist, dass die drei Anfragen asynchron gestellt werden und somit fast gleichzeitig erscheinen. Aber wie Sie auf dem Screenshot sehen können, werden sie nacheinander gemacht. Das Grid hat definitiv genügend Selen Instanzen, warum arbeitet der Treiber nicht parallel? Es scheint mir, dass "new webdriver.Builder()" eine Art Singleton erstellt, die nicht async funktioniert, sondern auf die vorherige Anfrage wartet, um zu beenden?
Danke für jede Hilfe!
Schön, danke! Es sieht jetzt ziemlich async aus, habe dieses Feature nicht bemerkt. Ich frage mich, ob es nun parallele Tests an Selen-Instanzen am Hub durchführt oder ob der Lastausgleich wie erwartet funktioniert. Aber ich werde es herausfinden;) – Gibbonson