Внедрение JavaScript в Zombie.js

Привет, мне было интересно, есть ли в узле js и zombie js возможность вставлять файлы javascript в безголовый браузер, аналогично тому, что вы можете делать с phantomjs.

Например, в фантомном JS вы должны сделать:

page.injectJs("amino/TVI.js")

Я использовал phantomjs, и он делает то, что я хочу, но, тем не менее, я тестирую другие варианты из-за большого объема памяти, требуемого при использовании phantom js.

2 ответа

Вы можете добавить тег script в объект документа, так как он поддерживает DOM API в зомби.

В следующем примере показано, как вставить jquery на домашнюю страницу зомби:

var Browser = require("zombie");
var assert = require("assert");    

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

  assert.ok(browser.success);

  // append script tag
  var injectedScript = browser.document.createElement("script");
  injectedScript.setAttribute("type","text/javascript");
  injectedScript.setAttribute("src", "http://code.jquery.com/jquery-1.11.0.min.js");    

  browser.body.appendChild(injectedScript);    

  browser.wait(function(window) {
    // make sure the new script tag is inserted
    return window.document.querySelectorAll("script").length == 4;
  }, function() {
    // jquery is ready
    assert.equal(browser.evaluate("$.fn.jquery"), "1.11.0");
    console.log(browser.evaluate("$('title').text()"));
  });
});

Попробуй думать иначе. У вас уже есть все под рукой в ​​зомби, чтобы ввести все, что вы хотите.

Например: that.browser.window указывает на окно jsdom, которое каждая часть вашего сайта javascript использует в качестве основы. Таким образом, вы можете получить доступ к DOM и всем другим объектам окна на странице уже загружены.

Я не знаю, что вы хотите архивировать с помощью инъекций - вы не должны использовать его для тестирования, но похоже, что это не ваша настоящая цель

Другие вопросы по тегам