marta 0.29156 → 0.30366

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: fd0d99204224a1b096fe1d9a103ed94c141f33e6
4
- data.tar.gz: 92effa54d30743c5718bbcd2fd047143b970e05f
3
+ metadata.gz: be4abef064cc25eb50c8a5eb9a56882df5f06f29
4
+ data.tar.gz: 91f8843e49995ddc89d1067074ae253f10aafc66
5
5
  SHA512:
6
- metadata.gz: 934ff2dcfa6abf910a4f74be6c95826a36cd5c16b1fb06eb35491c8c02a781672b1bf3804099e04d6d8647bc89bf580f7a53b7d60cf9f7c585bbb71f2d3a46dc
7
- data.tar.gz: 4debddeef970b3634ccbd73ddcf29ec0e2d1ea2386f4ed19c7d4ef344c862b0c425510c287bba5b746691373eef345b6375c4f9a75a6fbfe0f34f57f8d27b429
6
+ metadata.gz: ba23f875bbab44dc04ed47d03342499ccf1c7ba7acded1b242a8313aea4ab67e84bfd3cd816e16c91b867d4eab10ecd76cbe1c719d21c24ddad11cd2d9e4c1e4
7
+ data.tar.gz: fd42bd950f95de0bea1ee2b36070a784633ff262ef775975a785935a28a77b3b8a2fd887394d4e8c5b7198a09cbfbf190f10d51afec8533df6cb027b066e82fb
data/README.md CHANGED
@@ -40,7 +40,7 @@ your_page.your_element.click
40
40
  5. Add *url* variable with the url of desired page as a default value.
41
41
  6. Confirm.
42
42
  7. Then page will be opened and you will be asked about your_element.
43
- 8. Just click the element and confirm the selection (twice)
43
+ 8. Just click the element and confirm the selection.
44
44
  9. Now you can run the test without LEARN parameter and it will work.
45
45
 
46
46
  **So you are `writing code in pageobject pattern` style.**
@@ -95,6 +95,37 @@ dance_with learn: true or false
95
95
  your_page.method_edit('newelementname')
96
96
  ```
97
97
 
98
+ **Q: How is working the open_page method?**
99
+
100
+ *A: That method is a part of the SmartPage class. It means that you can call it for any class\page object which was generated by Marta. There are three ways to use it:*
101
+
102
+ *The most straight way*
103
+ ```ruby
104
+ dance_with
105
+ TestPage.new.open_page("smthing.com") # Will navigate you to http://smthing.com
106
+ ```
107
+
108
+ *Predefined url way:*
109
+
110
+ *At the step of the page defining set variable url = smthing.com*
111
+ ```ruby
112
+ dance_with
113
+ test_page = TestPage.new
114
+ test_page.url #=> "smthing.com"
115
+ test_page.open_page # Will navigate you to http://smthing.com
116
+ ```
117
+
118
+ *The most flexible way:*
119
+
120
+ *At the step of the page defining you set path = testpath*
121
+ ```ruby
122
+ dance_with base_url: "smthing.com"
123
+ test_page = TestPage.new
124
+ test_page.path #=> "testpath"
125
+ test_page.open_page # Will navigate you to http://smthing.com/testpath
126
+ ```
127
+ *Note: If there is no path provided than Marta will go to base_url. Also if url value is defined for page Marta will use it instead the base_url. If url is given as argument for the open_page method Marta will ignore both url and base_url values and will use the argument provided.*
128
+
98
129
  **Q: And what if I want to create page and define element without learn mode? For example in the middle of a debug session.**
99
130
 
100
131
  *A Code in learn mode =*
@@ -131,13 +162,16 @@ engine.element(id: 'will_be_located_without_Marta')
131
162
 
132
163
  *A: When defining an element you can set a collection checkbox at the top of the dialog. In that case Marta will return Watir::ElementCollection.*
133
164
 
165
+ **Q: How can I find an invisible element? Or hardly clickable element with 1px size?**
166
+
167
+ *A: At the stage of element defining you can see a button "Find by HTML". That button will open html code of your page in a special blue form. Find the html code of your element and click on it.*
168
+
134
169
  **Q: How can I find not just an element but a Watir::Radio for example?**
135
170
 
136
171
  *A: Marta automatically performs to_subtype for every element. So if your element is a radio button you will be able to use specific methods.*
137
172
  ```ruby
138
173
  your_page.element_that_supposed_to_be_radio.set?
139
174
  ```
140
- *ATTENTION. Until [Watir issue 537](https://github.com/watir/watir/issues/537) is not fixed it may work wrong. Sometimes.*
141
175
 
142
176
  **Q: And what about elements under iframes?**
143
177
 
@@ -173,11 +207,11 @@ your_page.important_element.click
173
207
 
174
208
  **Q: And what about Cucumber? Will it work with Marta?**
175
209
 
176
- *A: I don't know. I am not a Cucumber fan and I have giant doubts that Marta and Cucumber will work together well. But you can try. Also I am thinking about it.*
210
+ *A: Yes it is working with Cucumber and Spinach. I will add some examples later.*
177
211
 
178
- **Q: Ok. With what WILL it work?**
212
+ **Q: Where is an example?**
179
213
 
180
- *A: It should work with rspec and parallel_rspec. See example_project for example*
214
+ *A: See "example_project" for rspec based example*
181
215
 
182
216
  **Q: How can I design more object oriented and DRY tests using Marta**
183
217
 
@@ -206,7 +240,7 @@ g_page.search "I am in love with selenium."
206
240
 
207
241
  **Q: What else?**
208
242
 
209
- *A: Nothing. Marta is under development. Her version is 0.29156 only. And I am not a professional developer. But I am training her on new tricks.*
243
+ *A: Nothing. Marta is under development. Her version is 0.30366 only. And I am not a professional developer. But I am training her on new tricks.*
210
244
 
211
245
  ## Internal Design
212
246
 
@@ -299,7 +333,7 @@ end
299
333
 
300
334
  ## Development
301
335
 
302
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
336
+ After checking out the repo, run `bundle install` to install dependencies. Then run `rake install` to install the current version of gem. Then, run `rake spec` to run the tests.
303
337
 
304
338
  To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
305
339
 
@@ -16,6 +16,7 @@ module Marta
16
16
  def page_edit(const, data=Hash.new)
17
17
  data['vars'] = inject('page', const, data['vars'])
18
18
  json_2_class(file_write(const.to_s, data))
19
+ data['vars']
19
20
  end
20
21
  end
21
22
  end
@@ -222,15 +222,16 @@ div[martastyle=html_content] div {
222
222
  padding: 5px;
223
223
  border-style: solid;
224
224
  border-width: 1px;
225
- width: 90%
225
+ width: 90%;
226
226
  }
227
227
 
228
228
  div[martastyle=html_content] div span {
229
229
  display: block;
230
230
  position: relative;
231
- left: 30px;
231
+ margin-left: 30px;
232
232
  text-align: left;
233
233
  cursor: pointer;
234
+ word-wrap:break-word;
234
235
  }
235
236
 
236
237
  div[martaclass=marta_div] b {
data/lib/marta/dialogs.rb CHANGED
@@ -69,7 +69,7 @@ module Marta
69
69
  xpath_meth_merge
70
70
  end
71
71
  end
72
-
72
+
73
73
  # Asking: "What are you looking for?"
74
74
  def ask_for_elements
75
75
  ask 'element', "Found #{@found} elements for #{@title}", @attrs
@@ -86,8 +86,8 @@ module Marta
86
86
  end
87
87
 
88
88
  def build_content(data)
89
- build_methods(data['meths'])
90
- build_vars(data['vars'])
89
+ build_methods(data['meths']) if !data['meths'].nil?
90
+ build_vars(data['vars']) if !data['vars'].nil?
91
91
  end
92
92
 
93
93
  def build_methods(methods)
@@ -116,6 +116,8 @@ module Marta
116
116
  if !self.methods.include?(name.to_sym) and (@data['meths'][name].nil?)
117
117
  self.singleton_class.send(:attr_accessor, name.to_sym)
118
118
  instance_variable_set("@#{name}", process_string(content))
119
+ elsif self.methods.include?(name.to_sym) and (@data['meths'][name].nil?)
120
+ instance_variable_set("@#{name}", process_string(content))
119
121
  else
120
122
  if !@data['meths'][name].nil?
121
123
  warn "Marta will not create '#{name}' variable for #{self.class}"\
@@ -17,6 +17,7 @@ module Marta
17
17
  @@tolerancy = Hash.new
18
18
  @@learn = Hash.new
19
19
  @@engine = Hash.new
20
+ @@base_url = Hash.new
20
21
 
21
22
  # Getting uniq id for process thread
22
23
  def self.thread_id
@@ -52,6 +53,11 @@ module Marta
52
53
  @@engine[thread_id]
53
54
  end
54
55
 
56
+ # Marta knows what web application she is trying to test
57
+ def self.base_url
58
+ @@base_url[thread_id]
59
+ end
60
+
55
61
  # Marta is changing parameters by the same scheme.
56
62
  def self.parameter_set(what, value, default)
57
63
  what[thread_id] = !value.nil? ? value : what[thread_id]
@@ -101,6 +107,16 @@ module Marta
101
107
  def self.set_tolerancy(value)
102
108
  @@tolerancy = parameter_set(@@tolerancy, value, 1024)
103
109
  end
110
+
111
+ # Marta uses a simple ruke to set the basic url.
112
+ def self.set_base_url(value)
113
+ if (value.nil?) or (value.class == String)
114
+ @@base_url = parameter_set(@@base_url, value, "")
115
+ else
116
+ raise ArgumentError, "Basic url at least should be a string. Not"\
117
+ " a #{value}:#{value.class}"
118
+ end
119
+ end
104
120
  end
105
121
 
106
122
  private
@@ -127,14 +143,9 @@ module Marta
127
143
  SettingMaster.tolerancy_value
128
144
  end
129
145
 
130
- # Marta is accepting parameters and rereading pageobjects on any change
131
- def dance_with(browser: nil, folder: nil, learn: nil, tolerancy: nil)
132
- SettingMaster.set_engine browser
133
- SettingMaster.set_folder folder
134
- SettingMaster.set_learn learn
135
- read_folder
136
- SettingMaster.set_tolerancy tolerancy
137
- engine
146
+ # Marta knows the basic url of the projec. If it is defined
147
+ def base_url
148
+ SettingMaster.base_url
138
149
  end
139
150
  end
140
151
  end
@@ -29,9 +29,11 @@ module Marta
29
29
  @data ||= my_data
30
30
  @class_name ||= my_class_name
31
31
  @edit_mark ||= will_edit
32
+ data_vars = Hash.new
32
33
  build_content my_data
33
34
  if will_edit
34
- page_edit my_class_name, my_data
35
+ data_vars = page_edit my_class_name, my_data
36
+ my_data["vars"] = data_vars if data_vars != Hash.new
35
37
  end
36
38
  # We need optimization here very much!
37
39
  build_content my_data
@@ -58,13 +60,16 @@ module Marta
58
60
 
59
61
  # If page has url variable it can be opened like Page.new.open_page
60
62
  def open_page(url = nil)
61
- if url != nil
63
+ @path ||= ""
64
+ if !url.nil?
62
65
  engine.goto url
63
- else
64
- if @url == nil
65
- raise ArgumentError, "You should set url to use open_page"
66
- end
66
+ elsif !@url.nil?
67
67
  engine.goto @url
68
+ elsif base_url != ""
69
+ engine.goto base_url + "/" + (@path.nil? ? "" : @path)
70
+ else
71
+ raise ArgumentError, "You should set url to use open_page. You may"\
72
+ " also use base_url option for dance_with and path for page object"
68
73
  end
69
74
  end
70
75
 
@@ -56,12 +56,7 @@ module Marta
56
56
 
57
57
  # Transforming an element to a subtype
58
58
  def subtype_of(element)
59
- element = @engine.element(xpath: @xpath).to_subtype
60
- #https://github.com/watir/watir/issues/537
61
- if element.class == Watir::IFrame
62
- element = @engine.iframe(xpath: @xpath)
63
- end
64
- element
59
+ @engine.element(xpath: @xpath).to_subtype
65
60
  end
66
61
 
67
62
  # Main logic. We are returning a prefinded collection
data/lib/marta/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  module Marta
2
- VERSION = "0.29156"
2
+ VERSION = "0.30366"
3
3
  NAME = "marta"
4
4
  end
data/lib/marta.rb CHANGED
@@ -54,11 +54,13 @@ module Marta
54
54
  # dance_with is for creating settings to be used later.
55
55
  # Settings can be changed at any time by calling dance with.
56
56
  # Read more in the README
57
- def dance_with(browser: nil, folder: nil, learn: nil, tolerancy: nil)
57
+ def dance_with(browser: nil, folder: nil, learn: nil, tolerancy: nil,
58
+ base_url: nil)
58
59
  SettingMaster.set_engine browser
59
60
  SettingMaster.set_folder folder
61
+ SettingMaster.set_base_url base_url
60
62
  SettingMaster.set_learn learn
61
- SmartPageCreator.create_all
63
+ read_folder
62
64
  SettingMaster.set_tolerancy tolerancy
63
65
  engine
64
66
  end
data/marta.gemspec CHANGED
@@ -23,6 +23,6 @@ Gem::Specification.new do |spec|
23
23
  spec.add_development_dependency "rake"
24
24
  spec.add_development_dependency "rspec"
25
25
  spec.add_development_dependency "simplecov"
26
- spec.add_dependency "watir"
26
+ spec.add_dependency "watir", '~> 6.7.2'
27
27
  spec.add_dependency "json"
28
28
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: marta
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.29156'
4
+ version: '0.30366'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sergei Seleznev
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-08-19 00:00:00.000000000 Z
11
+ date: 2017-08-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -70,16 +70,16 @@ dependencies:
70
70
  name: watir
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ">="
73
+ - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '0'
75
+ version: 6.7.2
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ">="
80
+ - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '0'
82
+ version: 6.7.2
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: json
85
85
  requirement: !ruby/object:Gem::Requirement