mediawiki_selenium 1.0.0.pre.2 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rubocop.yml +23 -1
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/Gemfile +1 -4
- data/UPGRADE.md +1 -1
- data/bin/mediawiki-selenium-init +1 -1
- data/lib/mediawiki_selenium/browser_factory/base.rb +8 -8
- data/lib/mediawiki_selenium/browser_factory/chrome.rb +1 -1
- data/lib/mediawiki_selenium/browser_factory/firefox.rb +4 -4
- data/lib/mediawiki_selenium/browser_factory/phantomjs.rb +2 -2
- data/lib/mediawiki_selenium/browser_factory.rb +5 -5
- data/lib/mediawiki_selenium/environment.rb +15 -14
- data/lib/mediawiki_selenium/initializer.rb +4 -4
- data/lib/mediawiki_selenium/page_factory.rb +1 -1
- data/lib/mediawiki_selenium/remote_browser_factory.rb +12 -8
- data/lib/mediawiki_selenium/step_definitions/login_steps.rb +0 -11
- data/lib/mediawiki_selenium/step_definitions/navigation_steps.rb +0 -11
- data/lib/mediawiki_selenium/step_definitions/preferences_steps.rb +0 -11
- data/lib/mediawiki_selenium/step_definitions/resource_loader_steps.rb +0 -11
- data/lib/mediawiki_selenium/step_definitions/upload_file_steps.rb +3 -3
- data/lib/mediawiki_selenium/step_definitions.rb +5 -5
- data/lib/mediawiki_selenium/support/env.rb +5 -16
- data/lib/mediawiki_selenium/support/hooks.rb +15 -26
- data/lib/mediawiki_selenium/support/modules/api_helper.rb +5 -7
- data/lib/mediawiki_selenium/support/pages/api_page.rb +6 -6
- data/lib/mediawiki_selenium/support/pages/login_page.rb +13 -12
- data/lib/mediawiki_selenium/support/pages/random_page.rb +2 -2
- data/lib/mediawiki_selenium/support/pages/reset_preferences_page.rb +3 -3
- data/lib/mediawiki_selenium/support/pages.rb +4 -4
- data/lib/mediawiki_selenium/support/sauce.rb +14 -18
- data/lib/mediawiki_selenium/support.rb +4 -4
- data/lib/mediawiki_selenium/version.rb +1 -12
- data/lib/mediawiki_selenium/warnings_formatter.rb +15 -15
- data/lib/mediawiki_selenium.rb +8 -19
- data/mediawiki_selenium.gemspec +35 -28
- data/spec/api_helper_spec.rb +25 -25
- data/spec/browser_factory/base_spec.rb +50 -46
- data/spec/browser_factory/chrome_spec.rb +11 -11
- data/spec/browser_factory/firefox_spec.rb +17 -17
- data/spec/browser_factory/phantomjs_spec.rb +11 -11
- data/spec/environment_spec.rb +194 -159
- data/spec/page_factory_spec.rb +12 -12
- data/spec/remote_browser_factory_spec.rb +15 -15
- data/spec/spec_helper.rb +2 -2
- data/templates/tests/browser/features/support/env.rb +3 -3
- metadata +9 -9
- data/.rubocop_todo.yml +0 -160
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 834dc185ba694c50b41bd95e0364c4c75071a8bf
|
4
|
+
data.tar.gz: 5a0425ce60b219c451b046653945a3561947f7e0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 44f9e8fbe4cae9d9e30044ac2986601cb72859af136f07723755d58084ce6225766ddc21bd3d16e59e6bef183ef969213ff6f1e5a1a789ede3e0b0854165ccd5
|
7
|
+
data.tar.gz: 956616b547ae43072e3fd3a417fc67910e85539b7da1a354fb07c65d81a0d2fcb00aa48ad0c2b06c61a0bb1151ff8c2cd7033c94f10e203d22b535b88424ef1f
|
data/.rubocop.yml
CHANGED
@@ -1 +1,23 @@
|
|
1
|
-
|
1
|
+
AllCops:
|
2
|
+
StyleGuideCopsOnly: true
|
3
|
+
|
4
|
+
Metrics/LineLength:
|
5
|
+
Max: 100
|
6
|
+
|
7
|
+
Metrics/MethodLength:
|
8
|
+
Enabled: false
|
9
|
+
|
10
|
+
Style/Alias:
|
11
|
+
Enabled: false
|
12
|
+
|
13
|
+
Style/DotPosition:
|
14
|
+
EnforcedStyle: trailing
|
15
|
+
|
16
|
+
Style/FileName:
|
17
|
+
Exclude: ['bin/*']
|
18
|
+
|
19
|
+
Style/SignalException:
|
20
|
+
Enabled: false
|
21
|
+
|
22
|
+
Style/TrivialAccessors:
|
23
|
+
ExactNameMatch: true
|
data/.ruby-gemset
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
mediawiki_selenium
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.1.5
|
data/Gemfile
CHANGED
data/UPGRADE.md
CHANGED
data/bin/mediawiki-selenium-init
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require 'watir-webdriver'
|
2
2
|
|
3
3
|
module MediawikiSelenium
|
4
4
|
module BrowserFactory
|
@@ -15,8 +15,8 @@ module MediawikiSelenium
|
|
15
15
|
# @example Always configure Firefox's language according to `:browser_language`
|
16
16
|
# module MediawikiSelenium::BrowserFactory
|
17
17
|
# class Firefox < Base
|
18
|
-
# bind(:browser_language) do |
|
19
|
-
# options[:desired_capabilities][:firefox_profile]["intl.accept_languages"] =
|
18
|
+
# bind(:browser_language) do |lang, options|
|
19
|
+
# options[:desired_capabilities][:firefox_profile]["intl.accept_languages"] = lang
|
20
20
|
# end
|
21
21
|
# end
|
22
22
|
# end
|
@@ -27,7 +27,7 @@ module MediawikiSelenium
|
|
27
27
|
# the browser options.
|
28
28
|
#
|
29
29
|
def bind(*names, &blk)
|
30
|
-
raise ArgumentError,
|
30
|
+
raise ArgumentError, 'no block given' unless block_given?
|
31
31
|
|
32
32
|
key = names.length == 1 ? names.first : names
|
33
33
|
default_bindings[key] ||= []
|
@@ -41,7 +41,7 @@ module MediawikiSelenium
|
|
41
41
|
#
|
42
42
|
def bindings
|
43
43
|
if superclass <= Base
|
44
|
-
default_bindings.merge(superclass.bindings) { |
|
44
|
+
default_bindings.merge(superclass.bindings) { |_key, old, new| old + new }
|
45
45
|
else
|
46
46
|
default_bindings
|
47
47
|
end
|
@@ -116,7 +116,7 @@ module MediawikiSelenium
|
|
116
116
|
# @return [Hash]
|
117
117
|
#
|
118
118
|
def bindings
|
119
|
-
self.class.bindings.merge(@bindings) { |
|
119
|
+
self.class.bindings.merge(@bindings) { |_key, old, new| old + new }
|
120
120
|
end
|
121
121
|
|
122
122
|
# Instantiate a browser using the given environmental configuration.
|
@@ -182,7 +182,7 @@ module MediawikiSelenium
|
|
182
182
|
# @param env [Environment] Environment.
|
183
183
|
# @param status [Symbol] Status of the executed scenario.
|
184
184
|
#
|
185
|
-
def teardown(
|
185
|
+
def teardown(_env, _status)
|
186
186
|
# abstract
|
187
187
|
end
|
188
188
|
|
@@ -196,7 +196,7 @@ module MediawikiSelenium
|
|
196
196
|
Selenium::WebDriver::Remote::Capabilities.send(browser_name)
|
197
197
|
end
|
198
198
|
|
199
|
-
def finalize_options!(
|
199
|
+
def finalize_options!(_options)
|
200
200
|
# abstract
|
201
201
|
end
|
202
202
|
|
@@ -10,7 +10,7 @@ module MediawikiSelenium
|
|
10
10
|
#
|
11
11
|
class Chrome < Base
|
12
12
|
bind(:browser_language) do |language, options|
|
13
|
-
options[:prefs][
|
13
|
+
options[:prefs]['intl.accept_languages'] = language
|
14
14
|
end
|
15
15
|
|
16
16
|
bind(:browser_user_agent) do |user_agent, options|
|
@@ -12,16 +12,16 @@ module MediawikiSelenium
|
|
12
12
|
class Firefox < Base
|
13
13
|
bind(:browser_timeout) do |timeout, options|
|
14
14
|
timeout = timeout.to_i
|
15
|
-
options[:profile][
|
16
|
-
options[:profile][
|
15
|
+
options[:profile]['dom.max_script_run_time'] = timeout
|
16
|
+
options[:profile]['dom.max_chrome_script_run_time'] = timeout
|
17
17
|
end
|
18
18
|
|
19
19
|
bind(:browser_language) do |language, options|
|
20
|
-
options[:profile][
|
20
|
+
options[:profile]['intl.accept_languages'] = language
|
21
21
|
end
|
22
22
|
|
23
23
|
bind(:browser_user_agent) do |user_agent, options|
|
24
|
-
options[:profile][
|
24
|
+
options[:profile]['general.useragent.override'] = user_agent
|
25
25
|
end
|
26
26
|
|
27
27
|
protected
|
@@ -10,11 +10,11 @@ module MediawikiSelenium
|
|
10
10
|
#
|
11
11
|
class Phantomjs < Base
|
12
12
|
bind(:browser_language) do |language, options|
|
13
|
-
options[:desired_capabilities][
|
13
|
+
options[:desired_capabilities]['phantomjs.page.customHeaders.Accept-Language'] = language
|
14
14
|
end
|
15
15
|
|
16
16
|
bind(:browser_user_agent) do |user_agent, options|
|
17
|
-
options[:desired_capabilities][
|
17
|
+
options[:desired_capabilities]['phantomjs.page.settings.userAgent'] = user_agent
|
18
18
|
end
|
19
19
|
end
|
20
20
|
end
|
@@ -1,9 +1,9 @@
|
|
1
1
|
module MediawikiSelenium
|
2
2
|
module BrowserFactory
|
3
|
-
autoload :Base,
|
4
|
-
autoload :Firefox,
|
5
|
-
autoload :Chrome,
|
6
|
-
autoload :Phantomjs,
|
3
|
+
autoload :Base, 'mediawiki_selenium/browser_factory/base'
|
4
|
+
autoload :Firefox, 'mediawiki_selenium/browser_factory/firefox'
|
5
|
+
autoload :Chrome, 'mediawiki_selenium/browser_factory/chrome'
|
6
|
+
autoload :Phantomjs, 'mediawiki_selenium/browser_factory/phantomjs'
|
7
7
|
|
8
8
|
# Resolves and instantiates a new factory for the given browser name.
|
9
9
|
#
|
@@ -17,7 +17,7 @@ module MediawikiSelenium
|
|
17
17
|
# @return [BrowserFactory::Base]
|
18
18
|
#
|
19
19
|
def self.new(browser_name)
|
20
|
-
factory_class = const_get(browser_name.to_s.split(
|
20
|
+
factory_class = const_get(browser_name.to_s.split('_').map(&:capitalize).join(''))
|
21
21
|
factory_class.new(browser_name)
|
22
22
|
end
|
23
23
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require 'yaml'
|
2
2
|
|
3
3
|
module MediawikiSelenium
|
4
4
|
# Provides an interface that unifies environmental configuration, page
|
@@ -85,11 +85,11 @@ module MediawikiSelenium
|
|
85
85
|
# @see load
|
86
86
|
#
|
87
87
|
def load_default
|
88
|
-
load(ENV[
|
88
|
+
load(ENV['MEDIAWIKI_ENVIRONMENT'], ENV)
|
89
89
|
end
|
90
90
|
end
|
91
91
|
|
92
|
-
self.default_configuration =
|
92
|
+
self.default_configuration = 'environments.yml'
|
93
93
|
|
94
94
|
def initialize(*configs)
|
95
95
|
@_config = configs.map { |config| normalize_config(config) }.reduce(:merge)
|
@@ -168,7 +168,7 @@ module MediawikiSelenium
|
|
168
168
|
# @return [Symbol]
|
169
169
|
#
|
170
170
|
def browser_name
|
171
|
-
lookup(:browser, default:
|
171
|
+
lookup(:browser, default: 'firefox').downcase.to_sym
|
172
172
|
end
|
173
173
|
|
174
174
|
# A reference to this environment. Can be used in conjunction with {#[]}
|
@@ -227,7 +227,7 @@ module MediawikiSelenium
|
|
227
227
|
# Whether browsers should be left open after each scenario completes.
|
228
228
|
#
|
229
229
|
def keep_browser_open?
|
230
|
-
lookup(:keep_browser_open, default:
|
230
|
+
lookup(:keep_browser_open, default: 'false') == 'true'
|
231
231
|
end
|
232
232
|
|
233
233
|
# Returns the configured value for the given env variable name.
|
@@ -334,10 +334,10 @@ module MediawikiSelenium
|
|
334
334
|
# @yieldparam browser [Watir::Browser] Browser object, before it's closed.
|
335
335
|
#
|
336
336
|
def teardown(status = :passed)
|
337
|
-
@_factory_cache.each do |_, factory|
|
337
|
+
@_factory_cache.each do |(_, browser_name), factory|
|
338
338
|
factory.each do |browser|
|
339
339
|
yield browser if block_given?
|
340
|
-
browser.close unless keep_browser_open?
|
340
|
+
browser.close unless keep_browser_open? && browser_name != :phantomjs
|
341
341
|
end
|
342
342
|
|
343
343
|
factory.teardown(self, status)
|
@@ -354,7 +354,8 @@ module MediawikiSelenium
|
|
354
354
|
if scenario.respond_to? :feature
|
355
355
|
"#{scenario.feature.title}: #{scenario.title}"
|
356
356
|
elsif scenario.respond_to? :scenario_outline
|
357
|
-
|
357
|
+
outline = scenario.scenario_outline
|
358
|
+
"#{outline.feature.title}: #{outline.title}: #{scenario.name}"
|
358
359
|
else
|
359
360
|
scenario.name
|
360
361
|
end
|
@@ -379,7 +380,7 @@ module MediawikiSelenium
|
|
379
380
|
# @return [String]
|
380
381
|
#
|
381
382
|
def user_label(id = nil)
|
382
|
-
user(id).gsub(
|
383
|
+
user(id).gsub('_', ' ')
|
383
384
|
end
|
384
385
|
|
385
386
|
# Navigates the current browser to the given wiki.
|
@@ -414,9 +415,9 @@ module MediawikiSelenium
|
|
414
415
|
# Prefixing relative paths with an explicit "./" guarantees proper
|
415
416
|
# parsing of paths like "Special:Page" that would otherwise be
|
416
417
|
# confused for URI schemes.
|
417
|
-
if path.include?(
|
418
|
+
if path.include?(':')
|
418
419
|
path_uri = URI.parse(path)
|
419
|
-
path = "./#{path}" if path_uri.class == URI::Generic && !path.start_with?(
|
420
|
+
path = "./#{path}" if path_uri.class == URI::Generic && !path.start_with?('/')
|
420
421
|
end
|
421
422
|
|
422
423
|
url = URI.parse(url).merge(path).to_s
|
@@ -463,11 +464,11 @@ module MediawikiSelenium
|
|
463
464
|
private
|
464
465
|
|
465
466
|
def browser_config
|
466
|
-
lookup_all(browser_factory.all_binding_keys, default: nil).reject { |
|
467
|
+
lookup_all(browser_factory.all_binding_keys, default: nil).reject { |_k, v| v.nil? }
|
467
468
|
end
|
468
469
|
|
469
470
|
def password_variable
|
470
|
-
name = lookup(:mediawiki_password_variable, default:
|
471
|
+
name = lookup(:mediawiki_password_variable, default: '')
|
471
472
|
name.empty? ? :mediawiki_password : normalize_key(name)
|
472
473
|
end
|
473
474
|
|
@@ -485,7 +486,7 @@ module MediawikiSelenium
|
|
485
486
|
|
486
487
|
begin
|
487
488
|
@_config = @_config.merge(overrides)
|
488
|
-
yield
|
489
|
+
yield(*overrides.values) if block_given?
|
489
490
|
ensure
|
490
491
|
@_config = original_config
|
491
492
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require 'thor'
|
2
2
|
|
3
3
|
module MediawikiSelenium
|
4
4
|
# Creates the directory structure and configuration for a brand new
|
@@ -8,12 +8,12 @@ module MediawikiSelenium
|
|
8
8
|
include Thor::Actions
|
9
9
|
|
10
10
|
def self.source_root
|
11
|
-
File.expand_path(
|
11
|
+
File.expand_path('../../../templates', __FILE__)
|
12
12
|
end
|
13
13
|
|
14
|
-
desc
|
14
|
+
desc 'install', 'Creates tests/browser directory structure and default configuration'
|
15
15
|
def install
|
16
|
-
directory(
|
16
|
+
directory('tests')
|
17
17
|
end
|
18
18
|
end
|
19
19
|
end
|
@@ -1,5 +1,7 @@
|
|
1
|
-
require
|
2
|
-
|
1
|
+
require 'mediawiki_selenium/support/sauce'
|
2
|
+
|
3
|
+
require 'rest_client'
|
4
|
+
require 'uri'
|
3
5
|
|
4
6
|
module MediawikiSelenium
|
5
7
|
# Constructs remote browser sessions to be run via Sauce Labs. Adds the
|
@@ -12,7 +14,7 @@ module MediawikiSelenium
|
|
12
14
|
#
|
13
15
|
module RemoteBrowserFactory
|
14
16
|
REQUIRED_CONFIG = [:sauce_ondemand_username, :sauce_ondemand_access_key]
|
15
|
-
URL =
|
17
|
+
URL = 'http://ondemand.saucelabs.com/wd/hub'
|
16
18
|
|
17
19
|
class << self
|
18
20
|
def extend_object(factory)
|
@@ -51,13 +53,15 @@ module MediawikiSelenium
|
|
51
53
|
url: "https://saucelabs.com/rest/v1/#{username}/jobs/#{sid}",
|
52
54
|
user: username,
|
53
55
|
password: key,
|
54
|
-
headers: { content_type:
|
56
|
+
headers: { content_type: 'application/json' },
|
55
57
|
payload: {
|
56
58
|
public: true,
|
57
59
|
passed: status == :passed,
|
58
|
-
build: env.lookup(:build_number, default: nil)
|
60
|
+
build: env.lookup(:build_number, default: nil)
|
59
61
|
}.to_json
|
60
62
|
)
|
63
|
+
|
64
|
+
Cucumber::Formatter::Sauce.current_session_id = sid
|
61
65
|
end
|
62
66
|
end
|
63
67
|
|
@@ -68,9 +72,9 @@ module MediawikiSelenium
|
|
68
72
|
when :firefox
|
69
73
|
options[:desired_capabilities][:firefox_profile] = options.delete(:profile)
|
70
74
|
when :chrome
|
71
|
-
options[:desired_capabilities][
|
72
|
-
options[:desired_capabilities][
|
73
|
-
options[:desired_capabilities][
|
75
|
+
options[:desired_capabilities]['chromeOptions'] ||= {}
|
76
|
+
options[:desired_capabilities]['chromeOptions']['prefs'] = options.delete(:prefs)
|
77
|
+
options[:desired_capabilities]['chromeOptions']['args'] = options.delete(:args)
|
74
78
|
end
|
75
79
|
end
|
76
80
|
|
@@ -1,14 +1,3 @@
|
|
1
|
-
=begin
|
2
|
-
This file is subject to the license terms in the LICENSE file found in the
|
3
|
-
mediawiki_selenium top-level directory and at
|
4
|
-
https://git.wikimedia.org/blob/mediawiki%2Fselenium/HEAD/LICENSE. No part of
|
5
|
-
mediawiki_selenium, including this file, may be copied, modified, propagated, or
|
6
|
-
distributed except according to the terms contained in the LICENSE file.
|
7
|
-
Copyright 2013 by the Mediawiki developers. See the CREDITS file in the
|
8
|
-
mediawiki_selenium top-level directory and at
|
9
|
-
https://git.wikimedia.org/blob/mediawiki%2Fselenium/HEAD/CREDITS.
|
10
|
-
=end
|
11
|
-
|
12
1
|
Given(/^I am logged in(?: as (\w+))$/) do |user|
|
13
2
|
as_user(user) do |user, password|
|
14
3
|
visit(LoginPage).login_with(user, password)
|
@@ -1,14 +1,3 @@
|
|
1
|
-
=begin
|
2
|
-
This file is subject to the license terms in the LICENSE file found in the
|
3
|
-
mediawiki_selenium top-level directory and at
|
4
|
-
https://git.wikimedia.org/blob/mediawiki%2Fselenium/HEAD/LICENSE. No part of
|
5
|
-
mediawiki_selenium, including this file, may be copied, modified, propagated, or
|
6
|
-
distributed except according to the terms contained in the LICENSE file.
|
7
|
-
Copyright 2013 by the Mediawiki developers. See the CREDITS file in the
|
8
|
-
mediawiki_selenium top-level directory and at
|
9
|
-
https://git.wikimedia.org/blob/mediawiki%2Fselenium/HEAD/CREDITS.
|
10
|
-
=end
|
11
|
-
|
12
1
|
Given(/^I am at a random page.*$/) do
|
13
2
|
visit RandomPage
|
14
3
|
end
|
@@ -1,14 +1,3 @@
|
|
1
|
-
=begin
|
2
|
-
This file is subject to the license terms in the LICENSE file found in the
|
3
|
-
mediawiki_selenium top-level directory and at
|
4
|
-
https://git.wikimedia.org/blob/mediawiki%2Fselenium/HEAD/LICENSE. No part of
|
5
|
-
mediawiki_selenium, including this file, may be copied, modified, propagated, or
|
6
|
-
distributed except according to the terms contained in the LICENSE file.
|
7
|
-
Copyright 2013 by the Mediawiki developers. See the CREDITS file in the
|
8
|
-
mediawiki_selenium top-level directory and at
|
9
|
-
https://git.wikimedia.org/blob/mediawiki%2Fselenium/HEAD/CREDITS.
|
10
|
-
=end
|
11
|
-
|
12
1
|
Given(/^I have reset my preferences$/) do
|
13
2
|
visit(ResetPreferencesPage).submit_element.click
|
14
3
|
end
|
@@ -1,14 +1,3 @@
|
|
1
|
-
=begin
|
2
|
-
This file is subject to the license terms in the LICENSE file found in the
|
3
|
-
mediawiki_selenium top-level directory and at
|
4
|
-
https://git.wikimedia.org/blob/mediawiki%2Fselenium/HEAD/LICENSE. No part of
|
5
|
-
mediawiki_selenium, including this file, may be copied, modified, propagated, or
|
6
|
-
distributed except according to the terms contained in the LICENSE file.
|
7
|
-
Copyright 2013 by the Mediawiki developers. See the CREDITS file in the
|
8
|
-
mediawiki_selenium top-level directory and at
|
9
|
-
https://git.wikimedia.org/blob/mediawiki%2Fselenium/HEAD/CREDITS.
|
10
|
-
=end
|
11
|
-
|
12
1
|
Then(/^page has no ResourceLoader errors$/) do
|
13
2
|
result = browser.execute_script(<<-end)
|
14
3
|
return (function() {
|
@@ -1,6 +1,6 @@
|
|
1
1
|
|
2
2
|
When(/^upload bogus file (.+)$/) do |file_name|
|
3
|
-
require
|
3
|
+
require 'tempfile'
|
4
4
|
path = "#{Dir.tmpdir}/#{file_name}"
|
5
5
|
|
6
6
|
system("touch #{path}")
|
@@ -14,10 +14,10 @@ end
|
|
14
14
|
|
15
15
|
|
16
16
|
When(/^upload file (.+)$/) do |file_name|
|
17
|
-
require
|
17
|
+
require 'tempfile'
|
18
18
|
path = "#{Dir.tmpdir}/#{file_name}"
|
19
19
|
|
20
|
-
require
|
20
|
+
require 'chunky_png'
|
21
21
|
ChunkyPNG::Image.new(Random.new.rand(255), Random.new.rand(255), Random.new.rand(255)).save path
|
22
22
|
|
23
23
|
if browser.driver.browser == :chrome
|
@@ -1,5 +1,5 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
1
|
+
require 'mediawiki_selenium/step_definitions/login_steps'
|
2
|
+
require 'mediawiki_selenium/step_definitions/navigation_steps'
|
3
|
+
require 'mediawiki_selenium/step_definitions/preferences_steps'
|
4
|
+
require 'mediawiki_selenium/step_definitions/resource_loader_steps'
|
5
|
+
require 'mediawiki_selenium/step_definitions/upload_file_steps'
|
@@ -1,21 +1,10 @@
|
|
1
|
-
=begin
|
2
|
-
This file is subject to the license terms in the LICENSE file found in the
|
3
|
-
mediawiki_selenium top-level directory and at
|
4
|
-
https://git.wikimedia.org/blob/mediawiki%2Fselenium/HEAD/LICENSE. No part of
|
5
|
-
mediawiki_selenium, including this file, may be copied, modified, propagated, or
|
6
|
-
distributed except according to the terms contained in the LICENSE file.
|
7
|
-
Copyright 2013 by the Mediawiki developers. See the CREDITS file in the
|
8
|
-
mediawiki_selenium top-level directory and at
|
9
|
-
https://git.wikimedia.org/blob/mediawiki%2Fselenium/HEAD/CREDITS.
|
10
|
-
=end
|
11
|
-
|
12
1
|
# before all
|
13
|
-
require
|
14
|
-
require
|
15
|
-
require
|
2
|
+
require 'bundler/setup'
|
3
|
+
require 'page-object/page_factory'
|
4
|
+
require 'watir-webdriver'
|
16
5
|
|
17
|
-
require
|
18
|
-
require
|
6
|
+
require 'mediawiki_selenium/support/modules/api_helper'
|
7
|
+
require 'mediawiki_selenium/support/modules/strict_pending'
|
19
8
|
|
20
9
|
World { MediawikiSelenium::Environment.load_default }
|
21
10
|
|
@@ -1,31 +1,20 @@
|
|
1
|
-
|
2
|
-
This file is subject to the license terms in the LICENSE file found in the
|
3
|
-
mediawiki_selenium top-level directory and at
|
4
|
-
https://git.wikimedia.org/blob/mediawiki%2Fselenium/HEAD/LICENSE. No part of
|
5
|
-
mediawiki_selenium, including this file, may be copied, modified, propagated, or
|
6
|
-
distributed except according to the terms contained in the LICENSE file.
|
7
|
-
Copyright 2013 by the Mediawiki developers. See the CREDITS file in the
|
8
|
-
mediawiki_selenium top-level directory and at
|
9
|
-
https://git.wikimedia.org/blob/mediawiki%2Fselenium/HEAD/CREDITS.
|
10
|
-
=end
|
11
|
-
|
12
|
-
Before("@custom-browser") do |scenario|
|
1
|
+
Before('@custom-browser') do |scenario|
|
13
2
|
@scenario = scenario
|
14
3
|
end
|
15
4
|
|
16
5
|
AfterConfiguration do |config|
|
17
6
|
# Install a formatter that can be used to show feature-related warnings
|
18
|
-
pretty_format, io = config.formats.find { |(format,
|
19
|
-
config.formats << [
|
7
|
+
pretty_format, io = config.formats.find { |(format, _io)| format == 'pretty' }
|
8
|
+
config.formats << ['MediawikiSelenium::WarningsFormatter', io] if pretty_format
|
20
9
|
|
21
10
|
# Initiate headless mode
|
22
|
-
if ENV[
|
23
|
-
require
|
11
|
+
if ENV['HEADLESS'] == 'true' && ENV['BROWSER'] != 'phantomjs'
|
12
|
+
require 'headless'
|
24
13
|
|
25
14
|
headless_options = {}.tap do |options|
|
26
|
-
options[:display] = ENV[
|
27
|
-
options[:reuse] = false if ENV[
|
28
|
-
options[:destroy_at_exit] = false if ENV[
|
15
|
+
options[:display] = ENV['HEADLESS_DISPLAY'] if ENV.include?('HEADLESS_DISPLAY')
|
16
|
+
options[:reuse] = false if ENV['HEADLESS_REUSE'] == 'false'
|
17
|
+
options[:destroy_at_exit] = false if ENV['HEADLESS_DESTROY_AT_EXIT'] == 'false'
|
29
18
|
end
|
30
19
|
|
31
20
|
headless = Headless.new(headless_options)
|
@@ -46,8 +35,8 @@ Before do |scenario|
|
|
46
35
|
dependencies = tags.map { |tag| tag.match(/^@extension-(.+)$/) { |m| m[1].downcase } }.compact
|
47
36
|
|
48
37
|
unless dependencies.empty?
|
49
|
-
extensions = api.meta(:siteinfo, siprop:
|
50
|
-
extensions = extensions.map { |ext| ext[
|
38
|
+
extensions = api.meta(:siteinfo, siprop: 'extensions').data['extensions']
|
39
|
+
extensions = extensions.map { |ext| ext['name'] }.compact.map(&:downcase)
|
51
40
|
missing = dependencies - extensions
|
52
41
|
|
53
42
|
if missing.any?
|
@@ -55,7 +44,7 @@ Before do |scenario|
|
|
55
44
|
|
56
45
|
if scenario.feature.respond_to?(:mw_warn)
|
57
46
|
warning = "Skipped feature due to missing wiki extensions: #{missing.join(", ")}"
|
58
|
-
scenario.feature.mw_warn(warning,
|
47
|
+
scenario.feature.mw_warn(warning, 'missing wiki extensions')
|
59
48
|
end
|
60
49
|
end
|
61
50
|
end
|
@@ -81,16 +70,16 @@ end
|
|
81
70
|
|
82
71
|
After do |scenario|
|
83
72
|
if scenario.respond_to?(:status)
|
84
|
-
require
|
73
|
+
require 'fileutils'
|
85
74
|
|
86
75
|
teardown(scenario.status) do |browser|
|
87
|
-
if scenario.failed? && lookup(:screenshot_failures, default: false) ==
|
88
|
-
screen_dir = lookup(:screenshot_failures_path, default:
|
76
|
+
if scenario.failed? && lookup(:screenshot_failures, default: false) == 'true'
|
77
|
+
screen_dir = lookup(:screenshot_failures_path, default: 'screenshots')
|
89
78
|
FileUtils.mkdir_p screen_dir
|
90
79
|
name = test_name(scenario).gsub(/ /, '_')
|
91
80
|
path = "#{screen_dir}/#{name}.png"
|
92
81
|
browser.screenshot.save path
|
93
|
-
embed path,
|
82
|
+
embed path, 'image/png'
|
94
83
|
end
|
95
84
|
|
96
85
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require 'mediawiki_api'
|
2
2
|
|
3
3
|
module MediawikiSelenium
|
4
4
|
# Provides more direct access to the API client from hooks and step
|
@@ -26,11 +26,9 @@ module MediawikiSelenium
|
|
26
26
|
# @param id [Symbol] ID of alternative user.
|
27
27
|
#
|
28
28
|
def ensure_account(id)
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
raise e unless e.code == "userexists"
|
33
|
-
end
|
29
|
+
api.create_account(user(id), password(id))
|
30
|
+
rescue MediawikiApi::ApiError => e
|
31
|
+
raise e unless e.code == 'userexists'
|
34
32
|
end
|
35
33
|
|
36
34
|
# Extends parent implementation to also override the API URL. If no API
|
@@ -53,7 +51,7 @@ module MediawikiSelenium
|
|
53
51
|
private
|
54
52
|
|
55
53
|
def api_url_from(wiki_url)
|
56
|
-
URI.parse(wiki_url).merge(
|
54
|
+
URI.parse(wiki_url).merge('/w/api.php').to_s
|
57
55
|
end
|
58
56
|
end
|
59
57
|
end
|
@@ -1,5 +1,5 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require 'page-object'
|
2
|
+
require 'mediawiki_api'
|
3
3
|
|
4
4
|
class APIPage
|
5
5
|
include PageObject
|
@@ -7,12 +7,12 @@ class APIPage
|
|
7
7
|
def client
|
8
8
|
return @client if defined?(@client)
|
9
9
|
|
10
|
-
unless ENV[
|
11
|
-
raise
|
10
|
+
unless ENV['MEDIAWIKI_API_URL']
|
11
|
+
raise 'Environment variable MEDIAWIKI_API_URL must be set in order to use the API'
|
12
12
|
end
|
13
13
|
|
14
|
-
@client = MediawikiApi::Client.new(ENV[
|
15
|
-
@client.log_in ENV[
|
14
|
+
@client = MediawikiApi::Client.new(ENV['MEDIAWIKI_API_URL'])
|
15
|
+
@client.log_in ENV['MEDIAWIKI_USER'], ENV['MEDIAWIKI_PASSWORD']
|
16
16
|
|
17
17
|
@client
|
18
18
|
end
|