ich mehrere Instanzen von CasperJS auf dem gleichen Prozess zu laufen versuche, sieht mein Testcode etwas wie folgt aus:Kann CasperJS mehrere Instanzen im selben Prozess ausführen?
['user1,pass1', 'user2,pass2'].forEach(function(account) {
var casperInstance = require('casper').create({
verbose: true,
logLevel: "debug",
webSecurityEnabled: false,
pageSettings: {
loadImages: true,
loadPlugins: true,
userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.94 Safari/537.4'
}
});
runit(casperInstance, account);
});
function runit(casperi, account) {
casperi.options.viewportSize = {width: 1920, height: 1080};
var account = account.split(',');
casperi.start('https://www.example.com/login/', function () {
var x = require('casper').selectXPath;
this.fill('form.loginForm', {
'username': account[0],
'password': account[1]
}, false);
this.click(x('//*[text()="Log in"]'));
}).waitForUrl(/https:\/\/www.example.com\/$/, function then() { // have to use this because the form is submitted with ajax, is there a better way?
//this.echo(this.getHTML());
this.echo('Logged in');
}, function OnTimeout() {
this.echo('Login Failed');
}, 20000);
casperi.run();
}
Mit nur einem Konto auf dem Array es in Ordnung, aber mit zwei arbeitet oder mehr, die es immer Ich glaube nicht, dass mein Code mehrere casper-Instanzen ausführt, denn wenn ich den gesamten Login-Code ersetze, um nur den HTML-Code (oder irgendwas anderes) auszudrucken, druckt er ihn nur einmal.
Gibt es eine Möglichkeit, mehrere Instanzen von CasperJS im selben Prozess auszuführen, oder ist es die einzige Lösung, einen Starter zum Starten mehrerer Prozesse zu erstellen?
Ich frage mich, ob das ist, warum ich die richtigen Ergebnisse nicht erhalten kann, wenn Casper-Tests parallel gegen den gleichen Server laufen. Manchmal führen sie den Server mit den richtigen Daten aus, manchmal nicht. –
@Canadian_Republican Nein, wahrscheinlich nicht. Aber wenn die Seite 'localStorage' verwendet, ist das wahrscheinlich das Problem. Das einzige, was PhantomJS standardmäßig auf der Festplatte hält, ist 'localStorage'. Daher können mehrere CasperJS-Instanzen, die in verschiedenen PhantomJS-Prozessen ausgeführt werden, die 'localStorage' des jeweils anderen überschreiben. Ich kann jedoch nicht sicher sein. –