capybara-puppeteer-driver 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3c963d7aef431f126d37c528a69f7778c4f0bdf94e8ee4e221c37925a5eb1406
|
4
|
+
data.tar.gz: 248c36c1347e9449ef667f1b04380f9b6ecad3a2dbeb712b88eebda917ecbfb0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bc64fe2cc0bc49b3cf5440983a1041a9a324e8aa047f7566fca1159280ccea3b9e0c0e44fb6d4c17e467d7e5aa1e37c793c81916074c3dbbc03fdd7e7743b78f
|
7
|
+
data.tar.gz: 135be36c6b2b66b9bbc4b2c74ec05b4435082837345b06d4031982fc0057ab594023b967dd9da064da0e48e9b2876376cf5f2009134d878e8cf6f790d66627d6
|
data/.github/workflows/rspec.yml
CHANGED
@@ -6,13 +6,12 @@ jobs:
|
|
6
6
|
check:
|
7
7
|
name: RSpec
|
8
8
|
runs-on: ubuntu-latest
|
9
|
-
container: circleci/ruby:2.7.3-buster-node-browsers
|
10
9
|
steps:
|
11
|
-
# @see https://docs.github.com/actions/reference/virtual-environments-for-github-hosted-runners#docker-container-filesystem
|
12
|
-
- name: Setup file system permissions
|
13
|
-
run: sudo chmod -R 777 $GITHUB_WORKSPACE /github /__w/_temp
|
14
10
|
- uses: actions/checkout@v2
|
15
|
-
-
|
16
|
-
|
17
|
-
|
11
|
+
- uses: ruby/setup-ruby@v1
|
12
|
+
with:
|
13
|
+
ruby-version: 3.0.2
|
14
|
+
bundler-cache: true
|
15
|
+
- uses: browser-actions/setup-chrome@latest
|
16
|
+
- run: CHROME_EXECUTABLE_PATH=$(which chrome) bundle exec rspec --format documentation
|
18
17
|
timeout-minutes: 45
|
@@ -24,7 +24,7 @@ Gem::Specification.new do |spec|
|
|
24
24
|
spec.require_paths = ['lib']
|
25
25
|
|
26
26
|
spec.add_dependency 'capybara'
|
27
|
-
spec.add_dependency 'puppeteer-ruby', '>= 0.
|
27
|
+
spec.add_dependency 'puppeteer-ruby', '>= 0.36.0'
|
28
28
|
spec.add_development_dependency 'bundler', '~> 2.2.3'
|
29
29
|
spec.add_development_dependency 'launchy', '>= 2.0.4'
|
30
30
|
spec.add_development_dependency 'pry-byebug'
|
@@ -138,6 +138,17 @@ module Capybara
|
|
138
138
|
end
|
139
139
|
::Puppeteer::ElementHandle.prepend(ElementHandlePatch)
|
140
140
|
|
141
|
+
module MousePatch
|
142
|
+
def capybara_async_wait_for_drag_intercepted(&block)
|
143
|
+
Concurrent::Promises.resolvable_future.tap do |f|
|
144
|
+
@client.once('Input.dragIntercepted') do |event|
|
145
|
+
f.fulfill(event['data'])
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
150
|
+
::Puppeteer::Mouse.prepend(MousePatch)
|
151
|
+
|
141
152
|
# ref:
|
142
153
|
# selenium: https://github.com/teamcapybara/capybara/blob/master/lib/capybara/selenium/node.rb
|
143
154
|
# apparition: https://github.com/twalpole/apparition/blob/master/lib/capybara/apparition/node.rb
|
@@ -758,29 +769,33 @@ module Capybara
|
|
758
769
|
@source.scroll_into_view_if_needed
|
759
770
|
|
760
771
|
# down
|
761
|
-
position_from =
|
762
|
-
@page.mouse.
|
772
|
+
position_from = @source.clickable_point
|
773
|
+
drag_intercepted_promise = @page.mouse.capybara_async_wait_for_drag_intercepted
|
774
|
+
@page.mouse.move(position_from.x, position_from.y)
|
763
775
|
@page.mouse.down
|
764
776
|
|
765
777
|
@target.scroll_into_view_if_needed
|
766
778
|
|
767
779
|
# move and up
|
768
780
|
sleep_delay
|
769
|
-
position_to =
|
781
|
+
position_to = @target.clickable_point
|
770
782
|
with_key_pressing(drop_modifiers) do
|
771
|
-
@page.mouse.move(
|
772
|
-
|
783
|
+
@page.mouse.move(position_to.x, position_to.y, steps: 6)
|
784
|
+
if drag_intercepted_promise.fulfilled?
|
785
|
+
# dispatch HTML5 drag events
|
786
|
+
data = drag_intercepted_promise.value!
|
787
|
+
@page.mouse.drag_enter(position_to, data)
|
788
|
+
@page.mouse.drag_over(position_to, data)
|
789
|
+
sleep_delay
|
790
|
+
@page.mouse.drop(position_to, data)
|
791
|
+
else
|
792
|
+
sleep_delay
|
793
|
+
end
|
773
794
|
@page.mouse.up
|
774
795
|
end
|
775
796
|
sleep_delay
|
776
797
|
end
|
777
798
|
|
778
|
-
# @param element [Puppeteer::ElementHandle]
|
779
|
-
private def center_of(element)
|
780
|
-
box = element.bounding_box
|
781
|
-
[box.x + box.width / 2, box.y + box.height / 2]
|
782
|
-
end
|
783
|
-
|
784
799
|
private def with_key_pressing(keys, &block)
|
785
800
|
keys.each { |key| @page.keyboard.down(key) }
|
786
801
|
block.call
|
@@ -801,6 +816,16 @@ module Capybara
|
|
801
816
|
|
802
817
|
sleep @options[:delay]
|
803
818
|
end
|
819
|
+
|
820
|
+
private def inject_drag_drop_event_with(drag_intercepted_promise, position_to)
|
821
|
+
unless drag_intercepted_promise.fulfilled?
|
822
|
+
return
|
823
|
+
end
|
824
|
+
|
825
|
+
data = drag_intercepted_promise.value!
|
826
|
+
@page.mouse.drag_enter(position_to, data)
|
827
|
+
@page.mouse.drag_over(position_to, data)
|
828
|
+
end
|
804
829
|
end
|
805
830
|
|
806
831
|
def drop(*args)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: capybara-puppeteer-driver
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- YusukeIwaki
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-08-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: capybara
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0.
|
33
|
+
version: 0.36.0
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 0.
|
40
|
+
version: 0.36.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: bundler
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|