fluent 0.1.0 → 0.2.0
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/HISTORY.md +21 -0
- data/lib/fluent.rb +29 -2
- data/lib/fluent/enclosers.rb +35 -0
- data/lib/fluent/evaluators.rb +82 -0
- data/lib/fluent/factory.rb +31 -0
- data/lib/fluent/generators.rb +116 -18
- data/lib/fluent/platform_selenium.rb +18 -0
- data/lib/fluent/platform_selenium/platform_object.rb +21 -0
- data/lib/fluent/platform_watir/platform_object.rb +181 -14
- data/lib/fluent/platform_watir/platform_web_elements/checkbox.rb +21 -0
- data/lib/fluent/platform_watir/platform_web_elements/radio.rb +21 -0
- data/lib/fluent/platform_watir/platform_web_elements/select_list.rb +30 -4
- data/lib/fluent/platform_watir/platform_web_elements/text_field.rb +13 -0
- data/lib/fluent/platform_watir/platform_web_elements/web_element.rb +84 -5
- data/lib/fluent/platforms.rb +2 -1
- data/lib/fluent/version.rb +1 -1
- data/lib/fluent/web_elements/cell.rb +16 -0
- data/lib/fluent/web_elements/checkbox.rb +4 -0
- data/lib/fluent/web_elements/div.rb +16 -0
- data/lib/fluent/web_elements/list_item.rb +16 -0
- data/lib/fluent/web_elements/ordered_list.rb +16 -0
- data/lib/fluent/web_elements/radio.rb +4 -0
- data/lib/fluent/web_elements/select_list.rb +4 -0
- data/lib/fluent/web_elements/span.rb +16 -0
- data/lib/fluent/web_elements/table.rb +16 -0
- data/lib/fluent/web_elements/text_area.rb +16 -0
- data/lib/fluent/web_elements/text_field.rb +8 -0
- data/lib/fluent/web_elements/unordered_list.rb +16 -0
- data/lib/fluent/web_elements/web_element.rb +12 -0
- data/spec/enclosers_spec.rb +38 -0
- data/spec/evaluators_spec.rb +88 -0
- data/spec/factory_spec.rb +42 -0
- data/spec/fluent_spec.rb +32 -1
- data/spec/generators/cell_generators_spec.rb +50 -0
- data/spec/generators/div_generators_spec.rb +49 -0
- data/spec/generators/list_item_generators_spec.rb +53 -0
- data/spec/generators/ordered_list_generators_spec.rb +53 -0
- data/spec/generators/span_generators_spec.rb +49 -0
- data/spec/generators/table_generators_spec.rb +49 -0
- data/spec/generators/text_area_generators_spec.rb +55 -0
- data/spec/generators/unordered_list_generators_spec.rb +53 -0
- data/spec/generators_spec.rb +40 -0
- data/spec/mock_app.rb +17 -0
- data/spec/platform_object_spec.rb +9 -0
- data/spec/web_element_spec.rb +15 -0
- data/spec/web_element_watir_spec.rb +123 -5
- data/spec/web_elements/checkbox_spec.rb +21 -0
- data/spec/web_elements/radio_spec.rb +21 -0
- data/spec/web_elements/select_list_spec.rb +41 -0
- data/spec/web_elements/text_field_spec.rb +16 -0
- metadata +48 -2
data/lib/fluent/platforms.rb
CHANGED
data/lib/fluent/version.rb
CHANGED
@@ -0,0 +1,16 @@
|
|
1
|
+
module Fluent
|
2
|
+
module WebElements
|
3
|
+
class Cell < WebElement
|
4
|
+
|
5
|
+
def initialize(web_element, platform)
|
6
|
+
@web_element = web_element
|
7
|
+
include_platform_specifics_for platform
|
8
|
+
end
|
9
|
+
|
10
|
+
def include_platform_specifics_for(platform)
|
11
|
+
super
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -9,6 +9,10 @@ module Fluent
|
|
9
9
|
|
10
10
|
def include_platform_specifics_for(platform)
|
11
11
|
super
|
12
|
+
if platform[:platform] == :watir_webdriver
|
13
|
+
require 'fluent/platform_watir/platform_web_elements/checkbox'
|
14
|
+
self.class.send :include, Fluent::Platforms::WatirWebDriver::CheckBox
|
15
|
+
end
|
12
16
|
end
|
13
17
|
|
14
18
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Fluent
|
2
|
+
module WebElements
|
3
|
+
class Div < WebElement
|
4
|
+
|
5
|
+
def initialize(web_element, platform)
|
6
|
+
@web_element = web_element
|
7
|
+
include_platform_specifics_for platform
|
8
|
+
end
|
9
|
+
|
10
|
+
def include_platform_specifics_for(platform)
|
11
|
+
super
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Fluent
|
2
|
+
module WebElements
|
3
|
+
class ListItem < WebElement
|
4
|
+
|
5
|
+
def initialize(web_element, platform)
|
6
|
+
@web_element = web_element
|
7
|
+
include_platform_specifics_for platform
|
8
|
+
end
|
9
|
+
|
10
|
+
def include_platform_specifics_for(platform)
|
11
|
+
super
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Fluent
|
2
|
+
module WebElements
|
3
|
+
class OrderedList < WebElement
|
4
|
+
|
5
|
+
def initialize(web_element, platform)
|
6
|
+
@web_element = web_element
|
7
|
+
include_platform_specifics_for platform
|
8
|
+
end
|
9
|
+
|
10
|
+
def include_platform_specifics_for(platform)
|
11
|
+
super
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -9,6 +9,10 @@ module Fluent
|
|
9
9
|
|
10
10
|
def include_platform_specifics_for(platform)
|
11
11
|
super
|
12
|
+
if platform[:platform] == :watir_webdriver
|
13
|
+
require 'fluent/platform_watir/platform_web_elements/radio'
|
14
|
+
self.class.send :include, Fluent::Platforms::WatirWebDriver::Radio
|
15
|
+
end
|
12
16
|
end
|
13
17
|
|
14
18
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Fluent
|
2
|
+
module WebElements
|
3
|
+
class Span < WebElement
|
4
|
+
|
5
|
+
def initialize(web_element, platform)
|
6
|
+
@web_element = web_element
|
7
|
+
include_platform_specifics_for platform
|
8
|
+
end
|
9
|
+
|
10
|
+
def include_platform_specifics_for(platform)
|
11
|
+
super
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Fluent
|
2
|
+
module WebElements
|
3
|
+
class Table < WebElement
|
4
|
+
|
5
|
+
def initialize(web_element, platform)
|
6
|
+
@web_element = web_element
|
7
|
+
include_platform_specifics_for platform
|
8
|
+
end
|
9
|
+
|
10
|
+
def include_platform_specifics_for(platform)
|
11
|
+
super
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Fluent
|
2
|
+
module WebElements
|
3
|
+
class TextArea < WebElement
|
4
|
+
|
5
|
+
def initialize(web_element, platform)
|
6
|
+
@web_element = web_element
|
7
|
+
include_platform_specifics_for platform
|
8
|
+
end
|
9
|
+
|
10
|
+
def include_platform_specifics_for(platform)
|
11
|
+
super
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -6,9 +6,17 @@ module Fluent
|
|
6
6
|
@web_element = web_element
|
7
7
|
include_platform_specifics_for platform
|
8
8
|
end
|
9
|
+
|
10
|
+
def append(text)
|
11
|
+
web_element.send_keys(text)
|
12
|
+
end
|
9
13
|
|
10
14
|
def include_platform_specifics_for(platform)
|
11
15
|
super
|
16
|
+
if platform[:platform] == :watir_webdriver
|
17
|
+
require 'fluent/platform_watir/platform_web_elements/text_field'
|
18
|
+
self.class.send :include, Fluent::Platforms::WatirWebDriver::TextField
|
19
|
+
end
|
12
20
|
end
|
13
21
|
|
14
22
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Fluent
|
2
|
+
module WebElements
|
3
|
+
class UnorderedList < WebElement
|
4
|
+
|
5
|
+
def initialize(web_element, platform)
|
6
|
+
@web_element = web_element
|
7
|
+
include_platform_specifics_for platform
|
8
|
+
end
|
9
|
+
|
10
|
+
def include_platform_specifics_for(platform)
|
11
|
+
super
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -8,6 +8,10 @@ module Fluent
|
|
8
8
|
@web_element = web_element
|
9
9
|
include_platform_specifics_for platform
|
10
10
|
end
|
11
|
+
|
12
|
+
def text
|
13
|
+
web_element.text
|
14
|
+
end
|
11
15
|
|
12
16
|
def click
|
13
17
|
web_element.click
|
@@ -21,6 +25,14 @@ module Fluent
|
|
21
25
|
not enabled?
|
22
26
|
end
|
23
27
|
|
28
|
+
def style(property)
|
29
|
+
web_element.style property
|
30
|
+
end
|
31
|
+
|
32
|
+
def class_name
|
33
|
+
attribute('class')
|
34
|
+
end
|
35
|
+
|
24
36
|
def include_platform_specifics_for(platform)
|
25
37
|
if platform[:platform] == :watir_webdriver
|
26
38
|
require 'fluent/platform_watir/platform_web_elements/web_element'
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
class EnclosersTest
|
4
|
+
include Fluent
|
5
|
+
|
6
|
+
end
|
7
|
+
|
8
|
+
describe Fluent::Enclosers do
|
9
|
+
let(:watir_browser) { mock_browser_for_watir }
|
10
|
+
let(:watir_definition) { EnclosersTest.new(watir_browser) }
|
11
|
+
|
12
|
+
context 'a definition using watir-webdriver' do
|
13
|
+
it 'should handle alert message boxes' do
|
14
|
+
watir_browser.should_receive(:alert).exactly(3).times.and_return(watir_browser)
|
15
|
+
watir_browser.should_receive(:exists?).and_return(true)
|
16
|
+
watir_browser.should_receive(:text)
|
17
|
+
watir_browser.should_receive(:ok)
|
18
|
+
watir_definition.will_alert do
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'should handle confirmation message boxes' do
|
23
|
+
watir_browser.should_receive(:alert).exactly(3).times.and_return(watir_browser)
|
24
|
+
watir_browser.should_receive(:exists?).and_return(true)
|
25
|
+
watir_browser.should_receive(:text)
|
26
|
+
watir_browser.should_receive(:ok)
|
27
|
+
watir_definition.will_confirm(true) do
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'should handle prompt message boxes' do
|
32
|
+
watir_browser.should_receive(:wd).twice.and_return(watir_browser)
|
33
|
+
watir_browser.should_receive(:execute_script).twice
|
34
|
+
watir_definition.will_prompt('Testing') do
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,88 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'mock_app'
|
3
|
+
|
4
|
+
describe Fluent::Evaluators do
|
5
|
+
let(:watir_browser) { mock_browser_for_watir }
|
6
|
+
let(:watir_definition) { TestDefinition.new(watir_browser) }
|
7
|
+
|
8
|
+
describe 'browser-level actions' do
|
9
|
+
context 'a definition using watir-webdriver' do
|
10
|
+
it 'should get the active url' do
|
11
|
+
watir_browser.should_receive(:url).twice.and_return('http://localhost:9292')
|
12
|
+
watir_definition.url.should == 'http://localhost:9292'
|
13
|
+
watir_definition.current_url.should == 'http://localhost:9292'
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'should be able to clear all of the cookies from the browser' do
|
17
|
+
watir_browser.should_receive(:cookies).twice.and_return(watir_browser)
|
18
|
+
watir_browser.should_receive(:clear).twice
|
19
|
+
watir_definition.remove_cookies
|
20
|
+
watir_definition.clear_cookies
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'should be able to refresh the page contents' do
|
24
|
+
watir_browser.should_receive(:refresh).twice.and_return(watir_browser)
|
25
|
+
watir_definition.refresh_page
|
26
|
+
watir_definition.refresh
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'should run a script against the browser' do
|
30
|
+
watir_browser.should_receive(:execute_script).twice.and_return('input')
|
31
|
+
watir_definition.run_script('return document.activeElement').should == 'input'
|
32
|
+
watir_definition.execute_script('return document.activeElement').should == 'input'
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'should get a screenshot' do
|
36
|
+
watir_browser.should_receive(:wd).twice.and_return(watir_browser)
|
37
|
+
watir_browser.should_receive(:save_screenshot).twice
|
38
|
+
watir_definition.screenshot('testing.png')
|
39
|
+
watir_definition.save_screenshot('testing.png')
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
describe 'page-level actions' do
|
45
|
+
context 'a definition using watir-webdriver' do
|
46
|
+
it 'should return all the markup on a page' do
|
47
|
+
watir_browser.should_receive(:html).twice.and_return('<h1>Page Title</h1>')
|
48
|
+
watir_definition.markup.should == '<h1>Page Title</h1>'
|
49
|
+
watir_definition.html.should == '<h1>Page Title</h1>'
|
50
|
+
end
|
51
|
+
|
52
|
+
it 'should return the title of a page' do
|
53
|
+
watir_browser.should_receive(:title).twice.and_return('Page Title')
|
54
|
+
watir_definition.page_title.should == 'Page Title'
|
55
|
+
watir_definition.title.should == 'Page Title'
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'should return all the text on a page' do
|
59
|
+
watir_browser.should_receive(:text).twice.and_return('page text')
|
60
|
+
watir_definition.page_text.should == 'page text'
|
61
|
+
watir_definition.text.should == 'page text'
|
62
|
+
end
|
63
|
+
|
64
|
+
it 'should wait for jquery pending requests to finish' do
|
65
|
+
watir_browser.should_receive(:execute_script).with('return jQuery.active').and_return(0)
|
66
|
+
watir_definition.wait_for_pending_requests
|
67
|
+
end
|
68
|
+
|
69
|
+
it 'should return an exception if pending requests did not finish' do
|
70
|
+
watir_browser.should_receive(:execute_script).at_least(1).times.with('return jQuery.active').and_return(1)
|
71
|
+
expect { watir_definition.wait_for_pending_requests(0.1) }.to raise_error
|
72
|
+
end
|
73
|
+
|
74
|
+
it 'should wait for a condition to be true' do
|
75
|
+
watir_browser.should_receive(:wait_until).with(5, 'some condition')
|
76
|
+
watir_definition.wait_until(5, 'some condition')
|
77
|
+
end
|
78
|
+
|
79
|
+
it 'should wait for a condition to be true with any page level timeout' do
|
80
|
+
Fluent.page_level_wait = 30
|
81
|
+
watir_browser.should_receive(:wait_until).with(30, nil)
|
82
|
+
watir_definition.wait_until
|
83
|
+
end
|
84
|
+
|
85
|
+
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'mock_app'
|
3
|
+
|
4
|
+
class TestFactory
|
5
|
+
include Fluent::Factory
|
6
|
+
|
7
|
+
attr_accessor :browser
|
8
|
+
end
|
9
|
+
|
10
|
+
class DefinitionTest
|
11
|
+
include Fluent
|
12
|
+
|
13
|
+
url_is 'http://localhost:9292'
|
14
|
+
end
|
15
|
+
|
16
|
+
describe Fluent::Factory do
|
17
|
+
before(:each) do
|
18
|
+
@factory = TestFactory.new
|
19
|
+
@factory.browser = mock_browser_for_watir
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'should create a new definition object and view it, using on_view' do
|
23
|
+
@factory.browser.should_receive(:goto)
|
24
|
+
@factory.on_view DefinitionTest do |page|
|
25
|
+
page.should be_instance_of DefinitionTest
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'should create a new definition object, using on' do
|
30
|
+
@factory.browser.should_not_receive(:goto)
|
31
|
+
@factory.on DefinitionTest do |page|
|
32
|
+
page.should be_instance_of DefinitionTest
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'should set a reference to be used outside the factory' do
|
37
|
+
active = @factory.on DefinitionTest
|
38
|
+
current = @factory.instance_variable_get '@active'
|
39
|
+
current.should === active
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
data/spec/fluent_spec.rb
CHANGED
@@ -5,5 +5,36 @@ describe Fluent do
|
|
5
5
|
it 'should return version information' do
|
6
6
|
Fluent.version.should == "Fluent v#{Fluent::VERSION}"
|
7
7
|
end
|
8
|
-
|
8
|
+
|
9
|
+
it 'should set the element level wait default to 5' do
|
10
|
+
Fluent.instance_variable_set('@element_wait', nil)
|
11
|
+
Fluent.element_level_wait.should == 5
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'should allow the element level wait to be set' do
|
15
|
+
Fluent.instance_variable_set('@element_wait', 10)
|
16
|
+
Fluent.element_level_wait.should == 10
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'should be able to set an element level wait value' do
|
20
|
+
Fluent.element_level_wait = 10
|
21
|
+
value = Fluent.instance_variable_get('@element_wait')
|
22
|
+
value.should == 10
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'should set the page level wait default to 15' do
|
26
|
+
Fluent.instance_variable_set('@page_wait', nil)
|
27
|
+
Fluent.page_level_wait.should == 15
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'should allow the page level wait to be set' do
|
31
|
+
Fluent.instance_variable_set('@page_wait', 10)
|
32
|
+
Fluent.page_level_wait.should == 10
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'should be able to set a page level wait value' do
|
36
|
+
Fluent.page_level_wait = 30
|
37
|
+
value = Fluent.instance_variable_get('@page_wait')
|
38
|
+
value.should == 30
|
39
|
+
end
|
9
40
|
end
|