qat-web 9.0.3 → 9.0.5

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c1921f3bf5bc99c7d84694f23696f937de1862ed88ffe8dd780467efcfd2d4c1
4
- data.tar.gz: 8574255c94d0c08c16b070b5c0dbb7659f56d7b3920dea9db474986e7f820622
3
+ metadata.gz: 412d81a87b69a5b071fe5dfaaa6bd84ae5145b57d9facfb0fae188c3812c593b
4
+ data.tar.gz: 43bd63e54c6e580a01bb53d34859547f167f0234e7004e93ad61313cb39878d2
5
5
  SHA512:
6
- metadata.gz: 271d878b603bc0cffd4dc6cba88b5e8c99dd710dd93b234d447cf7043e6adab8ef6467a90119c428833473f9632d2ef7c9b887dfb853b1e12936f8e821de4b26
7
- data.tar.gz: bc8b32b17a4b95e76520e095bb1e4ef03202514b2fa0573a19af2928a9b33e68b79bf18161163747fefd7423fbe210aeb087cb127faf3a403e2f636358f94532
6
+ metadata.gz: 356102e84dc534b82ceea1ac3c935ece7f020ae0f8866f61a8b9b4d611183a2dfac4caaf52ae454bd7c00188fde5f9fc28acee0b745f82735104c8aa6e1cf62a
7
+ data.tar.gz: 5f5c6d819b70366bfe2a4cf104256463047c6a2ac725b6af1616ed838845e3ae5b19d68944b28aaca6a3d28fa88cd81d71fc95bba0fc267ed25abdd1ed1a3009
@@ -13,7 +13,7 @@ module QAT::Web
13
13
  # @param addons [String] Expected driver/browser addons
14
14
  # @param hooks [String] Cucumber hooks to use
15
15
  # @return [Capybara::RackTest::Driver||Capybara::Selenium::Driver]
16
- def load_generic_driver(browser, controller, screen, driver, properties, addons, hooks)
16
+ def load_generic_driver(browser, controller, screen, driver, properties, browser_options, addons, hooks)
17
17
  Capybara.register_driver controller do |app|
18
18
  loaded_screen = QAT::Web::Screen::Factory.for screen
19
19
  loaded_driver = nil
@@ -28,6 +28,10 @@ module QAT::Web
28
28
  customized_profile = create_profile(driver, browser, properties, addons)
29
29
  options.merge!(customized_profile) if customized_profile
30
30
  end
31
+ if browser_options
32
+ customized_options = create_options(driver, browser, browser_options)
33
+ options.merge!(customized_options) if customized_options
34
+ end
31
35
  loaded_driver = Capybara.const_get(driver.capitalize)::Driver.new(app, **options)
32
36
  loaded_driver.browser
33
37
  end
@@ -44,13 +44,14 @@ module QAT::Web
44
44
  driver = options['driver'] || mapping[browser]
45
45
  screen = options['screen']
46
46
  properties = options['properties']
47
+ options = options['options']
47
48
  addons = options['addons']
48
49
  hooks = options['hooks']
49
50
 
50
51
  if driver.to_sym == :poltergeist
51
52
  load_poltergeist_driver(browser, controller, screen)
52
53
  else
53
- load_generic_driver(browser, controller, screen, driver, properties, addons, hooks)
54
+ load_generic_driver(browser, controller, screen, driver, properties, options, addons, hooks)
54
55
  end
55
56
  end
56
57
 
@@ -26,9 +26,23 @@ module QAT::Web
26
26
  end
27
27
  end
28
28
 
29
+ #@since 9.0.5
30
+ def create_options (driver, browser, options)
31
+ return nil unless options && options.any?
32
+ begin
33
+ method("#{driver}_#{browser}_options".to_sym).call(options)
34
+ rescue NoMethodError => exception
35
+ if exception.message.match(/.*_.*_options/)
36
+ raise(HandlerNotImplemented, "An options handler for driver '#{driver.capitalize}' and/or '#{browser.capitalize}' does not exist at this moment!")
37
+ else
38
+ raise
39
+ end
40
+ end
41
+ end
42
+
29
43
  private
30
44
  def selenium_firefox_profile(properties, addons)
31
- profile = selenium_profile(:firefox, properties)
45
+ profile = selenium_profile(:firefox)
32
46
 
33
47
  profile = load_firefox_addons(profile, addons)
34
48
 
@@ -38,14 +52,14 @@ module QAT::Web
38
52
  end
39
53
 
40
54
  def selenium_chrome_profile (properties, addons)
41
- profile = selenium_profile(:chrome, properties)
55
+ profile = selenium_profile(:chrome)
42
56
 
43
57
  profile = set_profile(profile, properties)
44
58
 
45
59
  { prefs: profile.send(:prefs) }
46
60
  end
47
61
 
48
- def selenium_profile(browser, properties)
62
+ def selenium_profile(browser)
49
63
  begin
50
64
  require 'selenium-webdriver'
51
65
  rescue LoadError => e
@@ -83,6 +97,37 @@ module QAT::Web
83
97
  profile
84
98
  end
85
99
 
100
+ def selenium_firefox_options(browser_options)
101
+ options = selenium_options(:firefox)
102
+ options = set_options(options, browser_options)
103
+ { options: options }
104
+ end
105
+
106
+ def selenium_chrome_options(browser_options)
107
+ options = selenium_options(:chrome)
108
+ options = set_options(options, browser_options)
109
+ { options: options }
110
+ end
111
+
112
+ def selenium_options(browser)
113
+ begin
114
+ require 'selenium-webdriver'
115
+ rescue LoadError => e
116
+ if e.message =~ /selenium-webdriver/
117
+ raise LoadError, "QAT-Web is unable to load `selenium-webdriver`, please install the gem and add `gem 'selenium-webdriver'` to your Gemfile if you are using bundler."
118
+ else
119
+ raise e
120
+ end
121
+ end
122
+ Selenium::WebDriver.const_get(browser.capitalize)::Options.new
123
+ end
124
+
125
+ def set_options(options, browser_options)
126
+ browser_options['args'].each { |arg| options.add_argument(arg) }
127
+ browser_options['preferences'].each { |name, value| options.add_preference(name, value) }
128
+ options
129
+ end
130
+
86
131
  class HandlerNotImplemented < StandardError
87
132
  end
88
133
  class InvalidAddonError < StandardError
@@ -8,7 +8,14 @@ module QAT
8
8
  # Returns the collection finder block
9
9
  # @return [Proc]
10
10
  def finder
11
- proc { all(*@selector) }
11
+ selector = @selector
12
+ proc do
13
+ if selector.last.is_a?(Hash)
14
+ all(*selector[0..1], **selector.last)
15
+ else
16
+ all(*selector)
17
+ end
18
+ end
12
19
  end
13
20
  end
14
21
  end
@@ -8,7 +8,14 @@ module QAT
8
8
  # Returns the element finder block
9
9
  # @return [Proc]
10
10
  def finder
11
- proc { find(*@selector) }
11
+ selector = @selector
12
+ proc do
13
+ if selector.last.is_a?(Hash)
14
+ find(*selector[0..1], **selector.last)
15
+ else
16
+ find(*selector)
17
+ end
18
+ end
12
19
  end
13
20
  end
14
21
  end
@@ -46,7 +46,7 @@ module QAT
46
46
  # @param timeout [Integer] maximum time to wait
47
47
  def wait_until_present(selector, timeout)
48
48
  type, value, options = build_selector(selector, { visible: false, wait: timeout })
49
- has_selector?(type, value, options)
49
+ has_selector?(type, value, **options)
50
50
  end
51
51
 
52
52
  # Waits a maximum timeout time until an element is visible on page
@@ -54,7 +54,7 @@ module QAT
54
54
  # @param timeout [Integer] maximum time to wait
55
55
  def wait_until_visible(selector, timeout)
56
56
  type, value, options = build_selector(selector, { visible: true, wait: timeout })
57
- has_selector?(type, value, options)
57
+ has_selector?(type, value, **options)
58
58
  end
59
59
 
60
60
  # Waits a maximum timeout time until an element is no longer present on page
@@ -62,7 +62,7 @@ module QAT
62
62
  # @param timeout [Integer] maximum time to wait
63
63
  def wait_until_not_present(selector, timeout)
64
64
  type, value, options = build_selector(selector, { wait: timeout })
65
- has_no_selector?(type, value, options)
65
+ has_no_selector?(type, value, **options)
66
66
  end
67
67
 
68
68
  # Waits a maximum timeout time until an element is no longer visible on page
@@ -70,7 +70,7 @@ module QAT
70
70
  # @param timeout [Integer] maximum time to wait
71
71
  def wait_until_not_visible(selector, timeout)
72
72
  type, value, options = build_selector(selector, { visible: false, wait: timeout })
73
- has_no_selector?(type, value, options)
73
+ has_no_selector?(type, value, **options)
74
74
  end
75
75
 
76
76
  # Generic wait method
@@ -4,6 +4,6 @@ module QAT
4
4
  #@since 1.0.0
5
5
  module Web
6
6
  # Represents QAT-Web's version
7
- VERSION = '9.0.3'
7
+ VERSION = '9.0.5'
8
8
  end
9
9
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: qat-web
3
3
  version: !ruby/object:Gem::Version
4
- version: 9.0.3
4
+ version: 9.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - QAT
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-09-27 00:00:00.000000000 Z
11
+ date: 2025-03-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: qat-cucumber
@@ -283,7 +283,7 @@ licenses:
283
283
  - GPL-3.0
284
284
  metadata:
285
285
  source_code_uri: https://github.com/Ritain-io/qat-web
286
- post_install_message:
286
+ post_install_message:
287
287
  rdoc_options: []
288
288
  require_paths:
289
289
  - lib
@@ -298,8 +298,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
298
298
  - !ruby/object:Gem::Version
299
299
  version: '0'
300
300
  requirements: []
301
- rubygems_version: 3.3.26
302
- signing_key:
301
+ rubygems_version: 3.4.19
302
+ signing_key:
303
303
  specification_version: 4
304
304
  summary: QAT-Web is a browser controller for Web testing
305
305
  test_files: []