2016-07-05 9 views
0

Ich hoffe, das ist eine dumme Frage mit einer einfachen Antwort.
(ich habe für einen Tag und eine Hälfte ohne Freude googeln)casperjs: kann jquery nicht globale Variablen verwenden

ich ein casperjs Skript schreibe, die ein Pull-Down-Menü wechselt
Ich habe den Test-Code verdummt auf den Kern des Problems zu bekommen
Mein Test HTML ist wie folgt:

<html> 
    <head> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> 
    </head> 
    <body style="background-color:powderblue;"> 
    <form> 
    <select id="down"> 
     <option value="volvo">Volvo</option> 
     <option value="saab">Saab</option> 
     <option value="vw">VW</option> 
     <option value="audi">Audi</option> 
    </select> 
    </form> 
    </body> 
    </html> 

Eine Arbeits Casperjs Skript mit jquery:

casper.start("http://192.168.0.14/test.html", function(){ 
    //change the pulldown selection 
    casper.then(function() { 
     this.evaluate(function(){ 
      $('#down').val('vw').change(); 
     }); 
    }); 

    casper.then(function(){ 
      this.capture("screen.png"); 
    }); 
}); 
casper.run(); 

Jetzt möchte ich die Zusammenarbeit parametrisieren de und verwenden Variablen anstelle von Strings für den Selektor und den Wert. Aber dieser Code nicht funktioniert:

var x1='#down'; 
var y1='vw'; 

casper.start("http://192.168.0.14/test.html", function(){ 
    //change the pulldown selection 
    casper.then(function() { 
     this.evaluate(function(){ 
      $(x1).val(y1).change(); 
     }); 
    }); 

    casper.then(function(){ 
      this.capture("screen.png"); 
    }); 
}); 
casper.run(); 

Dies sollte nicht schwierig sein (und wahrscheinlich auch nicht), aber alle Kombinationen von „Fenstern“. oder eckige Klammernotierungen haben mich enttäuscht.
jquery weigert sich, nett zu spielen.

Bitte helfen Sie, ich glaube nicht, das mir aus meiner Tiefe setzen würde, aber es hat eindeutig

Antwort

0

Try this: -

this.evaluate(function(x1, y1){ 
     $(x1).val(y1).change(); 
    }, x1, y1); 

Alles innerhalb evaluate ist Sandbox und Sie müssen übergeben Sie alle Parameter, die Sie verwenden möchten

+0

Das ist es! Sie wissen, wovon Sie sprechen. Vielen Dank – Norsak