Próbuję użyć siatki serwerów selenowych do jednoczesnego uruchamiania wielu poleceń. Oto mój pierwszy kod testu:Wykonywanie równoległych żądań do siatki 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();
});
});
}
To rezultat: pojawia się natychmiast w sekwencji
Get
Get
Get
Screenshot
foo/test0.png
Screenshot
foo/test1.png
Screenshot
foo/test2.png
"Get", "driver.get" tworzy obietnicę. Mój pomysł polega na tym, że trzy żądania są wykonywane asynchronicznie, a zatem pojawiają się niemal jednocześnie. Ale jak widać na zrzucie ekranu, zostaną one wykonane jeden po drugim. Siatka ma zdecydowanie wystarczającą liczbę instancji selenu, więc dlaczego sterownik nie działa równolegle? Wydaje mi się, że "nowy webdriver.Builder()" tworzy jakiś singleton, który nie działa asynchronicznie, ale czeka na zakończenie poprzedniego żądania !?
Dzięki za pomoc!
Dobrze, dziękuję! Teraz wygląda całkiem asynchronicznie, nie zauważyłem tej funkcji. Zastanawiam się, czy teraz uruchamia testy równoległe tylko na instancji selenu w hubie lub czy równoważenie obciążenia działa zgodnie z oczekiwaniami. Ale dowiem się;) – Gibbonson