Иногда требуется проверить правильность сортировки новостных блоков, истории переписки, постов на форуме и т. д.
Чаще всего такие блоки строятся по принципу, что сначала идут новые новости вверху, потом более старые внизу.
Как правило отличительной чертой сортировки служит дата и время блока, которые выводятся в самом блоке.
Для примера мы рассмотрим страницу истории правки статьи на Википедии 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