Posts tagged ‘ruby’

Проблемы с работой ActiveRecord во FreeBSD (iconv)

Написал я небольшое приложение на Ruby с использованием движка Ramaze, оттестировал и решил что пора ставить его «в живую».
Поставить приложение решил на FreeBSD сервер, для работы нужен был gem ActiveRecord (куда без него). При запуске любой программы использующей ActiveRecord я получал такую ошибку:

i18n_interpolation_deprecation.rb:23:in `<class:Simple>': undefined method `alias_method_chain' for I18n::Backend::Simple:Class (NoMethodError)

Гугление по ошибке навело меня на страницу блога: http://john.vipvip.com/blog/?p=71, приведенный солюшн мне не подходил т.к. предпологалось что я ставил Ruby из портов, а у меня был Ruby 1.9-1 из сорсов с официального сайта.
Стало понятно главное – проблема в iconv модуле для Ruby, как оказалось в архиве Ruby есть такая папка ext/iconv/, но почему-то по умолчанию в файле ext/Setup, iconv закомментирован(за подробностями в файл README). Когда я убрал комментарии и еще раз попытался собрать Ruby iconv опять не собрался :(

Опять таки путем гугуления нашел следующие два треда:
http://groups.google.com/group/emm-ruby/browse_thread/thread/e4aa78aa9c1e4c9d
http://groups.google.com/group/emm-ruby/browse_thread/thread/e77c51cfd7589f51
То-ли FreeBSD`ный линковщик не добавлял кое-какие папки в опции сборки, то-ли Ruby не до конца сконфигурирован для сборки во FreeBSD, в общем родился маленький хак для нормальной сборки iconv + ruby. Редактируем файл ext/iconv/extconf.rb, после все «require» блоков добавляем две строки:

$LIBS << " -L/usr/local/lib "
$CFLAGS << " -I/usr/local/include "

Еще раз пытаемся собрать Ruby и сдеать make install, теоретически iconv должен собраться :)

P.S.

Возможно вам понадобится предварительно поставить iconv из портов:

cd /usr/ports/converters/iconv/
make install clean

Автоматизация, как много в этом слове. Автоматизация работы в Web часть 2

А на утро они проснулись…

Перечитав последнюю статью понял что «недоперепил» и не добавил почти никакой документации. Исправляюсь…

Официальная страница Watir на RubyForge:
http://wtr.rubyforge.org/
Страница на OpenQA.org(изобилует примерами и документацией):
http://wiki.openqa.org/display/WTR/Project+Home
Инструкция по установке FireWatir:
http://wiki.openqa.org/display/WTR/FireWatir+Installation
Небольшая статья по той же теме:
http://citforum.ru/programming/ruby/watir/

Автоматизация, как много в этом слове. Автоматизация работы в Web

Вступление

Как уже говорилось в предисловии, все мы ленивы и хотим работать меньше и получать больше :) .
Именно для этих целей люди создали станки, автомобили и прочие другие прелести.
В этой заметке я хотел бы немного рассказать про автоматизацию работы с web-приложениями при помощи Ruby и Watir.

Что такое Watir?

Watir – библиотека для Ruby предназначенная для автоматизации работы с Web приложениями и их тестирования.
Существует также версии этой библиотеки для Java (Watij) и .Net(WatiN и BrowserUnit).

Что нужно для работы?

Для начала работы вам нужно:

  • Windows с IE 6 и выше (лучше всего IE8 т.к. он значительно меньше тормозит)
  • Firefox (см. ниже)
  • Ruby 1.8.6 или выше
  • Немного Интернет трафика
  • Ровные руки
  • Желание что-нибудь автоматизировать

Настройка и установка Watir

Ruby

Установим watir:

gem install watir

Соглашаемся с установкой всех пакетов по зависимостям.

Проверим что gem установился правильно, запустите irb и выполните следующие команды:

require 'rubygems'
require 'watir'

Если все хорошо, команды пройдут без ошибок.

Для самых ленивых ;) , устанавливаем в Firefox модуль iTest2, он позволяет записывать действия пользователя прямо в код на Ruby/Watir.
Скачать можно отсюда: http://www.itest2.com/downloads
Прямаю ссылка для установки: http://www.itest2.com/downloads/itest2recorder.xpi

После успешной установки в меню «Tool» («Инструменты») появится пункт «iTest2 Recorder Sidebar».

Отлично можно начинать программить >:-)

Простой пример использования Watir для поиска в Google

require 'rubygems'
require 'firewatir'
 
include FireWatir
 
browser = Watir::Browser.start "http://www.google.ru/"
browser.text_field(:name, "q").set("demotivation")
browser.button(:name,"btnG").click

Открывает гугль и ищет страницы по слову «demotivation»

Пример сложнее(нае… обманываем bux.to)

Для тех кто ждет «чуда», есть порталы аля http://bux.to, на таких сайтах вы получаете денежку за то что ходите по ссылкам которые вам дают. Вот простой пример как «дурить контору»(предпологается что вы уже залогинились):

require 'rubygems'
require 'watir'
ie = Watir::IE.new
ie.goto( 'http://www.bux.to/surf.php')
ie.refresh
doc = ie.document
index1 = 0
doc.links.each do |n|
  index1 += 1
end
        index = 18
while index >17 do
        index = 0
        doc.links.each do |n|
                index += 1
        end
        ie.link(:index, '11').click
        sleep(35)
        ie.refresh
end
ie.close
Watir::IE.close_all
Watir::IE.close_all

Для самых ленивых, iTest2 Recorder

Если вы не очень хотите забивать себе голову программированием воспользуйтесь iTest2 в Firefox.

Нажмите Alt+Shift+R. Сделайте все необходимые действия на сайте и нажмите «Record» в столбце iTest2. Перейдите на закладку «Watir» и скопируйте код.

Вставляем в текстовом редакторе, добавляем вначало следующие строки:

require 'rubygems'
require 'watir'
# ваш код

запускаем и наслаждаемся…

Ложка дегтя

Есть у iTest2 маленький недостаток, он не следит за экранированием двойных и ординарных кавычек, а так же неправильно вновит данные в поле типа «textarea» (вместо «browser.area» нужно писать «browser.text_field» ).

Заключение

Как админу мне не нравится винда, поэтому использование MS Windows + IE меня немного раздражает, но к сожалению это пока единственный вариант который меня устроил. Есть еще FireWatir, но к сожалению проект не поддерживает некоторых функций Watir и абсолютно не понимает кодировки отличные от ASCII. Если у кого-то есть желание, я могу описать как пользовать FireWatir (он работает и в Linux), пишите в комментариях.