marta 0.26150 → 0.28017
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 +2 -2
- data/lib/marta/data/custom-xpath.js +8 -5
- data/lib/marta/data/element.html +2 -1
- data/lib/marta/data/element.js +21 -3
- data/lib/marta/data/style.css +6 -2
- data/lib/marta/dialogs.rb +48 -10
- data/lib/marta/lightning.rb +8 -13
- data/lib/marta/version.rb +1 -1
- data/marta.gemspec +2 -1
- metadata +17 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 89341581be4f3b0b1ebf57de01d8e583748ac7c5
|
|
4
|
+
data.tar.gz: ff147c84a554e8ec66b3f94f0a1016bfb364cc7c
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 6abbbd0b0b39235df76bd6fa6abaaea92227fb4ede3a51f9ba65c6e0f6d86488dcc7430e9b52a3070099a90118acbda9fd00272e3c91c3af66920b116cc26d04
|
|
7
|
+
data.tar.gz: 4cd9c90457d6ef3dd77b924048b6b9fa6c5f125f2753c71b72502e566ce2c9b9762d4b8ad03e54dbcbd5952dee26d5093e870ac021e1252b6a46be7fca1d918b
|
data/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Marta
|
|
2
2
|
|
|
3
|
-
Marta is a pretty new way to write selenium tests for WEB applications using Watir. Main idea is very similar to cucumber. In Cucumber you are writing test and then defining a code behind it. In Marta you are writing code and then defining classes/pageobjects and methods/elements behind it thru your browser window.
|
|
3
|
+
Marta was planned as an element locating tool for Watir tests. But now Marta is also a pretty new way to write selenium tests for WEB applications using Watir. Main idea is very similar to cucumber. In Cucumber you are writing test and then defining a code behind it. In Marta you are writing code and then defining classes/pageobjects and methods/elements behind it thru your browser window.
|
|
4
4
|
|
|
5
5
|
Also Marta is providing a little more stability when locating elements on the page.
|
|
6
6
|
|
|
@@ -193,7 +193,7 @@ g_page.search "I am in love with selenium."
|
|
|
193
193
|
|
|
194
194
|
**Q: What else?**
|
|
195
195
|
|
|
196
|
-
*A: Nothing. Marta is under development. Her version is 0.
|
|
196
|
+
*A: Nothing. Marta is under development. Her version is 0.28017 only. And I am not a professional developer. But I am training her on new tricks.*
|
|
197
197
|
|
|
198
198
|
## Internal Design
|
|
199
199
|
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
var marta_result = {};
|
|
2
2
|
var marta_confirm_mark = false;
|
|
3
3
|
var marta_temp_els =[];
|
|
4
|
-
var marta_temp_styles = [];
|
|
5
4
|
|
|
6
5
|
function marta_add_data() {
|
|
7
6
|
marta_confirm_mark = false;
|
|
@@ -11,18 +10,16 @@ function marta_add_data() {
|
|
|
11
10
|
function marta_look() {
|
|
12
11
|
try {
|
|
13
12
|
for (var i=0; i<marta_temp_els.snapshotLength; i++) {
|
|
14
|
-
marta_temp_els.snapshotItem(i).
|
|
13
|
+
marta_temp_els.snapshotItem(i).removeAttribute("martaclass");
|
|
15
14
|
};
|
|
16
15
|
var t=0;
|
|
17
16
|
var value = document.getElementById("marta_user_xpath").value;
|
|
18
17
|
var result = document.evaluate(value, document.body, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
|
|
19
18
|
marta_temp_els = result;
|
|
20
|
-
|
|
21
19
|
for (var i=0; i<result.snapshotLength; i++) {
|
|
22
20
|
var marta_smthing = ((result.snapshotItem(i).getAttribute("martaclass")=="marta_smthing")||(result.snapshotItem(i).getAttribute("martaclass")=="marta_div"));
|
|
23
21
|
if(!marta_smthing) {
|
|
24
|
-
|
|
25
|
-
result.snapshotItem(i).setAttribute("style","animation: marta_found 6s infinite;");
|
|
22
|
+
result.snapshotItem(i).setAttribute("martaclass","foundbymarta");
|
|
26
23
|
t = t+1;
|
|
27
24
|
};
|
|
28
25
|
};
|
|
@@ -33,6 +30,9 @@ function marta_look() {
|
|
|
33
30
|
};
|
|
34
31
|
|
|
35
32
|
function marta_confirm(){
|
|
33
|
+
for (var i=0; i<marta_temp_els.snapshotLength; i++) {
|
|
34
|
+
marta_temp_els.snapshotItem(i).removeAttribute("martaclass");
|
|
35
|
+
};
|
|
36
36
|
marta_result["collection"] = document.getElementById("marta_array").checked;
|
|
37
37
|
marta_result["xpath"] = document.getElementById("marta_user_xpath").value;
|
|
38
38
|
var toClear = document.querySelector("[martaclass=marta_smthing]");
|
|
@@ -41,6 +41,9 @@ function marta_confirm(){
|
|
|
41
41
|
};
|
|
42
42
|
|
|
43
43
|
function marta_try_again(){
|
|
44
|
+
for (var i=0; i<marta_temp_els.snapshotLength; i++) {
|
|
45
|
+
marta_temp_els.snapshotItem(i).removeAttribute("martaclass");
|
|
46
|
+
};
|
|
44
47
|
var toClear = document.querySelector("[martaclass=marta_div]");
|
|
45
48
|
toClear.parentNode.removeChild(toClear);
|
|
46
49
|
marta_confirm_mark = true;
|
data/lib/marta/data/element.html
CHANGED
|
@@ -11,7 +11,8 @@
|
|
|
11
11
|
<p martaclass=marta_smthing>Find it like a usual element and focus to it in code with dance_with(your_iframe)</p>
|
|
12
12
|
</div>
|
|
13
13
|
<div id=marta_s_content martaclass=marta_smthing>
|
|
14
|
-
<input type=button martaclass=marta_smthing id=marta_confirm onclick=
|
|
14
|
+
<input type=button martaclass=marta_smthing id=marta_confirm onclick=marta_end_loop(); value=Confirm />
|
|
15
|
+
<input type=button martaclass=marta_smthing id=marta_set_by_hand onclick=marta_set_by_hand(); value="Set by hand" />
|
|
15
16
|
</div>
|
|
16
17
|
<div id=marta_s_element_type martaclass=marta_smthing>
|
|
17
18
|
<div martaclass=marta_smthing class=label id=marta_element_label>What we are looking for (one element or group?)</div>
|
data/lib/marta/data/element.js
CHANGED
|
@@ -57,6 +57,7 @@ function marta_change_field(field){
|
|
|
57
57
|
marta_result[data[0]][data[1]][parseInt(data[2])]=field.value;
|
|
58
58
|
};
|
|
59
59
|
};
|
|
60
|
+
marta_confirm();
|
|
60
61
|
};
|
|
61
62
|
|
|
62
63
|
function marta_confirm(){
|
|
@@ -84,7 +85,7 @@ function marta_confirm(){
|
|
|
84
85
|
function marta_add_data() {
|
|
85
86
|
marta_result = old_marta_Data;
|
|
86
87
|
marta_confirm_mark = false;
|
|
87
|
-
document.getElementById("marta_main_title").innerHTML =
|
|
88
|
+
document.getElementById("marta_main_title").innerHTML = marta_what;
|
|
88
89
|
if (old_marta_Data != {}){
|
|
89
90
|
try {
|
|
90
91
|
document.getElementById("marta_array").checked = old_marta_Data["options"]["collection"];}
|
|
@@ -131,6 +132,7 @@ function marta_click_work(e, iframe=false) {
|
|
|
131
132
|
e.stopPropagation();
|
|
132
133
|
e.preventDefault();
|
|
133
134
|
};
|
|
135
|
+
marta_confirm();
|
|
134
136
|
};
|
|
135
137
|
};
|
|
136
138
|
|
|
@@ -142,7 +144,7 @@ function marta_after_click(el, what) {
|
|
|
142
144
|
marta_add_field("TAG", what, marta_result["options"][what], "taggy");
|
|
143
145
|
for (var att, i = 0, atts = el.attributes, n = atts.length; i < n; i++){
|
|
144
146
|
att = atts[i];
|
|
145
|
-
if(/^[a-zA-Z0-9- _!@#$%^*();:,.?/]*$/.test(att.nodeValue) == true){
|
|
147
|
+
if(/^[a-zA-Z0-9- _!@#$%^*();:,.?/]*$/.test(att.nodeValue) == true && att.nodeName != "martaclass"){
|
|
146
148
|
if (/class/.test(att.nodeName) == true){
|
|
147
149
|
var values=att.nodeValue.split(" ");
|
|
148
150
|
marta_result[what][att.nodeName]=[];
|
|
@@ -180,4 +182,20 @@ function marta_delete_line(line) {
|
|
|
180
182
|
marta_change_field(field);
|
|
181
183
|
title.parentNode.removeChild(title);
|
|
182
184
|
staff.parentNode.removeChild(staff);
|
|
183
|
-
|
|
185
|
+
};
|
|
186
|
+
|
|
187
|
+
function marta_set_by_hand(){
|
|
188
|
+
var toClear = document.querySelector("[martaclass=marta_div]");
|
|
189
|
+
toClear.parentNode.removeChild(toClear);
|
|
190
|
+
marta_confirm_mark = true;
|
|
191
|
+
marta_result = "3";
|
|
192
|
+
};
|
|
193
|
+
|
|
194
|
+
function marta_end_loop(){
|
|
195
|
+
if (marta_room != 0){
|
|
196
|
+
var toClear = document.querySelector("[martaclass=marta_smthing]");
|
|
197
|
+
toClear.parentNode.removeChild(toClear);
|
|
198
|
+
marta_confirm_mark = true;
|
|
199
|
+
marta_result = "1";
|
|
200
|
+
}
|
|
201
|
+
};
|
data/lib/marta/data/style.css
CHANGED
|
@@ -81,7 +81,7 @@ div#marta_s_everything *, div#marta_s_everything {
|
|
|
81
81
|
empty-cells : show;
|
|
82
82
|
float : none;
|
|
83
83
|
font : normal;
|
|
84
|
-
font-family :
|
|
84
|
+
font-family : sans-serif;
|
|
85
85
|
font-size : medium;
|
|
86
86
|
font-style : normal;
|
|
87
87
|
font-variant : normal;
|
|
@@ -206,4 +206,8 @@ div#marta_s_everything input[type=checkbox]
|
|
|
206
206
|
background-repeat:no-repeat;
|
|
207
207
|
background-position: 0 0;
|
|
208
208
|
font-size:16px;
|
|
209
|
-
vertical-align:middle;
|
|
209
|
+
vertical-align:middle;
|
|
210
|
+
}
|
|
211
|
+
[martaclass=foundbymarta]
|
|
212
|
+
{animation: marta_found 6s infinite;
|
|
213
|
+
}
|
data/lib/marta/dialogs.rb
CHANGED
|
@@ -3,6 +3,7 @@ require 'marta/x_path'
|
|
|
3
3
|
require 'marta/lightning'
|
|
4
4
|
require 'marta/injector'
|
|
5
5
|
require 'marta/public_methods'
|
|
6
|
+
|
|
6
7
|
module Marta
|
|
7
8
|
|
|
8
9
|
#
|
|
@@ -28,6 +29,9 @@ module Marta
|
|
|
28
29
|
@data = data
|
|
29
30
|
@title = class_name+ '.' + method_name.to_s
|
|
30
31
|
@requestor = requestor
|
|
32
|
+
@found = 0
|
|
33
|
+
@attrs = @data['meths'][@method_name]
|
|
34
|
+
@mass = Array.new
|
|
31
35
|
end
|
|
32
36
|
|
|
33
37
|
# Standart question
|
|
@@ -35,15 +39,29 @@ module Marta
|
|
|
35
39
|
inject(what, title, data)
|
|
36
40
|
end
|
|
37
41
|
|
|
42
|
+
# Was something stated by user?
|
|
43
|
+
def attrs_exists?
|
|
44
|
+
if !@attrs.nil?
|
|
45
|
+
@attrs != Hash.new
|
|
46
|
+
else
|
|
47
|
+
false
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
38
51
|
# Main method. All the dialog logic is here
|
|
39
52
|
def dialog
|
|
40
53
|
while !finished? do
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
54
|
+
if attrs_exists?
|
|
55
|
+
@mass = get_elements_by_attrs
|
|
56
|
+
mass_highlight_turn @mass
|
|
57
|
+
end
|
|
58
|
+
@result = ask_for_elements
|
|
59
|
+
if @result.class == Hash
|
|
60
|
+
@attrs = @result
|
|
61
|
+
end
|
|
62
|
+
mass_highlight_turn(@mass, false)
|
|
46
63
|
end
|
|
64
|
+
|
|
47
65
|
if @result == '1'
|
|
48
66
|
standart_meth_merge
|
|
49
67
|
else
|
|
@@ -53,7 +71,7 @@ module Marta
|
|
|
53
71
|
|
|
54
72
|
# Asking: "What are you looking for?"
|
|
55
73
|
def ask_for_elements
|
|
56
|
-
ask 'element', @title, @
|
|
74
|
+
ask 'element', "Found #{@found} elements for #{@title}", @attrs
|
|
57
75
|
end
|
|
58
76
|
|
|
59
77
|
# Creating data to save when it is a basically defined element
|
|
@@ -74,8 +92,14 @@ module Marta
|
|
|
74
92
|
|
|
75
93
|
# Finding out what was selected
|
|
76
94
|
def get_elements_by_attrs
|
|
77
|
-
|
|
78
|
-
|
|
95
|
+
if @attrs['options']['xpath'].nil?
|
|
96
|
+
xpath = XPathFactory.new(@attrs, @requestor).generate_xpath
|
|
97
|
+
else
|
|
98
|
+
xpath = @attrs['options']['xpath']
|
|
99
|
+
end
|
|
100
|
+
result = engine.elements(xpath: xpath)
|
|
101
|
+
@found = result.length
|
|
102
|
+
result
|
|
79
103
|
end
|
|
80
104
|
|
|
81
105
|
# Asking: "Are you sure?"
|
|
@@ -97,13 +121,27 @@ module Marta
|
|
|
97
121
|
if @result == '1'
|
|
98
122
|
true
|
|
99
123
|
elsif @result == '3'
|
|
100
|
-
|
|
101
|
-
(@result != '2') ? true : false
|
|
124
|
+
xpath_way
|
|
102
125
|
else
|
|
103
126
|
false
|
|
104
127
|
end
|
|
105
128
|
end
|
|
106
129
|
|
|
130
|
+
# When user selects xpath way. Marta is doing some work before finish
|
|
131
|
+
def xpath_way
|
|
132
|
+
@result = ask_xpath
|
|
133
|
+
if @result == '2'
|
|
134
|
+
false
|
|
135
|
+
else
|
|
136
|
+
@attrs['options'] = @result
|
|
137
|
+
@mass = get_elements_by_attrs
|
|
138
|
+
mass_highlight_turn @mass
|
|
139
|
+
@result = ask_confirmation
|
|
140
|
+
mass_highlight_turn(@mass, false)
|
|
141
|
+
finished?
|
|
142
|
+
end
|
|
143
|
+
end
|
|
144
|
+
|
|
107
145
|
# Forming of an empty hash for storing element info
|
|
108
146
|
def temp_hash
|
|
109
147
|
temp, temp['meths'], temp['meths'][@method_name],
|
data/lib/marta/lightning.rb
CHANGED
|
@@ -7,30 +7,25 @@ module Marta
|
|
|
7
7
|
|
|
8
8
|
# We can highlight an element
|
|
9
9
|
def highlight(element)
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
" arguments[2])", element, "style",
|
|
13
|
-
"animation: marta_found 6s infinite;")
|
|
14
|
-
orig_style
|
|
10
|
+
engine.execute_script("arguments[0].setAttribute"\
|
|
11
|
+
"('martaclass','foundbymarta')", element)
|
|
15
12
|
end
|
|
16
13
|
|
|
17
14
|
# We can unhighlight an element
|
|
18
|
-
def unhighlight(element
|
|
19
|
-
engine.execute_script("arguments[0].
|
|
20
|
-
|
|
15
|
+
def unhighlight(element)
|
|
16
|
+
engine.execute_script("arguments[0].removeAttribute('martaclass')",
|
|
17
|
+
element)
|
|
21
18
|
end
|
|
22
19
|
|
|
23
20
|
# We can highlight\unhighlight tons of elements at once
|
|
24
|
-
def mass_highlight_turn(mass, turn_on = true
|
|
25
|
-
result = Array.new
|
|
21
|
+
def mass_highlight_turn(mass, turn_on = true)
|
|
26
22
|
mass.each_with_index do |element, i|
|
|
27
23
|
if turn_on
|
|
28
|
-
|
|
24
|
+
highlight element
|
|
29
25
|
else
|
|
30
|
-
unhighlight
|
|
26
|
+
unhighlight element
|
|
31
27
|
end
|
|
32
28
|
end
|
|
33
|
-
result
|
|
34
29
|
end
|
|
35
30
|
end
|
|
36
31
|
end
|
data/lib/marta/version.rb
CHANGED
data/marta.gemspec
CHANGED
|
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
|
|
|
10
10
|
spec.email = ["s_seleznev_qa@hotmail.com"]
|
|
11
11
|
|
|
12
12
|
spec.summary = "That will be an another one watir-webdriver wrap"
|
|
13
|
-
spec.description = "
|
|
13
|
+
spec.description = "Element location tool for your watir autotests"
|
|
14
14
|
spec.homepage = "https://github.com/sseleznevqa/marta"
|
|
15
15
|
spec.license = "MIT"
|
|
16
16
|
|
|
@@ -22,6 +22,7 @@ Gem::Specification.new do |spec|
|
|
|
22
22
|
spec.add_development_dependency "bundler"
|
|
23
23
|
spec.add_development_dependency "rake"
|
|
24
24
|
spec.add_development_dependency "rspec"
|
|
25
|
+
spec.add_development_dependency "simplecov"
|
|
25
26
|
spec.add_dependency "watir"
|
|
26
27
|
#spec.add_dependency "fileutils"
|
|
27
28
|
spec.add_dependency "json"
|
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.
|
|
4
|
+
version: '0.28017'
|
|
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-
|
|
11
|
+
date: 2017-07-02 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
@@ -52,6 +52,20 @@ dependencies:
|
|
|
52
52
|
- - ">="
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
54
|
version: '0'
|
|
55
|
+
- !ruby/object:Gem::Dependency
|
|
56
|
+
name: simplecov
|
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
|
58
|
+
requirements:
|
|
59
|
+
- - ">="
|
|
60
|
+
- !ruby/object:Gem::Version
|
|
61
|
+
version: '0'
|
|
62
|
+
type: :development
|
|
63
|
+
prerelease: false
|
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
+
requirements:
|
|
66
|
+
- - ">="
|
|
67
|
+
- !ruby/object:Gem::Version
|
|
68
|
+
version: '0'
|
|
55
69
|
- !ruby/object:Gem::Dependency
|
|
56
70
|
name: watir
|
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -80,7 +94,7 @@ dependencies:
|
|
|
80
94
|
- - ">="
|
|
81
95
|
- !ruby/object:Gem::Version
|
|
82
96
|
version: '0'
|
|
83
|
-
description:
|
|
97
|
+
description: Element location tool for your watir autotests
|
|
84
98
|
email:
|
|
85
99
|
- s_seleznev_qa@hotmail.com
|
|
86
100
|
executables: []
|