Selenium/Ruby/MediaWiki API

Category:Pages kept for historical interest

This tutorial will assume that you are running tests from your machine, targeting beta cluster.

You can use the MediaWiki action API for testing, reusing parts of Selenium/Stack, but without Selenium.

Examples will:

  • Check if a page exists using MediaWiki action API.

Stack

The stack:

LanguageRuby
Assertion libraryRSpec Expectations (ships with RSpec)
Testing frameworkRSpec
Mediawiki APImediawiki_api

Advantages

  • Simple stack with assertions and testing framework (setup, teardown, reporting...).

Disadvantages

  • Another tool to learn (testing framework).

Code

require 'mediawiki_api'

RSpec.describe 'Page' do
  before(:all) do
    @client = MediawikiApi::Client.new 'https://en.wikipedia.beta.wmflabs.org/w/api.php'
  end

  it 'Main Page should exist' do
    main_page = @client.action(:query, titles: ['Main Page']).data['pages']
    # => {"1"=>{"pageid"=>1, "ns"=>0, "title"=>"Main Page"}}

    # "1" means the page exists
    expect(main_page['1']).to be_instance_of Hash

    # "-1" means the page does not exist
    expect(main_page['-1']).to be_instance_of NilClass
  end

  it 'Missing Page should not exist' do
    missing_page =
      @client.action(:query, titles: ['Missing Page']).data['pages']
    # => {"-1"=>{"ns"=>0, "title"=>"Missing Page", "missing"=>""}}

    # "1" means the page exists
    expect(missing_page['1']).to be_instance_of NilClass

    # "-1" means the page does not exist
    expect(missing_page['-1']).to be_instance_of Hash
  end
end

Output

Everything is fine.

$ bundle exec rspec spec/api_spec.rb 
..
Finished in 1.78 seconds (files took 0.13949 seconds to load)
2 examples, 0 failures

There is a problem.

$ bundle exec rspec spec/api_spec.rb 
F.

Failures:

  1) Page Main Page should exist
     Failure/Error: expect(main_page['1']).to be_instance_of Hash
       expected nil to be an instance of Hash
     # ./spec/api_spec.rb:14:in `block (2 levels) in <top (required)>'

Finished in 2.43 seconds (files took 0.13955 seconds to load)
2 examples, 1 failure

Failed examples:

rspec ./spec/api_spec.rb:8 # Page Main Page should exist
Category:Selenium/Ruby
Category:Pages kept for historical interest Category:Selenium/Ruby