skeleton-ui 0.0.12 → 0.1.0

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
  SHA256:
3
- metadata.gz: 891bf63615193ce8ef6a14233e71b66072cd40a5a02d24f91317449801cf4d21
4
- data.tar.gz: de19f4da0622a3b4327e6e7082ccf0d157eaff2c10cea7c9dd7afe929a71dff9
3
+ metadata.gz: 0ee835f042191dc5d9b1f8965207c85343d4f447e84e4031d253e8a5693cff84
4
+ data.tar.gz: 43cf9b138e3504bb241c904f83b7476f7463e9bedeebf6cb3556d89b2dbaf2c3
5
5
  SHA512:
6
- metadata.gz: 49de780e374009f06e032f10f015210291f4e1f429843b74bf6a5b0546be5d704d3e64cade330ddf1a04da0bc7550d795930e722cb98379e3754b7d21c798090
7
- data.tar.gz: 99d89de858907df493d88b90132f7cb917a4bf85ab77117af425b6990e736fb65c5f4c8d55ccfef54d58a33ff06abbe815111e689831722a472f3ebd4f8fc539
6
+ metadata.gz: f41d1362e26ef0c6ae9a01977ec6596b34c3d98015cfe8486da6634f1e22a056cb176985862d1a4f54faeb603cd93d781ba1bcf787679204cc52b17852965772
7
+ data.tar.gz: a2fca13369b1ca1f0c767a6e3460fb4c04fdd4e21418e9ff0f1b21a759653953eba68a34c4703371775025a3158f02a85cf69ab5b8c9c899387f7fcd09074e60
data/README.md CHANGED
@@ -13,11 +13,15 @@ Prerequisites:
13
13
  #### iOS
14
14
  - Install [Xcode](https://developer.apple.com/xcode/download/).
15
15
  - Install [Xcode Command Line Tools](http://railsapps.github.io/xcode-command-line-tools.html).
16
- - [Setting up Skeleton for working with iOS real devices](https://github.com/forqa/skeleton/blob/master/docs/real-ios-device-config.md)
16
+ - For real devices you need to sign skeleton in xcodeproj ([like appium](https://github.com/appium/appium-xcuitest-driver/blob/master/docs/real-device-config.md)).
17
17
 
18
18
  Installation:
19
19
  ------
20
20
  $ gem install skeleton-ui
21
+
22
+ Precondition:
23
+ ------
24
+ $ skeleton server
21
25
 
22
26
  Usage:
23
27
  ------
@@ -29,8 +33,9 @@ Usage:
29
33
 
30
34
  COMMANDS:
31
35
 
32
- clear Clear user cache
33
- scan Make screen objects
36
+ server Run skeleton web-server
37
+ clear Clear user cache
38
+ scan Make screen objects
34
39
 
35
40
  GLOBAL OPTIONS:
36
41
 
@@ -65,6 +70,17 @@ Usage:
65
70
  EXAMPLES:
66
71
 
67
72
  skeleton clear
73
+
74
+ $ skeleton server --help
75
+
76
+ EXAMPLES:
77
+
78
+ skeleton clear
79
+
80
+ Docs:
81
+ ------
82
+
83
+ - [Setting up Skeleton for working with iOS real devices](https://github.com/forqa/skeleton/blob/master/docs/real-ios-device-config.md)
68
84
 
69
85
  ## License
70
86
 
data/bin/skeleton CHANGED
@@ -14,7 +14,7 @@ module Skeleton
14
14
  c.option '-p', '--platform PLATFORM', String, 'Set device platform: android or ios'
15
15
  c.option '-u', '--udid UDID', String, 'Set device UDID'
16
16
  c.option '-b', '--bundle BUNDLE', String, 'Set Bundle ID for your app [required for iOS]'
17
- c.action do |args, options|
17
+ c.action do |_args, options|
18
18
  Skeleton.new(options).run
19
19
  end
20
20
  end
@@ -23,10 +23,19 @@ module Skeleton
23
23
  c.syntax = 'skeleton clear'
24
24
  c.description = 'Clear user cache'
25
25
  c.example 'description', 'skeleton clear'
26
- c.action do |args, options|
27
- FileUtils.rm_rf(Base::PAGE_OBJECTS_FOLDER)
28
- FileUtils.rm_rf(Base::ATTACHMENTS_FOLDER)
29
- Base.new.log.info("Successfully clear user cache")
26
+ c.action do |_args, _options|
27
+ base = Base.new
28
+ base.clear
29
+ base.log.info("Successfully clear user cache")
30
30
  end
31
31
  end
32
+
33
+ command :server do |c|
34
+ c.syntax = 'skeleton server'
35
+ c.description = 'Run skeleton web-server'
36
+ c.example 'description', 'skeleton server'
37
+ c.action do |_args, _options|
38
+ system('cd ../html/ && ruby server.rb')
39
+ end
40
+ end
32
41
  end
data/html/index.css ADDED
@@ -0,0 +1,27 @@
1
+ .container-fluid {
2
+ max-width: 1240px;
3
+ }
4
+
5
+ .aside {
6
+ position: relative;
7
+ height: 100%;
8
+ }
9
+
10
+ .aside__img {
11
+ position: absolute;
12
+ left: 0;
13
+ right: 0;
14
+ bottom: 0;
15
+ top: 0;
16
+ -webkit-background-size: cover;
17
+ -o-background-size: cover;
18
+ background-size: cover;
19
+ background-position: center;
20
+ background-repeat: no-repeat;
21
+ }
22
+
23
+ .content {
24
+ background-color: #FFF;
25
+ padding: 3rem;
26
+ border: 1px solid #eee;
27
+ }
data/html/index.html ADDED
@@ -0,0 +1,34 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <title>Skeleton</title>
5
+ <meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
7
+ <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css" integrity="sha384-9gVQ4dYFwwWSjIDZnLEWnxCjeSWFphJiwGPXr1jddIhOegiu1FwO5qRGvFXOdJZ4" crossorigin="anonymous">
8
+ <link rel="stylesheet" type="text/css" href="/index.css"/>
9
+ </head>
10
+ <body class="bg-light">
11
+ <div class="container-fluid">
12
+ <div class="py-5 text-center">
13
+ <img class="d-block mx-auto mb-4" src="https://getbootstrap.com/assets/brand/bootstrap-solid.svg" alt="" width="72" height="72">
14
+ <h2>Skeleton</h2>
15
+ </div>
16
+ <div class="row" style="min-height: 300px;">
17
+ <div class="col-md-8">
18
+ <h2>Get it:</h2>
19
+ <a href="ruby.html">Ruby</a>
20
+ <br>
21
+ <a href="java.html">Java</a>
22
+ </div>
23
+ </div>
24
+ <footer class="my-5 pt-5 text-muted text-center text-small">
25
+ <p class="mb-1">© 2018-2033 forqa</p>
26
+ <ul class="list-inline">
27
+ <li class="list-inline-item"><a href="#">Privacy</a></li>
28
+ <li class="list-inline-item"><a href="#">Terms</a></li>
29
+ <li class="list-inline-item"><a href="#">Support</a></li>
30
+ </ul>
31
+ </footer>
32
+ </div>
33
+ </body>
34
+ </html>
data/html/java.html ADDED
@@ -0,0 +1,141 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <title>Skeleton</title>
5
+ <meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
7
+ <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css" integrity="sha384-9gVQ4dYFwwWSjIDZnLEWnxCjeSWFphJiwGPXr1jddIhOegiu1FwO5qRGvFXOdJZ4" crossorigin="anonymous">
8
+ <link rel="stylesheet" type="text/css" href="/index.css"/>
9
+ </head>
10
+ <body class="bg-light">
11
+ <div class="container-fluid">
12
+ <div class="py-5 text-center">
13
+ <img class="d-block mx-auto mb-4" src="https://getbootstrap.com/assets/brand/bootstrap-solid.svg" alt="" width="72" height="72">
14
+ <h2>Skeleton</h2>
15
+ </div>
16
+ <div class="row" style="min-height: 666px;">
17
+ <div class="col-md-4 mb-4">
18
+ <div class="aside" style="max-height: 666px;">
19
+ <div class="aside__img" style="background-image: url(screenshot.png);"></div>
20
+ </div>
21
+ </div>
22
+ <div class="col-md-8">
23
+ <h4 class="mb-3">PageObjects:</h4>
24
+ <div class="content" id="content">
25
+ <pre><code>By myTargetDemo() {
26
+ return MobileBy.AccessibilityId("myTarget Demo");
27
+ }
28
+
29
+ By other1() {
30
+ return MobileBy.iOSNsPredicateString("label like 'myTarget Demo'");
31
+ }
32
+
33
+ By staticText2() {
34
+ return MobileBy.iOSNsPredicateString("label like '320x50 and 300x250 banners'");
35
+ }
36
+
37
+ By staticText3() {
38
+ return MobileBy.iOSNsPredicateString("label like 'Fullscreen banners'");
39
+ }
40
+
41
+ By staticText4() {
42
+ return MobileBy.iOSNsPredicateString("label like 'Banners'");
43
+ }
44
+
45
+ By staticText5() {
46
+ return MobileBy.iOSNsPredicateString("label like 'Interstitial Ads'");
47
+ }
48
+
49
+ By staticText6() {
50
+ return MobileBy.iOSNsPredicateString("label like 'Advertisement inside app'");
51
+ }
52
+
53
+ By staticText7() {
54
+ return MobileBy.iOSNsPredicateString("label like 'Instream video ads'");
55
+ }
56
+
57
+ By staticText8() {
58
+ return MobileBy.iOSNsPredicateString("label like 'Native Ads'");
59
+ }
60
+
61
+ By staticText9() {
62
+ return MobileBy.iOSNsPredicateString("label like 'Instream Ads'");
63
+ }
64
+
65
+ By staticText10() {
66
+ return MobileBy.iOSNsPredicateString("label like 'Insert your slotId and ad type'");
67
+ }
68
+
69
+ By staticText11() {
70
+ return MobileBy.iOSNsPredicateString("label like 'Ad unit'");
71
+ }
72
+
73
+ </code></pre>
74
+ </div>
75
+ <br>
76
+ <h4 class="mb-3">ElementsTree:</h4>
77
+ <div class="content" id="content">
78
+ <pre><code>
79
+ t = 1.48s Snapshot accessibility hierarchy for app with pid 38785
80
+ t = 1.49s Snapshot accessibility hierarchy for app with pid 38785
81
+ Attributes: Application, 0x6000003801a0, pid: 38785, {{0.0, 0.0}, {414.0, 736.0}}, label: 'myTargetDemo'
82
+ Element subtree:
83
+ →Application, 0x6000003801a0, pid: 38785, {{0.0, 0.0}, {414.0, 736.0}}, label: 'myTargetDemo'
84
+ Window, 0x60000019bfb0, Main Window, {{0.0, 0.0}, {414.0, 736.0}}
85
+ Other, 0x60000019fbd0, traits: 8589934592, {{0.0, 0.0}, {414.0, 736.0}}
86
+ NavigationBar, 0x60000019bee0, traits: 35192962023424, {{0.0, 20.0}, {414.0, 44.0}}, identifier: 'myTarget Demo'
87
+ Other, 0x6000003809c0, traits: 8590000128, {{144.3, 31.7}, {125.7, 20.3}}, label: 'myTarget Demo'
88
+ Other, 0x60000019ff10, traits: 8589934592, {{0.0, 0.0}, {414.0, 736.0}}
89
+ Other, 0x60000019fe40, traits: 8589934592, {{0.0, 0.0}, {414.0, 736.0}}
90
+ Other, 0x600000380a90, traits: 8589934592, {{0.0, 64.0}, {414.0, 672.0}}
91
+ Table, 0x600000380b60, traits: 35192962023424, {{0.0, 64.0}, {414.0, 672.0}}
92
+ Other, 0x600000380c30, traits: 8589934592, {{0.0, -104.0}, {414.0, 0.0}}
93
+ Cell, 0x600000380d00, traits: 8589934592, {{0.0, -104.0}, {414.0, 280.0}}
94
+ StaticText, 0x600000380dd0, traits: 8589934656, {{16.0, 129.0}, {108.3, 32.3}}, label: '320x50 and 300x250 banners'
95
+ StaticText, 0x604000391440, traits: 8589934656, {{218.0, 129.0}, {119.3, 16.3}}, label: 'Fullscreen banners'
96
+ StaticText, 0x60400019c3c0, traits: 8589934656, {{16.0, 102.0}, {72.3, 21.0}}, label: 'Banners'
97
+ StaticText, 0x60400019c2f0, traits: 8589934656, {{218.0, 102.0}, {124.7, 21.0}}, label: 'Interstitial Ads'
98
+ Cell, 0x60400019c220, traits: 8589934592, {{0.0, 176.0}, {414.0, 280.0}}
99
+ StaticText, 0x60400038ee10, traits: 8589934656, {{16.0, 409.0}, {134.0, 32.3}}, label: 'Advertisement inside app's content'
100
+ StaticText, 0x60400038eee0, traits: 8589934656, {{218.0, 409.0}, {118.3, 16.3}}, label: 'Instream video ads'
101
+ StaticText, 0x60400019c490, traits: 8589934656, {{16.0, 382.0}, {92.7, 21.0}}, label: 'Native Ads'
102
+ StaticText, 0x60400038ec70, traits: 8589934656, {{218.0, 382.0}, {113.7, 21.0}}, label: 'Instream Ads'
103
+ Cell, 0x60400038e860, traits: 8589934592, {{0.0, 456.0}, {414.0, 280.0}}
104
+ StaticText, 0x60400038ed40, traits: 8589934656, {{16.0, 689.0}, {134.7, 32.3}}, label: 'Insert your slotId and ad type'
105
+ StaticText, 0x604000390f60, traits: 8589934656, {{16.0, 662.0}, {62.0, 21.0}}, label: 'Ad unit'
106
+ Other, 0x604000390e90, traits: 8589934592, {{0.0, 736.0}, {414.0, 0.0}}
107
+ Window, 0x604000390dc0, {{0.0, 0.0}, {414.0, 736.0}}
108
+ Other, 0x604000390c20, traits: 8589934592, {{0.0, 0.0}, {414.0, 736.0}}
109
+ Other, 0x604000390cf0, traits: 8589934592, {{0.0, 736.0}, {414.0, 226.0}}
110
+ Window, 0x604000390b50, {{0.0, 0.0}, {414.0, 736.0}}
111
+ StatusBar, 0x6040003909b0, {{0.0, 0.0}, {414.0, 20.0}}
112
+ Other, 0x60400038f630, {{0.0, 0.0}, {414.0, 20.0}}
113
+ Other, 0x6040003923b0, {{0.0, 0.0}, {414.0, 20.0}}
114
+ Other, 0x6040003922e0, traits: 8388608, {{6.0, 0.0}, {39.0, 20.0}}
115
+ Other, 0x604000392b00, traits: 8388608, {{50.0, 0.0}, {14.0, 20.0}}, label: '3 of 3 Wi-Fi bars', value: SSID
116
+ Other, 0x604000392890, traits: 8389120, {{184.0, 0.0}, {50.0, 20.0}}, label: '5:58 PM'
117
+ Other, 0x604000391d30, traits: 8388608, {{374.0, 0.0}, {35.0, 20.0}}, label: '-100% battery power'
118
+ Path to element:
119
+ →Application, 0x6000003801a0, pid: 38785, {{0.0, 0.0}, {414.0, 736.0}}, label: 'myTargetDemo'
120
+ Query chain:
121
+ →Find: Application "ru.mail.adman" 0x6000000ba820
122
+ Output: {
123
+ Application, 0x6000003801a0, pid: 38785, {{0.0, 0.0}, {414.0, 736.0}}, label: 'myTargetDemo'
124
+ }
125
+
126
+
127
+ </code></pre>
128
+ </div>
129
+ </div>
130
+ </div>
131
+ <footer class="my-5 pt-5 text-muted text-center text-small">
132
+ <p class="mb-1">© 2018-2033 forqa</p>
133
+ <ul class="list-inline">
134
+ <li class="list-inline-item"><a href="#">Privacy</a></li>
135
+ <li class="list-inline-item"><a href="#">Terms</a></li>
136
+ <li class="list-inline-item"><a href="#">Support</a></li>
137
+ </ul>
138
+ </footer>
139
+ </div>
140
+ </body>
141
+ </html>
data/html/ruby.html ADDED
@@ -0,0 +1,141 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <title>Skeleton</title>
5
+ <meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
7
+ <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css" integrity="sha384-9gVQ4dYFwwWSjIDZnLEWnxCjeSWFphJiwGPXr1jddIhOegiu1FwO5qRGvFXOdJZ4" crossorigin="anonymous">
8
+ <link rel="stylesheet" type="text/css" href="/index.css"/>
9
+ </head>
10
+ <body class="bg-light">
11
+ <div class="container-fluid">
12
+ <div class="py-5 text-center">
13
+ <img class="d-block mx-auto mb-4" src="https://getbootstrap.com/assets/brand/bootstrap-solid.svg" alt="" width="72" height="72">
14
+ <h2>Skeleton</h2>
15
+ </div>
16
+ <div class="row" style="min-height: 666px;">
17
+ <div class="col-md-4 mb-4">
18
+ <div class="aside" style="max-height: 666px;">
19
+ <div class="aside__img" style="background-image: url(screenshot.png);"></div>
20
+ </div>
21
+ </div>
22
+ <div class="col-md-8">
23
+ <h4 class="mb-3">PageObjects:</h4>
24
+ <div class="content" id="content">
25
+ <pre><code>def my_target_demo
26
+ return :accessibility_id, "myTarget Demo"
27
+ end
28
+
29
+ def other1
30
+ return :predicate, "label like 'myTarget Demo'"
31
+ end
32
+
33
+ def static_text2
34
+ return :predicate, "label like '320x50 and 300x250 banners'"
35
+ end
36
+
37
+ def static_text3
38
+ return :predicate, "label like 'Fullscreen banners'"
39
+ end
40
+
41
+ def static_text4
42
+ return :predicate, "label like 'Banners'"
43
+ end
44
+
45
+ def static_text5
46
+ return :predicate, "label like 'Interstitial Ads'"
47
+ end
48
+
49
+ def static_text6
50
+ return :predicate, "label like 'Advertisement inside app'"
51
+ end
52
+
53
+ def static_text7
54
+ return :predicate, "label like 'Instream video ads'"
55
+ end
56
+
57
+ def static_text8
58
+ return :predicate, "label like 'Native Ads'"
59
+ end
60
+
61
+ def static_text9
62
+ return :predicate, "label like 'Instream Ads'"
63
+ end
64
+
65
+ def static_text10
66
+ return :predicate, "label like 'Insert your slotId and ad type'"
67
+ end
68
+
69
+ def static_text11
70
+ return :predicate, "label like 'Ad unit'"
71
+ end
72
+
73
+ </code></pre>
74
+ </div>
75
+ <br>
76
+ <h4 class="mb-3">ElementsTree:</h4>
77
+ <div class="content" id="content">
78
+ <pre><code>
79
+ t = 1.48s Snapshot accessibility hierarchy for app with pid 38785
80
+ t = 1.49s Snapshot accessibility hierarchy for app with pid 38785
81
+ Attributes: Application, 0x6000003801a0, pid: 38785, {{0.0, 0.0}, {414.0, 736.0}}, label: 'myTargetDemo'
82
+ Element subtree:
83
+ →Application, 0x6000003801a0, pid: 38785, {{0.0, 0.0}, {414.0, 736.0}}, label: 'myTargetDemo'
84
+ Window, 0x60000019bfb0, Main Window, {{0.0, 0.0}, {414.0, 736.0}}
85
+ Other, 0x60000019fbd0, traits: 8589934592, {{0.0, 0.0}, {414.0, 736.0}}
86
+ NavigationBar, 0x60000019bee0, traits: 35192962023424, {{0.0, 20.0}, {414.0, 44.0}}, identifier: 'myTarget Demo'
87
+ Other, 0x6000003809c0, traits: 8590000128, {{144.3, 31.7}, {125.7, 20.3}}, label: 'myTarget Demo'
88
+ Other, 0x60000019ff10, traits: 8589934592, {{0.0, 0.0}, {414.0, 736.0}}
89
+ Other, 0x60000019fe40, traits: 8589934592, {{0.0, 0.0}, {414.0, 736.0}}
90
+ Other, 0x600000380a90, traits: 8589934592, {{0.0, 64.0}, {414.0, 672.0}}
91
+ Table, 0x600000380b60, traits: 35192962023424, {{0.0, 64.0}, {414.0, 672.0}}
92
+ Other, 0x600000380c30, traits: 8589934592, {{0.0, -104.0}, {414.0, 0.0}}
93
+ Cell, 0x600000380d00, traits: 8589934592, {{0.0, -104.0}, {414.0, 280.0}}
94
+ StaticText, 0x600000380dd0, traits: 8589934656, {{16.0, 129.0}, {108.3, 32.3}}, label: '320x50 and 300x250 banners'
95
+ StaticText, 0x604000391440, traits: 8589934656, {{218.0, 129.0}, {119.3, 16.3}}, label: 'Fullscreen banners'
96
+ StaticText, 0x60400019c3c0, traits: 8589934656, {{16.0, 102.0}, {72.3, 21.0}}, label: 'Banners'
97
+ StaticText, 0x60400019c2f0, traits: 8589934656, {{218.0, 102.0}, {124.7, 21.0}}, label: 'Interstitial Ads'
98
+ Cell, 0x60400019c220, traits: 8589934592, {{0.0, 176.0}, {414.0, 280.0}}
99
+ StaticText, 0x60400038ee10, traits: 8589934656, {{16.0, 409.0}, {134.0, 32.3}}, label: 'Advertisement inside app's content'
100
+ StaticText, 0x60400038eee0, traits: 8589934656, {{218.0, 409.0}, {118.3, 16.3}}, label: 'Instream video ads'
101
+ StaticText, 0x60400019c490, traits: 8589934656, {{16.0, 382.0}, {92.7, 21.0}}, label: 'Native Ads'
102
+ StaticText, 0x60400038ec70, traits: 8589934656, {{218.0, 382.0}, {113.7, 21.0}}, label: 'Instream Ads'
103
+ Cell, 0x60400038e860, traits: 8589934592, {{0.0, 456.0}, {414.0, 280.0}}
104
+ StaticText, 0x60400038ed40, traits: 8589934656, {{16.0, 689.0}, {134.7, 32.3}}, label: 'Insert your slotId and ad type'
105
+ StaticText, 0x604000390f60, traits: 8589934656, {{16.0, 662.0}, {62.0, 21.0}}, label: 'Ad unit'
106
+ Other, 0x604000390e90, traits: 8589934592, {{0.0, 736.0}, {414.0, 0.0}}
107
+ Window, 0x604000390dc0, {{0.0, 0.0}, {414.0, 736.0}}
108
+ Other, 0x604000390c20, traits: 8589934592, {{0.0, 0.0}, {414.0, 736.0}}
109
+ Other, 0x604000390cf0, traits: 8589934592, {{0.0, 736.0}, {414.0, 226.0}}
110
+ Window, 0x604000390b50, {{0.0, 0.0}, {414.0, 736.0}}
111
+ StatusBar, 0x6040003909b0, {{0.0, 0.0}, {414.0, 20.0}}
112
+ Other, 0x60400038f630, {{0.0, 0.0}, {414.0, 20.0}}
113
+ Other, 0x6040003923b0, {{0.0, 0.0}, {414.0, 20.0}}
114
+ Other, 0x6040003922e0, traits: 8388608, {{6.0, 0.0}, {39.0, 20.0}}
115
+ Other, 0x604000392b00, traits: 8388608, {{50.0, 0.0}, {14.0, 20.0}}, label: '3 of 3 Wi-Fi bars', value: SSID
116
+ Other, 0x604000392890, traits: 8389120, {{184.0, 0.0}, {50.0, 20.0}}, label: '5:58 PM'
117
+ Other, 0x604000391d30, traits: 8388608, {{374.0, 0.0}, {35.0, 20.0}}, label: '-100% battery power'
118
+ Path to element:
119
+ →Application, 0x6000003801a0, pid: 38785, {{0.0, 0.0}, {414.0, 736.0}}, label: 'myTargetDemo'
120
+ Query chain:
121
+ →Find: Application "ru.mail.adman" 0x6000000ba820
122
+ Output: {
123
+ Application, 0x6000003801a0, pid: 38785, {{0.0, 0.0}, {414.0, 736.0}}, label: 'myTargetDemo'
124
+ }
125
+
126
+
127
+ </code></pre>
128
+ </div>
129
+ </div>
130
+ </div>
131
+ <footer class="my-5 pt-5 text-muted text-center text-small">
132
+ <p class="mb-1">© 2018-2033 forqa</p>
133
+ <ul class="list-inline">
134
+ <li class="list-inline-item"><a href="#">Privacy</a></li>
135
+ <li class="list-inline-item"><a href="#">Terms</a></li>
136
+ <li class="list-inline-item"><a href="#">Support</a></li>
137
+ </ul>
138
+ </footer>
139
+ </div>
140
+ </body>
141
+ </html>
data/html/server.rb ADDED
@@ -0,0 +1,9 @@
1
+ require 'sinatra'
2
+
3
+ get '/:file' do
4
+ send_file params[:file]
5
+ end
6
+
7
+ post '/:file' do
8
+ send_file params[:file]
9
+ end
@@ -0,0 +1,44 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <title>Skeleton</title>
5
+ <meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
7
+ <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css" integrity="sha384-9gVQ4dYFwwWSjIDZnLEWnxCjeSWFphJiwGPXr1jddIhOegiu1FwO5qRGvFXOdJZ4" crossorigin="anonymous">
8
+ <link rel="stylesheet" type="text/css" href="/index.css"/>
9
+ </head>
10
+ <body class="bg-light">
11
+ <div class="container-fluid">
12
+ <div class="py-5 text-center">
13
+ <img class="d-block mx-auto mb-4" src="https://getbootstrap.com/assets/brand/bootstrap-solid.svg" alt="" width="72" height="72">
14
+ <h2>Skeleton</h2>
15
+ </div>
16
+ <div class="row" style="min-height: 666px;">
17
+ <div class="col-md-4 mb-4">
18
+ <div class="aside" style="max-height: 666px;">
19
+ <div class="aside__img" style="background-image: url(screenshot.png);"></div>
20
+ </div>
21
+ </div>
22
+ <div class="col-md-8">
23
+ <h4 class="mb-3">PageObjects:</h4>
24
+ <div class="content" id="content">
25
+ <pre><code><%= @pageobject %></code></pre>
26
+ </div>
27
+ <br>
28
+ <h4 class="mb-3">ElementsTree:</h4>
29
+ <div class="content" id="content">
30
+ <pre><code><%= @elements_tree %></code></pre>
31
+ </div>
32
+ </div>
33
+ </div>
34
+ <footer class="my-5 pt-5 text-muted text-center text-small">
35
+ <p class="mb-1">© 2018-2033 forqa</p>
36
+ <ul class="list-inline">
37
+ <li class="list-inline-item"><a href="#">Privacy</a></li>
38
+ <li class="list-inline-item"><a href="#">Terms</a></li>
39
+ <li class="list-inline-item"><a href="#">Support</a></li>
40
+ </ul>
41
+ </footer>
42
+ </div>
43
+ </body>
44
+ </html>
data/lib/skeleton.rb CHANGED
@@ -1,3 +1,4 @@
1
+ require 'erb'
1
2
  require 'fileutils'
2
3
  require 'nokogiri'
3
4
  require 'logger'
@@ -9,6 +10,7 @@ require_relative 'skeleton/android'
9
10
 
10
11
  module Skeleton
11
12
  class Skeleton
13
+ include Language
12
14
 
13
15
  attr_accessor :platform, :udid, :bundle_id
14
16
 
@@ -42,10 +44,26 @@ module Skeleton
42
44
  end
43
45
 
44
46
  def run
45
- @driver.precondition
46
- @driver.skeletoner
47
- @driver.log.info("#{Base::PAGE_OBJECTS_FOLDER}/. 😍")
48
- end
47
+ @driver.clear
48
+ @driver.precondition
49
+ @driver.skeletoner
50
+ fill_html
51
+ @driver.log.info('Get it: http://localhost:4567/index.html 😍')
52
+ end
53
+
54
+ def fill_html
55
+ languages = ['ruby', 'java']
56
+ languages.each do |lang|
57
+ type = language_type(lang: lang)
58
+ @pageobject = File.read(Dir["#{Base::PAGE_OBJECTS_FOLDER}/*.#{type}"].first)
59
+ @elements_tree = File.read(Dir["#{Base::PAGE_OBJECTS_FOLDER}/*.xml"].first)
60
+ screenshot = Dir["#{Base::ATTACHMENTS_FOLDER}/*.png"].first
61
+ FileUtils.cp_r(screenshot, "../html/screenshot.png")
62
+ template = File.read('../html/template.html.erb')
63
+ result = ERB.new(template).result(binding)
64
+ File.open("../html/#{lang}.html", 'w+') { |f| f.write(result) }
65
+ end
66
+ end
49
67
 
50
68
  def ios?
51
69
  @platform == 'ios'
data/lib/skeleton/base.rb CHANGED
@@ -24,6 +24,11 @@ class Base
24
24
  def skeletoner
25
25
  end
26
26
 
27
+ def clear
28
+ FileUtils.rm_rf(Base::PAGE_OBJECTS_FOLDER)
29
+ FileUtils.rm_rf(Base::ATTACHMENTS_FOLDER)
30
+ end
31
+
27
32
  protected
28
33
 
29
34
  def save(code:, format: 'xml')
data/lib/skeleton/ios.rb CHANGED
@@ -106,8 +106,12 @@ class IOS < Base
106
106
  @page_source.slice!(start_grep)
107
107
  @page_source.slice!(end_grep)
108
108
  if @page_source.empty?
109
- log.fatal("Something went wrong. Try to sign Skeleton " \
110
- "in #{XCODEPROJ_FOLDER} and to trust it in the iOS settings.")
109
+ log.fatal(
110
+ "Something went wrong.\n" \
111
+ "1. Try to sign Skeleton in #{XCODEPROJ_FOLDER}\n" \
112
+ "2. Check in the iOS settings that Skeleton is trust developer.\n" \
113
+ '3. Check your app bundle_id'
114
+ )
111
115
  raise
112
116
  end
113
117
  log.info('Successfully getting Screen Source Tree 🔥')
@@ -20,4 +20,17 @@ module Language
20
20
 
21
21
  RUBY
22
22
  end
23
+
24
+ def language_type(lang:)
25
+ case lang
26
+ when 'ruby'
27
+ RUBY
28
+ when 'java'
29
+ JAVA
30
+ when 'python'
31
+ PYTHON
32
+ else
33
+ "I haven't this language"
34
+ end
35
+ end
23
36
  end
@@ -1,4 +1,4 @@
1
1
  module Skeleton
2
- VERSION = '0.0.12'
2
+ VERSION = '0.1.0'
3
3
  GEM_NAME = 'skeleton-ui'
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: skeleton-ui
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.12
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - a.alterpesotskiy
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-04-29 00:00:00.000000000 Z
11
+ date: 2018-07-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -131,6 +131,12 @@ files:
131
131
  - docs/real-ios-device-config.md
132
132
  - docs/sign_xcproj.png
133
133
  - docs/untrusted-dev.png
134
+ - html/index.css
135
+ - html/index.html
136
+ - html/java.html
137
+ - html/ruby.html
138
+ - html/server.rb
139
+ - html/template.html.erb
134
140
  - lib/skeleton.rb
135
141
  - lib/skeleton/android.rb
136
142
  - lib/skeleton/base.rb