среда, 27 февраля 2013 г.

Drag and drop - selenium ruby rspec!

Итак спустя 2 дня таки вышло реализовать drag and drop.
Моя конфигурация - webdriver 2.30.0 , ff 18.0.2

И собственно сам кодище))
Причем оба варианта работают, а вот без слипов беда - приходится их везде дописывать
Остальной код не стала подчищать ибо может тоже пригодиться))


# encoding: utf-8
require_relative '../lib/login_page'


describe "Draga" do
  before (:all) do
    @page = LoginPage.new(@browser, true)
    @page.login_user
  end
  it "do it" do
    @page.navigate_to("http://dfghh.test-pul.ru/articles/order")
    element1=@browser.find_element(:css, 'div.tip')
    element2= @browser.find_element(:xpath, '//div[text()="sdfsf"]')
    element3=@browser.find_element(:link,"Отменить")
    el= @browser.find_element(:xpath, '//span[text()="Оформление сайта"]')
    puts el.location
    @browser.mouse.move_to(el)
    sleep 3
    puts element1.location
    puts element2.location
    @browser.action.click_and_hold(element1).move_to(element2).release.perform
    sleep 3
    @browser.action.drag_and_drop(element1, element2).perform

    sleep 3
    #@browser.mouse.click(element3)
    @browser.action.click(element3).perform

    sleep 3
    @page.current_url.should_not include "order"
    sleep 3
  end
end 

вторник, 19 февраля 2013 г.

Причесываю тесты следуя правил


1. Дублирующиеся тесты в разных контекстах можно вынести в shared_examples (https://www.relishapp.com/rspec/rspec-core/v/2-12/docs/example-groups/shared-examples!), например так:
shared_examples_for "страница с ошибками во всех полях" do
  it { @login_page.should be_errors }
  it { @login_page.should be_error_wrong_fio }
  it { @login_page.should be_error_wrong_email }
  it { @login_page.should be_error_no_match_pass }
end
describe " фио цифрами" do
  it { ... }
  it_behaves_like "страница с ошибками во всех полях"
end
describe " фио на английском" do
  it { ... }
  it_behaves_like "страница с ошибками во всех полях"
end
shared_examples лучше все выносить в отдельный файлик и хранить его в папочке support
Если эти описания нельзя как-то логически объединить в один shared_examples_for, навроде "

регистрация с ошибками", то лучше использовать для каждого дискрайба отдельные, пусть даже повторяющиеся, но понятные it

2. в rspec принято все общие заголовочные вещи выносить в spec/spec_helper.rb и во всех спеках:
require 'spec_helper'
кроме того в нем можно предварительно установить общие для тестов переменные
RSpec.configure do |config|
  config.let!(:browser) { Selenium::WebDriver.for :ff }
end