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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4b4685b6ac03e6611ca24f2337f79d12078ea07a
4
- data.tar.gz: 87cc14431e9556168881c17e0d2ddd08255dcab4
3
+ metadata.gz: 987620edb1eac2879b10b1663a04a89d3cc8ea0d
4
+ data.tar.gz: 2621540bb8c27ce300067dafc6f30c168b771dc7
5
5
  SHA512:
6
- metadata.gz: 2b7fe60b4f1676c657dac0c62f67cb75c2e0a16370732a5029a0ec462ad6a260d6af6b485dc7c5b6cc63f117f23a01f07bb7c91cfbcc5351fd85b12b312fb4e9
7
- data.tar.gz: 962ae7e2550548e7bb6992ff575c9b0d04802daae0beafe32316e63dc098c66a65f1279907ab601de49f714571f2a51f53d9f82a7642d75094472a6c94ea5a90
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
- $ gem install kirchhoff
11
+ $ gem install kirchhoff
12
12
 
13
13
  2. Install chromedriver. (Below is the MacOS example.)
14
14
 
15
- $ brew install chromedriver
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('https://www.facebook.com/')
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
- if driver.has_text?('メールアドレスが正しくありません')
29
- # ログインエラー後の処理
30
- else
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
  ```
@@ -6,17 +6,9 @@ require 'kirchhoff/logger'
6
6
 
7
7
  module Kirchhoff
8
8
  class Driver
9
- attr_accessor :__driver__, :default_timeout
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
- def find_elements selector
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 initialize(browser: :chrome, default_timeout: 6)
30
- @__driver__ = Selenium::WebDriver.for(browser)
31
- @default_timeout = default_timeout
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 wait_element(selector, maybe: true, t: nil)
65
- wait = Selenium::WebDriver::Wait.new(timeout: (t || @default_timeout))
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 wait_text(text, maybe: true, t: nil)
74
- wait = Selenium::WebDriver::Wait.new(timeout: (t || @default_timeout))
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 to_html
83
- self.__driver__.page_source
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.find_element(css: selector).tap do
5
- Kirchhoff::Logger.call :info, "find #{selector}..."
6
- end
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
- nil
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
- self.find_elements(css: selector).tap do |e|
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.find_element({xpath: "//*[text()[contains(.,\"#{text}\")]]"}).tap do
21
- Kirchhoff::Logger.call :info, "find text '#{text}'..."
22
- end
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
- nil
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
- self.find_elements({xpath: "//*[text()[contains(.,\"#{text}\")]]"}).tap do |e|
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
@@ -1,3 +1,3 @@
1
1
  module Kirchhoff
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
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.2
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-06 00:00:00.000000000 Z
11
+ date: 2016-05-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: selenium-webdriver