2012-04-08 5 views
2
var Browser = require("zombie"); 

// Load the page from localhost 
browser = new Browser() 
browser.visit("http://localhost:3000/", function() { 

    // Let's say the page has window.jQuery 
    // How do I access it? 

}); 

Also, wie greife ich auf das Fenster und die Javascript-Variablen? Ich möchte überprüfen, ob mein Skript die Klicks korrekt erfasst. Ich möchte etwas wie expect(browser.document.window.myScript.click_counter).toBe 5 machen.ZombieJS - Wie rufe ich JavaScript-Funktionen auf oder prüfe JavaScript-Werte?

Antwort

1

Es hängt davon ab, wo Sie Ihre Variable gespeichert haben.
Wenn Sie es in einem globalen Objekt gespeichert myScript verwenden:

browser.window.myScript.click_counter 

Wenn Sie so etwas wie myScript.click_counter = 5; document.myScript = { ... } haben, verwenden Sie:

browser.document.myScript.click_counter 
+0

Skript wird asynchron geladen. Wie kann ich feststellen, wenn es geladen ist? deshalb konnte ich nicht darauf zugreifen. – CamelCamelCamel

+1

Sie könnten die API 'browser.wait' verwenden, die hier beschrieben wird: https://github.com/assaf/zombie/blob/master/doc/API.md – mihai

+1

Leider scheint es nicht zu funktionieren. Könnten Sie ein Codebeispiel bereitstellen? – CamelCamelCamel

4

Ich habe es mit dem Arbeits folgenden ... mit die Optionen maxWait

var opts = { 
    debug: false 
    , runScripts: true 
    , maxWait: 10 
    , waitFor: 10000 
}; 

this.browser = new Browser(opts); 

this.browser.visit(url, callback); 

this.browser.wait(function(window) { 
    console.log('wait...'); 

    return window.document.querySelector("#objectid"); 
}, function(e, browser) { 
    console.log('wait complete ', e) ; 
}); 

die zweitejedoch 10 Methode wird nie ausgelöst und der querySelector Aufruf schlägt immer fehl. Ich glaube nicht, dass das window.document DOM aktualisiert wird, nachdem die Javascript-Injektion ausgelöst wurde.

[Bearbeiten]

ich den Rückruf von browser.visit() entfernt, um die Wartezeit Rückruf Feuer zu machen.

this.browser.visit(url); 
1

Ich brauchte maxWait bis zu 100 Kurbel der seltsam ist, weil, dass in ms ist vorausgesetzt, das ist kurz, aber in Sekunden, sein irrsinnig lang. Es ist nicht wirklich klar, was maxWait tut, aber es schien einen Unterschied zu machen. Leider benutze ich Behat/Mink mit Zombie.js und ich musste die Quelle des Mink Treibers hacken, damit es funktioniert, was enttäuschend ist, da ich den Treiber jetzt nicht ohne Probleme aktualisieren kann ...