kirchhoff 0.0.2 → 0.0.3

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
  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