Как я могу управлять браузером (ala Selenium) с помощью node.js ?

#node.js

#node.js

Вопрос:

Я слышал о soda, но, похоже, для этого требуется регистрация, а количество минут ограничено (бесплатный доступ / 200 минут).

Кто-нибудь знает, есть ли какой-нибудь альтернативный способ управлять браузером или, более конкретно, вызывать JS на веб-странице?

Комментарии:

1. это для кроссплатформенной съемки видео. Вы можете использовать soda на своем компьютере

2. Как бы вы подключили его к localhost: 4444, который был бы моим экземпляром браузера Selenium?

3. @Alfred — аааа, github.com/LearnBoost/soda/raw/master/examples/google.js спасибо.. не могли бы вы опубликовать это в качестве ответа?

Ответ №1:

https://github.com/LearnBoost/soda/raw/master/examples/google.js

 /**
 * Module dependencies.
 */

var soda = require('../')
  , assert = require('assert');

var browser = soda.createClient({
    host: 'localhost'
  , port: 4444
  , url: 'http://www.google.com'
  , browser: 'firefox'
});

browser.on('command', function(cmd, args){
  console.log(' x1b[33m%sx1b[0m: %s', cmd, args.join(', '));
});

browser
  .chain
  .session()
  .open('/')
  .type('q', 'Hello World')
  .clickAndWait('btnG')
  .getTitle(function(title){
    assert.ok(~title.indexOf('Hello World'), 'Title did not include the query');
  })
  .clickAndWait('link=Advanced search')
  .waitForPageToLoad(2000)
  .assertText('css=#gen-query', 'Hello World')
  .assertAttribute('as_q@value', 'Hello World')
  .testComplete()
  .end(function(err){
    if (err) throw err;
    console.log('done');
  });
  

Ответ №2:

Zombie.js может сработать для вас. Он безголовый и кажется действительно крутым.

Комментарии:

1. Я не понимаю эту безголовую вещь. Даже если это работает в браузере Zombie, это не гарантирует, что оно будет работать в FF, IE, Chrome, Safari и Opera.

2. Вы могли бы запустить тесты, которые проверяют функциональность, а затем проверить рендеринг с помощью чего-то другого. Я использую zombie.js чтобы ускорить проверку, но не заменять ее полностью.

3. @mcotton как вы проверяете рендеринг? вы имеете в виду сравнение вывода html на zombie.js с выводом в реальном браузере?

4. @ajsie Я думаю, что эта безголовая штука больше предназначена для тестирования функциональности вашего веб-сайта (например, во время большого рефакторинга), чем для тестирования совместимости браузера. По крайней мере, поэтому я заинтересован в этом.

Ответ №3:

На самом деле теперь есть привязки Selenium для JavaScript, которые работают с Node.js .

Вот несколько основных шагов для начала:

  1. 1 Установите Node.js , вы можете найти загрузку здесь.
  2. Убедитесь, что у вас установлен последний драйвер Chrome, и поместите его в свой path.
  3. Используйте npm install selenium-webdriver для добавления модуля в ваш проект.
  4. Напишите тест, например:


var webdriver = require('selenium-webdriver');

 var driver = new webdriver.Builder().
   withCapabilities(webdriver.Capabilities.chrome()).
   build();

driver.get('http://www.google.com');
driver.findElement(webdriver.By.name('q')).sendKeys('simple programmer');
driver.findElement(webdriver.By.name('btnG')).click();
driver.quit();</code>
  

Я описываю, как это сделать, с помощью нескольких скриншотов и как использовать Mocha в качестве тестового драйвера в моем блоге здесь.

Ответ №4:

Вот чистый node.js оболочка вокруг java API для webdriver от selenium:

https://npmjs.org/package/webdriver-sync

Вот пример:

 var webdriverModule = require("webdriver-sync");
var driver = new webdriverModule.ChromeDriver;
var By = webdriverModule.By;
var element = driver.findElement(By.name("q"));
element.sendKeys("Cheese!");
element.submit();
element = driver.findElement(By.name("q"));
assert.equal(element.getAttribute('value'), "Cheese!");
  

Сохраните это в файле .js и запустите его с помощью node.

Модуль представляет собой чистую оболочку, поэтому такие вещи, как режим ожидания или синхронные вызовы, вполне возможны. Вот текущий интерфейс модуля:

 module.exports={
   ChromeDriver:ChromeDriver,
   FirefoxDriver:FirefoxDriver,
   HtmlUnitDriver:HtmlUnitDriver,
   By:new By(),
   ExpectedConditions:new ExpectedConditions(),
   WebDriverWait:WebDriverWait,
   Credentials:UserAndPassword,
   Cookie:Cookie,
   TimeUnits:TimeUnits,
   /**
    * @param {number} amount in mills to sleep for.
    */
   sleep:function(amount){
      java.callStaticMethodSync(
         "java.lang.Thread",
         "sleep",
         new Long(amount)
      );
   }
};
  

Вы можете увидеть интеграционный тест, который проверяет все возможности здесь:

https://github.com/jsdevel/webdriver-sync/blob/master/test/integrations/SmokeIT.js

Ответ №5:

wd — это «A node.js клиент javascript для webdriver / selenium 2»

Комментарии:

1. Есть хорошее место, где можно найти руководство? Я не могу запустить ни одного примера wd, потому что title переменная является undefined ошибкой