capybara-playwright-driver 0.4.0 → 0.5.1
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/README.md +6 -5
- data/capybara-playwright.gemspec +1 -0
- data/lib/capybara/playwright/browser.rb +18 -3
- data/lib/capybara/playwright/driver.rb +9 -1
- data/lib/capybara/playwright/driver_extension.rb +35 -0
- data/lib/capybara/playwright/version.rb +1 -1
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 65aa84fdb6c7d3f3fd725b263e265f45d8561ed1d3c76c838fe7aabc9fdd86b2
|
4
|
+
data.tar.gz: a3215d7afedcc54c1054726905c37c4406bd5f68b774c43ce0b525056fab26b5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cc48335bbc9baa44eaede35ba9c7d3bd71cd66f9de1b15e099ece3e8615084db6bad2e15ac699c26a4679eecf573ce063944e135a77a652d566bb0cdbf153692
|
7
|
+
data.tar.gz: a9e1365afcda4442f7262023c6983bfb269921cb1b25bac52d42b971797f7913a97ca638c5c1109db53f7bf6eda229b2dbf08b3273de6ad94026b1775b4054a2
|
data/README.md
CHANGED
@@ -26,17 +26,18 @@ Capybara.save_path = 'tmp/capybara'
|
|
26
26
|
# run
|
27
27
|
Capybara.app_host = 'https://github.com'
|
28
28
|
visit '/'
|
29
|
-
|
29
|
+
first('div.search-input-container').click
|
30
|
+
fill_in('query-builder-test', with: 'Capybara')
|
30
31
|
|
31
32
|
## [REMARK] We can use Playwright-native selector and action, instead of Capybara DSL.
|
32
|
-
#
|
33
|
+
# first('[aria-label="Capybara, Search all of GitHub"]').click
|
33
34
|
page.driver.with_playwright_page do |page|
|
34
|
-
page.
|
35
|
+
page.get_by_label('Capybara, Search all of GitHub').click
|
35
36
|
end
|
36
37
|
|
37
|
-
all('
|
38
|
+
all('[data-testid="results-list"] h3').each do |li|
|
38
39
|
#puts "#{li.all('a').first.text} by Capybara"
|
39
|
-
puts "#{li.with_playwright_element_handle { |handle| handle.
|
40
|
+
puts "#{li.with_playwright_element_handle { |handle| handle.text_content }} by Playwright"
|
40
41
|
end
|
41
42
|
```
|
42
43
|
|
data/capybara-playwright.gemspec
CHANGED
@@ -25,6 +25,7 @@ Gem::Specification.new do |spec|
|
|
25
25
|
spec.require_paths = ['lib']
|
26
26
|
|
27
27
|
spec.required_ruby_version = '>= 2.4'
|
28
|
+
spec.add_dependency 'addressable'
|
28
29
|
spec.add_dependency 'capybara'
|
29
30
|
spec.add_dependency 'playwright-ruby-client', '>= 1.16.0'
|
30
31
|
spec.add_development_dependency 'allure-rspec'
|
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'addressable/uri'
|
1
2
|
require_relative './tmpdir_owner'
|
2
3
|
|
3
4
|
module Capybara
|
@@ -14,25 +15,31 @@ module Capybara
|
|
14
15
|
|
15
16
|
class NoSuchWindowError < StandardError ; end
|
16
17
|
|
17
|
-
def initialize(driver:, playwright_browser:, page_options:, record_video: false, default_navigation_timeout: nil)
|
18
|
+
def initialize(driver:, playwright_browser:, page_options:, record_video: false, callback_on_save_trace: nil, default_timeout: nil, default_navigation_timeout: nil)
|
18
19
|
@driver = driver
|
19
20
|
@playwright_browser = playwright_browser
|
20
21
|
@page_options = page_options
|
21
22
|
if record_video
|
22
23
|
@page_options[:record_video_dir] ||= tmpdir
|
23
24
|
end
|
25
|
+
@callback_on_save_trace = callback_on_save_trace
|
26
|
+
@default_timeout = default_timeout
|
24
27
|
@default_navigation_timeout = default_navigation_timeout
|
25
28
|
@playwright_page = create_page(create_browser_context)
|
26
29
|
end
|
27
30
|
|
28
31
|
private def create_browser_context
|
29
32
|
@playwright_browser.new_context(**@page_options).tap do |browser_context|
|
33
|
+
browser_context.default_timeout = @default_timeout if @default_timeout
|
30
34
|
browser_context.default_navigation_timeout = @default_navigation_timeout if @default_navigation_timeout
|
31
35
|
browser_context.on('page', ->(page) {
|
32
36
|
unless @playwright_page
|
33
37
|
@playwright_page = page
|
34
38
|
end
|
35
39
|
})
|
40
|
+
if @callback_on_save_trace
|
41
|
+
browser_context.tracing.start(screenshots: true, snapshots: true)
|
42
|
+
end
|
36
43
|
end
|
37
44
|
end
|
38
45
|
|
@@ -47,6 +54,14 @@ module Capybara
|
|
47
54
|
end
|
48
55
|
|
49
56
|
def clear_browser_contexts
|
57
|
+
if @callback_on_save_trace
|
58
|
+
@playwright_browser.contexts.each do |browser_context|
|
59
|
+
filename = SecureRandom.hex(8)
|
60
|
+
zip_path = File.join(tmpdir, "#{filename}.zip")
|
61
|
+
browser_context.tracing.stop(path: zip_path)
|
62
|
+
@callback_on_save_trace.call(zip_path)
|
63
|
+
end
|
64
|
+
end
|
50
65
|
@playwright_browser.contexts.each(&:close)
|
51
66
|
end
|
52
67
|
|
@@ -60,9 +75,9 @@ module Capybara
|
|
60
75
|
assert_page_alive {
|
61
76
|
url =
|
62
77
|
if Capybara.app_host
|
63
|
-
URI(Capybara.app_host)
|
78
|
+
Addressable::URI.parse(Capybara.app_host) + path
|
64
79
|
elsif Capybara.default_host
|
65
|
-
URI(Capybara.default_host)
|
80
|
+
Addressable::URI.parse(Capybara.default_host) + path
|
66
81
|
else
|
67
82
|
path
|
68
83
|
end
|
@@ -9,9 +9,15 @@ module Capybara
|
|
9
9
|
def initialize(app, **options)
|
10
10
|
@browser_runner = BrowserRunner.new(options)
|
11
11
|
@page_options = PageOptions.new(options)
|
12
|
-
if options[:timeout].is_a?(Numeric)
|
12
|
+
if options[:timeout].is_a?(Numeric) # just for compatibility with capybara-selenium-driver
|
13
13
|
@default_navigation_timeout = options[:timeout] * 1000
|
14
14
|
end
|
15
|
+
if options[:default_timeout].is_a?(Numeric)
|
16
|
+
@default_timeout = options[:default_timeout] * 1000
|
17
|
+
end
|
18
|
+
if options[:default_navigation_timeout].is_a?(Numeric)
|
19
|
+
@default_navigation_timeout = options[:default_navigation_timeout] * 1000
|
20
|
+
end
|
15
21
|
end
|
16
22
|
|
17
23
|
def wait?; true; end
|
@@ -23,6 +29,8 @@ module Capybara
|
|
23
29
|
playwright_browser: playwright_browser,
|
24
30
|
page_options: @page_options.value,
|
25
31
|
record_video: callback_on_save_screenrecord?,
|
32
|
+
callback_on_save_trace: @callback_on_save_trace,
|
33
|
+
default_timeout: @default_timeout,
|
26
34
|
default_navigation_timeout: @default_navigation_timeout,
|
27
35
|
)
|
28
36
|
end
|
@@ -35,11 +35,46 @@ module Capybara
|
|
35
35
|
@callback_on_save_screenrecord&.call(video_path)
|
36
36
|
end
|
37
37
|
|
38
|
+
# Register trace save process.
|
39
|
+
# The callback is called just after trace is saved.
|
40
|
+
#
|
41
|
+
# The trace.zip path (String) is called back into the given block
|
42
|
+
def on_save_trace(&block)
|
43
|
+
@callback_on_save_trace = block
|
44
|
+
end
|
45
|
+
|
38
46
|
def with_playwright_page(&block)
|
39
47
|
raise ArgumentError.new('block must be given') unless block
|
40
48
|
|
41
49
|
@browser&.with_playwright_page(&block)
|
42
50
|
end
|
51
|
+
|
52
|
+
# Start Playwright tracing (doc: https://playwright.dev/docs/api/class-tracing#tracing-start)
|
53
|
+
def start_tracing(name: nil, screenshots: false, snapshots: false, sources: false, title: nil)
|
54
|
+
# Ensure playwright page is initialized.
|
55
|
+
browser
|
56
|
+
|
57
|
+
with_playwright_page do |playwright_page|
|
58
|
+
playwright_page.context.tracing.start(name: name, screenshots: screenshots, snapshots: snapshots, sources: sources, title: title)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
# Stop Playwright tracing (doc: https://playwright.dev/docs/api/class-tracing#tracing-stop)
|
63
|
+
def stop_tracing(path: nil)
|
64
|
+
with_playwright_page do |playwright_page|
|
65
|
+
playwright_page.context.tracing.stop(path: path)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
# Trace execution of the given block. The tracing is automatically stopped when the block is finished.
|
70
|
+
def trace(name: nil, screenshots: false, snapshots: false, sources: false, title: nil, path: nil, &block)
|
71
|
+
raise ArgumentError.new('block must be given') unless block
|
72
|
+
|
73
|
+
start_tracing(name: name, screenshots: screenshots, snapshots: snapshots, sources: sources, title: title)
|
74
|
+
block.call
|
75
|
+
ensure
|
76
|
+
stop_tracing(path: path)
|
77
|
+
end
|
43
78
|
end
|
44
79
|
end
|
45
80
|
end
|
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: capybara-playwright-driver
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- YusukeIwaki
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-02-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: addressable
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: capybara
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|