#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 Установите Node.js , вы можете найти загрузку здесь.
- Убедитесь, что у вас установлен последний драйвер Chrome, и поместите его в свой path.
- Используйте
npm install selenium-webdriver
для добавления модуля в ваш проект. - Напишите тест, например:
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
ошибкой