kirchhoff 0.0.2 → 0.0.3
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 +13 -7
- data/lib/kirchhoff.rb +43 -37
- data/lib/kirchhoff/common_interface.rb +18 -18
- data/lib/kirchhoff/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 987620edb1eac2879b10b1663a04a89d3cc8ea0d
|
4
|
+
data.tar.gz: 2621540bb8c27ce300067dafc6f30c168b771dc7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f720d18bad08fc12a77718ca2e6fbd1b3366b2e3d972403cae465d421f7226c4ce473a32cd0a40c9a3c003fc1d2d0e31deb07d57cd21655e96634a8dde47c9c6
|
7
|
+
data.tar.gz: a550ee96668b781d7dd9cae0e608009ba337bbb02b97bdeabade7efe192d8eeda6f11162d175c0bd0e92d6bc1ab3e561d34fb0f5162369cb55112fde4647d83e
|
data/README.md
CHANGED
@@ -8,11 +8,11 @@ Smart selenium base web driver written in Ruby.
|
|
8
8
|
|
9
9
|
1. Install gem as you like.
|
10
10
|
|
11
|
-
|
11
|
+
$ gem install kirchhoff
|
12
12
|
|
13
13
|
2. Install chromedriver. (Below is the MacOS example.)
|
14
14
|
|
15
|
-
|
15
|
+
$ brew install chromedriver
|
16
16
|
|
17
17
|
|
18
18
|
## Demo
|
@@ -20,14 +20,20 @@ Smart selenium base web driver written in Ruby.
|
|
20
20
|
```rb
|
21
21
|
require 'kirchhoff'
|
22
22
|
|
23
|
-
driver = Kirchhoff::Driver.new
|
23
|
+
driver = Kirchhoff::Driver.new
|
24
|
+
driver.go 'https://www.facebook.com/'
|
24
25
|
driver.find('input#email').fill('mail@gogotanaka.com')
|
25
26
|
driver.find('input#pass').fill('password')
|
26
27
|
driver.submit
|
27
28
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
29
|
+
driver.find_text('メールアドレスが正しくありません') do |e|
|
30
|
+
unless e
|
31
|
+
# If there is no text 'メールアドレスが正しくありません'
|
32
|
+
end
|
32
33
|
end
|
34
|
+
|
35
|
+
driver.wait_element("div#wait", timeout: 5)
|
36
|
+
|
37
|
+
driver.wait_text("wait for you...", timeout: 5, maybe: false)
|
38
|
+
#=> raise err if there is no text 'wait for you...'
|
33
39
|
```
|
data/lib/kirchhoff.rb
CHANGED
@@ -6,17 +6,9 @@ require 'kirchhoff/logger'
|
|
6
6
|
|
7
7
|
module Kirchhoff
|
8
8
|
class Driver
|
9
|
-
attr_accessor :__driver__, :
|
10
|
-
attr_reader :log_dir_path
|
11
|
-
include Kirchhoff::CommonInterface
|
12
|
-
|
13
|
-
def find_element selector
|
14
|
-
@__driver__.find_element selector
|
15
|
-
end
|
9
|
+
attr_accessor :__driver__, :waiter
|
16
10
|
|
17
|
-
|
18
|
-
@__driver__.find_elements selector
|
19
|
-
end
|
11
|
+
include Kirchhoff::CommonInterface
|
20
12
|
|
21
13
|
def current_url
|
22
14
|
@__driver__.current_url
|
@@ -26,9 +18,13 @@ module Kirchhoff
|
|
26
18
|
@__driver__.quit
|
27
19
|
end
|
28
20
|
|
29
|
-
def
|
30
|
-
@__driver__
|
31
|
-
|
21
|
+
def reload
|
22
|
+
@__driver__.navigate.refresh
|
23
|
+
end
|
24
|
+
|
25
|
+
def initialize(browser: :chrome, timeout: 6)
|
26
|
+
@__driver__ = Selenium::WebDriver.for(browser)
|
27
|
+
@waiter = Selenium::WebDriver::Wait.new(timeout: timeout)
|
32
28
|
end
|
33
29
|
|
34
30
|
def go url
|
@@ -36,15 +32,15 @@ module Kirchhoff
|
|
36
32
|
Kirchhoff::Logger.call :info, "visiting #{url}..."
|
37
33
|
end
|
38
34
|
|
39
|
-
def reload
|
40
|
-
@__driver__.navigate.refresh
|
41
|
-
end
|
42
|
-
|
43
35
|
def submit
|
44
36
|
$focus.submit
|
45
37
|
Kirchhoff::Logger.call :info, "submit form ..."
|
46
38
|
end
|
47
39
|
|
40
|
+
def to_html
|
41
|
+
attribute "outerHTML"
|
42
|
+
end
|
43
|
+
|
48
44
|
def exec_js(js_code)
|
49
45
|
@__driver__.execute_script js_code
|
50
46
|
end
|
@@ -61,26 +57,24 @@ module Kirchhoff
|
|
61
57
|
@__driver__.switch_to.window @__driver__.window_handles[num]
|
62
58
|
end
|
63
59
|
|
64
|
-
def
|
65
|
-
|
66
|
-
wait.until { self.find_element(css: selector) }
|
67
|
-
rescue Selenium::WebDriver::Error::TimeOutError
|
68
|
-
unless maybe
|
69
|
-
raise Selenium::WebDriver::Error::TimeOutError, "selector: #{selector}"
|
70
|
-
end
|
60
|
+
def to_html
|
61
|
+
@__driver__.page_source
|
71
62
|
end
|
72
63
|
|
73
|
-
def
|
74
|
-
|
75
|
-
wait.until { self.find_element(xpath: "//*[text()[contains(.,\"#{text}\")]]") }
|
76
|
-
rescue Selenium::WebDriver::Error::TimeOutError
|
77
|
-
unless maybe
|
78
|
-
raise Selenium::WebDriver::Error::TimeOutError, "text: #{text}"
|
79
|
-
end
|
64
|
+
private def weak_find selector
|
65
|
+
@__driver__.find_element(css: selector)
|
80
66
|
end
|
81
67
|
|
82
|
-
def
|
83
|
-
|
68
|
+
private def weak_multi_find selector
|
69
|
+
@__driver__.find_elements(css: selector)
|
70
|
+
end
|
71
|
+
|
72
|
+
private def weak_find_text text
|
73
|
+
@__driver__.find_element(xpath: "//*[text()[contains(.,\"#{text}\")]]")
|
74
|
+
end
|
75
|
+
|
76
|
+
private def weak_multi_find_text text
|
77
|
+
@__driver__.find_elements(xpath: "//*[text()[contains(.,\"#{text}\")]]")
|
84
78
|
end
|
85
79
|
end
|
86
80
|
end
|
@@ -89,13 +83,25 @@ class Selenium::WebDriver::Element
|
|
89
83
|
include Kirchhoff::CommonInterface
|
90
84
|
alias :origin_click :click
|
91
85
|
|
92
|
-
def click
|
93
|
-
origin_click()
|
94
|
-
end
|
95
|
-
|
96
86
|
def fill(text)
|
97
87
|
$focus = self
|
98
88
|
send_key(text)
|
99
89
|
Kirchhoff::Logger.call :info, "fill '#{text}'"
|
100
90
|
end
|
91
|
+
|
92
|
+
def to_html
|
93
|
+
attribute "outerHTML"
|
94
|
+
end
|
95
|
+
|
96
|
+
private def weak_find selector
|
97
|
+
self.find_element(css: selector)
|
98
|
+
end
|
99
|
+
|
100
|
+
private def weak_find_text text
|
101
|
+
self.find_elements(xpath: "//*[text()[contains(.,\"#{text}\")]]")
|
102
|
+
end
|
103
|
+
|
104
|
+
def waiter
|
105
|
+
Selenium::WebDriver::Wait.new(timeout: 5)
|
106
|
+
end
|
101
107
|
end
|
@@ -1,41 +1,41 @@
|
|
1
1
|
module Kirchhoff
|
2
2
|
module CommonInterface
|
3
|
-
def find selector
|
4
|
-
e = self.
|
5
|
-
|
6
|
-
|
3
|
+
def find selector, maybe: true, wait: true
|
4
|
+
e = wait ? self.waiter.until { weak_find(selector) } : weak_find(selector)
|
5
|
+
|
6
|
+
Kirchhoff::Logger.call :info, "find #{selector}..."
|
7
7
|
|
8
8
|
block_given? ? yield(e) : e
|
9
|
-
rescue Selenium::WebDriver::Error::NoSuchElementError
|
10
|
-
|
9
|
+
rescue Selenium::WebDriver::Error::NoSuchElementError, Selenium::WebDriver::Error::TimeOutError
|
10
|
+
unless maybe
|
11
|
+
raise Selenium::WebDriver::Error::NoSuchElementError, "selector: #{selector}"
|
12
|
+
end
|
11
13
|
end
|
12
14
|
|
13
15
|
def multi_find selector
|
14
|
-
|
16
|
+
weak_multi_find(selector).tap do
|
15
17
|
Kirchhoff::Logger.call :info, "multi find #{selector}..."
|
16
18
|
end
|
17
19
|
end
|
18
20
|
|
19
|
-
def find_text text
|
20
|
-
e = self.
|
21
|
-
|
22
|
-
|
21
|
+
def find_text text, maybe: true, wait: true
|
22
|
+
e = wait ? self.waiter.until { weak_find_text(text) } : weak_find_text(text)
|
23
|
+
|
24
|
+
Kirchhoff::Logger.call :info, "find text '#{text}'..."
|
23
25
|
|
24
26
|
block_given? ? yield(e) : e
|
25
|
-
rescue Selenium::WebDriver::Error::NoSuchElementError
|
26
|
-
|
27
|
+
rescue Selenium::WebDriver::Error::NoSuchElementError, Selenium::WebDriver::Error::TimeOutError
|
28
|
+
unless maybe
|
29
|
+
raise Selenium::WebDriver::Error::NoSuchElementError, "text: #{text}"
|
30
|
+
end
|
27
31
|
end
|
28
32
|
|
29
33
|
def multi_find_text text
|
30
|
-
|
34
|
+
weak_multi_find_text(text).tap do
|
31
35
|
Kirchhoff::Logger.call :info, "multi find text '#{text}'..."
|
32
36
|
end
|
33
37
|
end
|
34
38
|
|
35
|
-
def to_html
|
36
|
-
attribute "outerHTML"
|
37
|
-
end
|
38
|
-
|
39
39
|
def to_nokogiri
|
40
40
|
Nokogiri::HTML self.to_html
|
41
41
|
end
|
data/lib/kirchhoff/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kirchhoff
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- gogotanaka
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-05-
|
11
|
+
date: 2016-05-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: selenium-webdriver
|