2012-04-08 2 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? 

}); 

Итак, как мне получить доступ к окну и переменным javascript? Я хочу проверить, правильно ли мой скрипт отслеживает «клики». Я хочу сделать что-то вроде expect(browser.document.window.myScript.click_counter).toBe 5.ZombieJS - Как мне вызвать функции JavaScript или проверить значения JavaScript?

ответ

1

Это зависит от того, где вы храните переменную.
Если вы храните его в глобальном объекте myScript, используйте:

browser.window.myScript.click_counter 

Если у вас есть что-то вроде myScript.click_counter = 5; document.myScript = { ... }, используйте:

browser.document.myScript.click_counter 
+0

скрипт загружается асинхронно. Как я могу определить, когда он загружен? поэтому я не смог получить к нему доступ. – CamelCamelCamel

+1

Вы можете использовать API-интерфейс 'browser.wait', описанный здесь: https://github.com/assaf/zombie/blob/master/doc/API.md – mihai

+1

, к сожалению, он не работает. можете ли вы представить пример кода? – CamelCamelCamel

4

Я получил его работает со следующим ... имея установить параметры 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) ; 
}); 

Однако второй callback никогда не срабатывает, и вызов querySelector всегда терпит неудачу. Я не думаю, что DOM window.document обновляется после запуска javascript-инъекции.

[править]

Я снял обратный вызов от browser.visit(), чтобы сделать ожидание обратного вызова огня.

this.browser.visit(url); 
1

мне нужно провернуть maxWait до 100. Что странно, потому что, предполагая, что это в мс, что короткая, но в секундах, ее безумно долго. На самом деле не совсем понятно, что делает maxWait, но, похоже, это имеет значение. К сожалению, я использую Behat/Mink с Zombie.js, и мне пришлось взломать источник драйвера Mink, чтобы он работал, что разочаровывает, потому что я не могу обновить этот драйвер сейчас без проблем ...