Проверка правильности сортировки блоков c помощью WebDriver, пример на Ruby

Иногда требуется проверить правильность сортировки новостных блоков, истории переписки, постов на форуме и т. д.

Чаще всего такие блоки строятся по принципу, что сначала идут новые новости вверху, потом более старые внизу.

Как правило отличительной чертой сортировки служит дата и время блока, которые выводятся в самом блоке.
Для примера мы рассмотрим страницу истории правки статьи на Википедии Selenium: Revision history - Wikipedia

Первым делом мы должны понять, какие уникальные свойства есть у дат. В данном случае — это class="mw-changeslist-date".

Проверяем в консоли, что это так http://f.cl.ly/items/0n2g22360n1Q3I092y3p/Image%202013-11-27%20at%2011.40.21%20после%20полудня.png

Далее нам нужно найти все элементы с таким свойстов и взять их .text.
У нас получился массив из дат.
Осталось проверить, что он правильно отсортирован.
Для этого мы сравниваем его самим с собой, только с отсортированным по возрастанию и инвертированным.

Далее идёт магия.

wikipedia__spec.rb

# encoding: utf-8

require 'selenium-webdriver'
require 'date'

module Model
  CONFIG = {
      url: 'http://en.wikipedia.org/w/index.php?title=Selenium&action=history',
      browser: :chrome
  }
end

describe 'wikipedia' do
  # Перед всеми тестами создаём driver
  before :all do
    @driver = Selenium::WebDriver.for Model::CONFIG[:browser]
  end

  # Перед каждым тестом открываем сайт
  before :each do
    @driver.get Model::CONFIG[:url]
  end

  # После всех тестов закрываем driver
  after :all do
    @driver.close
  end

  it :history_date_sort do
    # Находим все элементы с class="mw-changeslist-date"
    elements = @driver.find_elements :class, 'mw-changeslist-date'
    # Итерируем массив найденных элементов и на выходе получаем массив из дат в формате Ruby
    dates = elements.map do |element|
      DateTime.parse element.text
    end
    # Проверяем, что наш массив равен нашему сортированному и инвертированному массиву
    dates.should == dates.sort.reverse
  end
end

Проверяем

$ rspec --color wikipedia__spec.rb 
.

Finished in 7.04 seconds
1 example, 0 failures
2 Likes