mediawiki_selenium 1.0.0.pre.2 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|