flights_gui_henry_tests 1.8.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (143) hide show
  1. checksums.yaml +15 -0
  2. data/Gemfile +3 -0
  3. data/features/data/home-offers-config.csv +883 -0
  4. data/features/data/host.yml +72 -0
  5. data/features/data/miles.yml +216 -0
  6. data/features/data/search.yml +27 -0
  7. data/features/data/sites.yml +39 -0
  8. data/features/data/tag_microsoft.yml +68 -0
  9. data/features/step_definitions/checkout/agencia_steps.rb +6 -0
  10. data/features/step_definitions/checkout/chat_steps.rb +43 -0
  11. data/features/step_definitions/checkout/checkout_steps.rb +144 -0
  12. data/features/step_definitions/checkout/cupones_steps.rb +26 -0
  13. data/features/step_definitions/checkout/error_messages.rb +251 -0
  14. data/features/step_definitions/checkout/seguros_steps.rb +78 -0
  15. data/features/step_definitions/checkout/thanks_steps.rb +75 -0
  16. data/features/step_definitions/content/contents_steps.rb +140 -0
  17. data/features/step_definitions/desambiguation/disambiguation_airports_steps.rb +73 -0
  18. data/features/step_definitions/desambiguation/disambiguation_city_steps.rb +43 -0
  19. data/features/step_definitions/filter/filters_airlines.rb +38 -0
  20. data/features/step_definitions/filter/filters_airports_steps.rb +31 -0
  21. data/features/step_definitions/filter/filters_price_steps.rb +87 -0
  22. data/features/step_definitions/filter/filters_stops_steps.rb +44 -0
  23. data/features/step_definitions/filter/filters_time_steps.rb +143 -0
  24. data/features/step_definitions/filter/matrix_steps.rb +249 -0
  25. data/features/step_definitions/landing/landing_checkout_steps.rb +45 -0
  26. data/features/step_definitions/landing/landing_filters_steps.rb +17 -0
  27. data/features/step_definitions/landing/landing_home_alerts_steps.rb +21 -0
  28. data/features/step_definitions/landing/landing_home_steps.rb +82 -0
  29. data/features/step_definitions/landing/landing_long_tail.rb +58 -0
  30. data/features/step_definitions/landing/landing_negative_steps.rb +127 -0
  31. data/features/step_definitions/landing/landing_passenger_review_steps.rb +8 -0
  32. data/features/step_definitions/landing/landing_steps.rb +325 -0
  33. data/features/step_definitions/orders/orders.rb +67 -0
  34. data/features/step_definitions/others/advancedgui_steps.rb +28 -0
  35. data/features/step_definitions/others/advancednogui_steps.rb +34 -0
  36. data/features/step_definitions/others/anticipatedsearch_steps.rb +13 -0
  37. data/features/step_definitions/others/flights_tracker_steps.rb +73 -0
  38. data/features/step_definitions/others/generic_steps.rb +35 -0
  39. data/features/step_definitions/others/newsletter_steps.rb +50 -0
  40. data/features/step_definitions/others/one_day_search.rb +58 -0
  41. data/features/step_definitions/others/print_steps.rb +26 -0
  42. data/features/step_definitions/others/querystringparameters_steps.rb +6 -0
  43. data/features/step_definitions/others/recommendation_steps.rb +80 -0
  44. data/features/step_definitions/others/render_steps.rb +70 -0
  45. data/features/step_definitions/others/tag_steps.rb +157 -0
  46. data/features/step_definitions/others/upgrade_bussines_steps.rb +27 -0
  47. data/features/step_definitions/results/load_steps.rb +69 -0
  48. data/features/step_definitions/results/results_steps.rb +21 -0
  49. data/features/step_definitions/results/search_steps.rb +82 -0
  50. data/features/step_definitions/search/alerts_steps.rb +132 -0
  51. data/features/step_definitions/search/basefare_steps.rb +64 -0
  52. data/features/step_definitions/search/bestprices_steps.rb +70 -0
  53. data/features/step_definitions/search/cross_sell_row_hoteles.rb +78 -0
  54. data/features/step_definitions/search/cross_sell_steps.rb +15 -0
  55. data/features/step_definitions/search/delays_steps.rb +67 -0
  56. data/features/step_definitions/search/details_steps.rb +9 -0
  57. data/features/step_definitions/search/ecoflights_steps.rb +9 -0
  58. data/features/step_definitions/search/fenix_steps.rb +119 -0
  59. data/features/step_definitions/search/flight_gui_steps.rb +312 -0
  60. data/features/step_definitions/search/miles_step.rb +13 -0
  61. data/features/step_definitions/search/pagination_steps.rb +41 -0
  62. data/features/step_definitions/search/reviews_step.rb +56 -0
  63. data/features/step_definitions/search/search_no_gui_steps.rb +185 -0
  64. data/features/step_definitions/search/wish_list_steps.rb +123 -0
  65. data/features/support/env.rb +61 -0
  66. data/features/support/lib/clusters/data/datos_new.rb +33 -0
  67. data/features/support/lib/clusters/details/details_cluster.rb +30 -0
  68. data/features/support/lib/clusters/results/landing_cluster.rb +29 -0
  69. data/features/support/lib/clusters/results/render_cluster.rb +43 -0
  70. data/features/support/lib/clusters/results_cluster.rb +140 -0
  71. data/features/support/lib/clusters.rb +5 -0
  72. data/features/support/lib/helpers/browser.rb +212 -0
  73. data/features/support/lib/helpers/checkout.rb +31 -0
  74. data/features/support/lib/helpers/clusters.rb +234 -0
  75. data/features/support/lib/helpers/landing.rb +117 -0
  76. data/features/support/lib/helpers/render.rb +135 -0
  77. data/features/support/lib/helpers.rb +5 -0
  78. data/features/support/lib/price.rb +66 -0
  79. data/features/support/lib/services/fenix.rb +14 -0
  80. data/features/support/lib/services/landing.rb +18 -0
  81. data/features/support/lib/services/results.rb +62 -0
  82. data/features/support/lib/services.rb +4 -0
  83. data/features/support/matchers.rb +120 -0
  84. data/features/support/redefinitions.rb +42 -0
  85. data/features/tests/checkout/agency.feature +33 -0
  86. data/features/tests/checkout/button_cac.feature +52 -0
  87. data/features/tests/checkout/chat.feature +20 -0
  88. data/features/tests/checkout/cupones.feature +54 -0
  89. data/features/tests/checkout/error_messages.feature +64 -0
  90. data/features/tests/checkout/integration.feature +215 -0
  91. data/features/tests/checkout/low_cost.feature +55 -0
  92. data/features/tests/checkout/seguros.feature +37 -0
  93. data/features/tests/contents/costs.feature +29 -0
  94. data/features/tests/contents/rules.feature +58 -0
  95. data/features/tests/contents/webcheckin.feature +26 -0
  96. data/features/tests/desambiguation/airports.feature +89 -0
  97. data/features/tests/desambiguation/city.feature +86 -0
  98. data/features/tests/filters/filters.feature +160 -0
  99. data/features/tests/fixes/advancedgui.feature +171 -0
  100. data/features/tests/fixes/advancednogui.feature +60 -0
  101. data/features/tests/fixes/book_no_gui.feature +21 -0
  102. data/features/tests/fixes/cross_sell_row_hoteles.feature +70 -0
  103. data/features/tests/fixes/facebook.feature +31 -0
  104. data/features/tests/fixes/landing_home_alerts.feature +82 -0
  105. data/features/tests/fixes/matrix_stops.feature +104 -0
  106. data/features/tests/fixes/one_day_search.feature +63 -0
  107. data/features/tests/fixes/print.feature +87 -0
  108. data/features/tests/fixes/searches_no_gui.feature +85 -0
  109. data/features/tests/landing/landing_alerts.feature +93 -0
  110. data/features/tests/landing/landing_checkout.feature +286 -0
  111. data/features/tests/landing/landing_filters.feature +176 -0
  112. data/features/tests/landing/landing_home.feature +68 -0
  113. data/features/tests/landing/landing_integration.feature +153 -0
  114. data/features/tests/landing/landing_long_tail.feature +162 -0
  115. data/features/tests/landing/landing_matrix.feature +156 -0
  116. data/features/tests/landing/landing_negative.feature +157 -0
  117. data/features/tests/landing/landing_orders.feature +107 -0
  118. data/features/tests/landing/landing_pagination.feature +142 -0
  119. data/features/tests/landing/landing_passenger_review.feature +139 -0
  120. data/features/tests/landing/landing_positive.feature +155 -0
  121. data/features/tests/landing/landing_reviews.feature +139 -0
  122. data/features/tests/landing/landing_tags.feature +148 -0
  123. data/features/tests/matrix/matrix_airlines.feature +104 -0
  124. data/features/tests/matrix/matrix_fare_chart.feature +24 -0
  125. data/features/tests/matrix/matrix_price.feature +35 -0
  126. data/features/tests/others/alerts.feature +89 -0
  127. data/features/tests/others/anticipatedsearch.feature +82 -0
  128. data/features/tests/others/flights_tracker.feature +94 -0
  129. data/features/tests/others/newsletter.feature +131 -0
  130. data/features/tests/others/querystringparameters.feature +82 -0
  131. data/features/tests/others/recommendation.feature +170 -0
  132. data/features/tests/others/semaphore.feature +206 -0
  133. data/features/tests/others/upgrade_bussines.feature +100 -0
  134. data/features/tests/search/basefare.feature +88 -0
  135. data/features/tests/search/itineraries.feature +85 -0
  136. data/features/tests/search/orders.feature +100 -0
  137. data/features/tests/search/pagination.feature +70 -0
  138. data/features/tests/search/reviews.feature +84 -0
  139. data/features/tests/search/searches.feature +197 -0
  140. data/features/tests/search/wish_list.feature +102 -0
  141. data/flights_gui_henry_tests.gemspec +32 -0
  142. data/henry-context.yml +14733 -0
  143. metadata +324 -0
@@ -0,0 +1,325 @@
1
+ # -*- encoding : utf-8 -*-
2
+ When /^Ingreso a la home de "(.*)"/ do |site|
3
+ set_site(site)
4
+ @search = MockSearchRoundtrip.new($SITE,$ENV,"nil")
5
+ BROWSER.goto(@search.host)
6
+ set_cookies(BROWSER)
7
+ set_language(site)
8
+ begin
9
+ li = BROWSER.li(:class,'flightsLink').present? ? BROWSER.li(:class,'flightsLink') : BROWSER.li(:class,'link-flights')
10
+ Watir::Wait.until(timeout = 120){li.present?}
11
+ rescue Watir::Wait::TimeoutError, Timeout::Error
12
+ stop_browser(BROWSER)
13
+ end
14
+ end
15
+
16
+ When /^Ingreso a la home de landing de "(.*)"$/ do |site|
17
+ set_site(site)
18
+ @search = MockSearchRoundtrip.new($SITE,$ENV,"nil")
19
+ begin
20
+ BROWSER.goto(@search.generate_url_landing_home)
21
+ rescue Timeout::Error
22
+ stop_browser(BROWSER)
23
+ end
24
+ set_cookies(BROWSER)
25
+ set_language(site)
26
+ end
27
+
28
+ When /^Ingreso a la home de landing$/ do
29
+ begin
30
+ li = BROWSER.li(:class,'flightsLink').present? ? BROWSER.li(:class,'flightsLink') : BROWSER.li(:class,'link-flights')
31
+ BROWSER.goto(li.links[0].href.gsub(/\/...\//,'/'))
32
+ rescue Timeout::Error
33
+ stop_browser(BROWSER)
34
+ end
35
+ end
36
+
37
+ When /^Genero resultados de landing$/ do
38
+ begin
39
+ set_site("CO")
40
+ @search = MockSearchRoundtrip.new($SITE,$ENV,"nil")
41
+ @ciudad_elegida = "Buenos aires"
42
+ BROWSER.goto(@search.generate_url_landing_search("BOG","BUE"))
43
+ @cambio = "$"
44
+ @precio_home_sov = Price.new("$ 100")
45
+ set_cookies(BROWSER)
46
+ set_language($SITE)
47
+ rescue Timeout::Error
48
+ stop_browser(BROWSER)
49
+ end
50
+ end
51
+
52
+ When /^Espero que termine de cargar la home de landing$/ do
53
+ Watir::Wait.until(timeout = 60){BROWSER.div(:class,'destiny-offers').present? or BROWSER.div(:class,'most-searched').present?}
54
+ @class_div = BROWSER.div(:class,'destiny-offers').present? ? 'destiny-offers' : 'most-searched'
55
+ end
56
+
57
+ Then /^Verifico que los links de las ciudades esten correctos$/ do
58
+ doc = Hpricot.parse(BROWSER.html)
59
+ array=[]
60
+ file = File.open("features/data/home-offers-config.csv")
61
+ file.each_line{|line| array << line.split(',')}
62
+ (doc/"div.#{@class_div} ul li").each do |li|
63
+ (li/"a").should_not is_empty
64
+ tmp = $SITE=="BR" ? "passagens-aereas" : "vuelos"
65
+ (li/"a").first.attributes['href'].should match(/(.+)#{tmp}\/...\/...\/#{tmp}(.+)|(.+)#{tmp}\/...\/...\/#{tmp}(.+)/)
66
+ if BROWSER.div(:class,'destiny-offers').present?
67
+ (li/"div.first-col h4").should_not is_empty
68
+ (li/"div.sec-col span").should_not is_empty
69
+ match=(li/"a").first.attributes['href'].match(/(.+)#{tmp}\/(...)\/(...)\/#{tmp}(.+)|(.+)#{tmp}\/(...)\/(...)\/#{tmp}(.+)/)
70
+ array.select{|tmp| tmp[0]==$SITE and tmp[3].strip.downcase==match[3].strip.downcase}.should_not is_empty
71
+ end
72
+ end
73
+ @validaciones << 1
74
+ end
75
+
76
+ When /^Elijo un link para pasar a los resultados de landing$/ do
77
+ doc = Hpricot.parse(BROWSER.html)
78
+ links = (doc/"div.#{@class_div} ul li")
79
+ @opt = links[rand(links.length)]
80
+ if BROWSER.div(:class,'destiny-offers').present?
81
+ @precio_home_sov = Price.new((@opt/"div.sec-col div.price-container").inner_text.strip)
82
+ @cambio = (@opt/"div.sec-col/div.price-container/span.mask").inner_text.strip
83
+ @ciudad_elegida = (@opt/"a").first.attributes['title'].no_accents.gsub(/Ver ofertas de voos a |Ver ofertas de vuelos a |View flight deals to |View flight deals to /,'').strip
84
+ else
85
+ @precio_home_sov = Price.new("#{(@opt/'div.info-price span.mask').inner_text.strip} #{(@opt/'div.info-price span.price').inner_text.strip}")
86
+ @cambio = (@opt/'div.info-price span.mask').inner_text.strip
87
+ @ciudad_elegida = (@opt/"a").first.attributes['title'].no_accents.gsub(/Ver ofertas de voos a |Ver ofertas de vuelos a |View flight deals to /,'').strip
88
+ end
89
+ end
90
+
91
+ When /^Ingreso a resultados de landing$/ do
92
+ begin
93
+ BROWSER.div(:class,@class_div).link(:href,(@opt/"a").first.attributes['href']).click
94
+ Watir::Wait.until(timeout = 60){BROWSER.span(:class,'commonSprite warningSymbol').present? or (BROWSER.div(:id,"clusters").present? or BROWSER.li(:class,"flightPanel").present?) or BROWSER.div(:class,"flightOffers").present? or (BROWSER.div(:class,"noResultsWidthFilterTitle").present? or BROWSER.div(:class,'noResults').present?)}
95
+ rescue Watir::Wait::TimeoutError, Timeout::Error
96
+ stop_browser(BROWSER)
97
+ end
98
+ end
99
+
100
+ When /^Ingreso a resultados de landing para la ciudad "(.*)"$/ do |code|
101
+ doc = Hpricot.parse(BROWSER.html)
102
+ links = (doc/"div.most-searched//li")
103
+ @opt = links.select{|li| (li/"a")[0].attributes["href"].match(/\/(...)\/(...)\//)[2].upcase.match(code.upcase)}.first
104
+ unless @opt
105
+ links = (doc/"div.destiny-offers//li")
106
+ @opt = links.select{|li| (li/"a")[0].attributes["href"].match(/\/(...)\/(...)\//)[2].upcase.match(code.upcase)}.first
107
+ @precio_home_sov = Price.new((@opt/"div.sec-col div.price-container").inner_text.strip)
108
+ else
109
+ @precio_home_sov = Price.new("#{(@opt/'div.info-price span.mask').inner_text.strip} #{(@opt/'div.info-price span.price').inner_text.strip}")
110
+ end
111
+ @ciudad_elegida = (@opt/"a").first.attributes['title'].no_accents.gsub(/Ver ofertas de voos a |Ver ofertas de vuelos a |View flight deals to /,'').strip
112
+ begin
113
+ BROWSER.link(:href,(@opt/"a").first.attributes['href']).click
114
+ Watir::Wait.until(timeout = 60){BROWSER.span(:class,'commonSprite warningSymbol').present? or (BROWSER.div(:id,"clusters").present? or BROWSER.li(:class,"flightPanel").present?) or BROWSER.div(:class,"flightOffers").present? or (BROWSER.div(:class,"noResultsWidthFilterTitle").present? or BROWSER.div(:class,'noResults').present?)}
115
+ rescue Watir::Wait::TimeoutError, Timeout::Error
116
+ stop_browser(BROWSER)
117
+ end
118
+ end
119
+
120
+ Then /^Verifico que traiga resultados de landings$/ do
121
+ pending(BROWSER.span(:class,'message').text) if BROWSER.span(:class,'message').present?
122
+ BROWSER.span(:class,'commonSprite warningSymbol').should_not visible
123
+ end
124
+
125
+ Then /^Levanto el json de resultados para landing$/ do
126
+ @json = Services::Landing.new(Hpricot.parse(BROWSER.html)).json
127
+ end
128
+
129
+ And /^Verifico que la ciudad destino sea la que se eligio en home$/ do
130
+ doc = Hpricot.parse(BROWSER.html)
131
+ ciudades = (doc/"div.mainTitle/h1").inner_text.strip.no_accents
132
+ ciudad_destino = ciudades.match(/ (para|a|to) ([^,]+)/)[2].strip
133
+ @ciudad_elegida.should equal(ciudad_destino) unless @ciudad_elegida.match(/Guarullos/)
134
+ @validaciones << 3
135
+ end
136
+
137
+ And /^Verifico que la url sea la correcta$/ do
138
+ @url_parse = BROWSER.url.match(/#{@search.host()}\/(vuelos|passagens-aereas)\/(\D{3})\/(\D{3})\/(vuelos|passagens-aereas)-(a|para)-(.+)-(desde|saindo-de)-(.+)/)
139
+ @url_parse.should be_true
140
+ @validaciones << 4
141
+ end
142
+
143
+ When /^Elijo el tipo de vuelo "(.*)"$/ do |tipo|
144
+ BROWSER.div(:class,'ux-common-filter-section filter-searchType ux-common-filter-active').radio(:id,tipo).set
145
+ end
146
+
147
+ When /^Levanto los datos de clusters$/ do
148
+ doc = Hpricot.parse(BROWSER.html)
149
+ @clusters = load_clusters(doc)
150
+ end
151
+
152
+
153
+ When /^Levanto los datos de clusters "(.*)"$/ do |tipo|
154
+ doc = Hpricot.parse(BROWSER.html)
155
+ @clusters = load_clusters(doc,tipo)
156
+ end
157
+
158
+ And /^Comparo los datos de cluster contra los detalles$/ do
159
+ doc = Hpricot.parse(BROWSER.html)
160
+ load_clusters_details(doc).each_with_index do |detail,i|
161
+ #(doc/"div.popup-content div.detail span.total-time").should match((@clusters[i].idas[j].duracion).to_s)
162
+ detail["idas"].each_with_index do |item,j|
163
+ item.tramos.first["clase"].should be_true
164
+ item.tramos.first["clase"].should_not equal("")
165
+ item.tramos.first["ciudad_origen"].should match(@clusters[i].idas[j].origen.no_accents.strip)
166
+ (item.tramos.first["fecha_origen"].strftime("%d%m")).should match(@clusters[i].idas[j].fecha.strftime("%d%m"))
167
+ (item.tramos.first["hora_origen"].strftime("%d%m")).should match(@clusters[i].idas[j].hou_sal_ida.strftime("%d%m"))
168
+ item.duracion.to_s.should match((@clusters[i].idas[j].duracion).to_s)
169
+ item.tramos.first["ciudad_destino"].should match(@clusters[i].idas[j].destino.no_accents.strip)
170
+ (item.tramos.first["hora_destino"].strftime("%d%m")).should match(@clusters[i].idas[j].hou_lle_ida.strftime("%d%m"))
171
+ end
172
+ detail["vueltas"].each_with_index do |item,j|
173
+ item.tramos.first["clase"].should be_true
174
+ item.tramos.first["clase"].should_not equal("")
175
+ item.tramos.first["ciudad_origen"].should match(@clusters[i].vueltas[j].origen.no_accents.strip)
176
+ (item.tramos.first["fecha_origen"].strftime("%d%m")).should match(@clusters[i].vueltas[j].fecha.strftime("%d%m"))
177
+ (item.tramos.first["hora_origen"].strftime("%H%M")).should match(@clusters[i].vueltas[j].hou_sal_ida.strftime("%H%M"))
178
+ item.duracion.to_s.should match((@clusters[i].vueltas[j].duracion).to_s)
179
+ item.tramos.first["ciudad_destino"].should match(@clusters[i].vueltas[j].destino.no_accents.strip)
180
+ (item.tramos.first["hora_destino"].strftime("%d%m")).should match(@clusters[i].vueltas[j].hou_lle_ida.strftime("%d%m"))
181
+ end
182
+ end
183
+ end
184
+
185
+ And /^Verifico que el primer precio sea el que se mostro en home$/ do
186
+ @validaciones << 5
187
+ end
188
+
189
+ And /^Verifico que no vengan mas de diez resultados por pagina$/ do
190
+ (@clusters.length<11).should be_true
191
+ @validaciones << 6
192
+ end
193
+
194
+ And /^Verifico que traiga precios con formato correcto y positivos$/ do
195
+ @clusters.each do |cluster|
196
+ if cluster.tarifas
197
+ tarifa = BROWSER.span(:class,'price-currency USD ').present? ? cluster.tarifas['tarifa_adulto_dolar'] : cluster.tarifas['tarifa_adulto']
198
+ tarifa.to_s.match(/\,/).should_not be_true
199
+ tarifa.to_s.match(/\-/).should_not be_true
200
+ #tarifa.currency.strip.no_accents.gsub(/\n/,'').gsub(/\.$/,'').should equal(@cambio.no_accents.to_s.strip)
201
+ if $SITE == "AR"
202
+ #cluster.tarifas['afip'].value.should_not equal(0)
203
+ end
204
+ end
205
+ end
206
+ @validaciones << 7
207
+ end
208
+
209
+ And /^Verifico que traiga aeropuertos y concuerden con la ciudad buscada$/ do
210
+ @clusters.each do |cluster|
211
+ (cluster.ida.origen_iata and cluster.ida.destino_iata).should be_true
212
+ if cluster.vuelta
213
+ (cluster.vuelta.origen_iata and cluster.vuelta.destino_iata).should be_true
214
+ end
215
+ end
216
+ @validaciones << 8
217
+ end
218
+
219
+ And /^Verifico que traiga fechas en formato correcto$/ do
220
+ @clusters.each do |cluster|
221
+ cluster.idas.first.should be_true
222
+ ida_sitio = []
223
+ cluster.idas.each{|ida| ida_sitio << ida.fecha if ida.fecha}
224
+ if cluster.vueltas and cluster.vueltas.first
225
+ cluster.vueltas.first.should be_true
226
+ vuelta_sitio = []
227
+ cluster.vueltas.each{|vuelta| vuelta_sitio << vuelta.fecha if vuelta.fecha}
228
+ if ida_sitio.first and cluster.vueltas.first
229
+ vueltas_sitio = []
230
+ cluster.vueltas.each{|vuelta| vueltas_sitio << vuelta.fecha if vuelta.fecha}
231
+ if vueltas_sitio.first
232
+ vueltas_sitio.each do |vueltas|
233
+ ida = ida_sitio.select{|ida| vueltas < ida}
234
+ ida.should is_empty
235
+ end
236
+ end
237
+ end
238
+ end
239
+ end
240
+ @validaciones << 9
241
+ end
242
+
243
+ When /^Elijo un ticket e ingreso a la pagina de resultados$/ do
244
+ @departure_date = @clusters.first.ida.fecha
245
+ @return_date = @clusters.first.vuelta.fecha if @clusters.first.vuelta
246
+ @from_iata = BROWSER.url.match(/\/(...)\//)[1].upcase
247
+ @to_iata = BROWSER.url.match(/\/(...)\/(...)\//)[2].upcase
248
+
249
+ BROWSER.div(:class,'sub-cluster outbound').radio(:id,"0-outbound-0").set
250
+ BROWSER.div(:class,'sub-cluster inbound').radio(:id,"0-inbound-0").set if @clusters.first.vuelta
251
+ BROWSER.div(:id,'clusters').div(:class,/cluster flights-cluster/).link(:class,"buy btn-buy flights-button").click
252
+ BROWSER.div(:id,'searchPopup').select_list(:class,'adultsSelect flights-select').select(3)
253
+ BROWSER.div(:id,'searchPopup').select_list(:class,'childsSelect flights-select').select(2)
254
+ ["3","4"].each_with_index do | age, j |
255
+ BROWSER.div(:id,'searchPopup').select_list(:class=>'selectAge flights-select',:index=>j).select_value(age) #@users_ninos[num_ninos].nil? ? rand(11).to_s : @users_ninos[num_ninos].age.to_s)
256
+ end
257
+ BROWSER.div(:id,'searchPopup').link(:class,'flights-search-button').click
258
+
259
+ end
260
+
261
+ Then /^Verifico que sea la pagina de resultados correcta$/ do
262
+ if @return_date
263
+ BROWSER.url.should match("\/roundtrip\/#{@from_iata.downcase}\/#{@to_iata.downcase}\/#{@departure_date}\/#{@return_date}\/3\/I\-C\/0")
264
+ else
265
+ BROWSER.url.should match("\/oneway\/#{@from_iata.downcase}\/#{@to_iata.downcase}\/#{@departure_date}\/3\/I\-C\/0")
266
+ end
267
+ end
268
+
269
+ And /^Verifico que el valor elejido en landing se encuentre en la lista de resultados$/ do
270
+ doc = Hpricot.parse(BROWSER.html)
271
+ matchs = (doc/"div#clusters div.cluster span[@class='price-currency USD'] span.amount").select{|span| (span.inner_text.to_i - @clusters.first.tarifa.valor).abs < 2 }
272
+ end
273
+
274
+ And /^Verifico que la moneda elegida en landing se encuentre en la lista de resultados$/ do
275
+ if @cambio.strip=="US$" or @cambio.strip=="USD"
276
+ BROWSER.span(:class,"price-currency USD ").span(:class,"currency price-mask").text.should match('US\$|USD')
277
+ else
278
+ BROWSER.span(:class,"price-currency #{currency($SITE)} ").span(:class,"currency price-mask").text.gsub(/\.$/,'').should equal(@precio_home_sov.currency.gsub(/\.$/,''))
279
+ end
280
+ end
281
+
282
+ When /^Verifico que funcione el paginado correctamente$/ do
283
+ iterator = 2
284
+ while(BROWSER.div(:id,'pagination').li(:class,'pagination-button next').present? and iterator < 5)do
285
+ before_url = BROWSER.url
286
+ BROWSER.div(:class,'flights-pagination').li(:class,'pagination-button next').links[0].click
287
+ Watir::Wait.until(timeout = 5){before_url != BROWSER.url}
288
+ BROWSER.url.should match("(.+)\?pageIndex\=#{iterator}")
289
+ iterator += 1
290
+ end
291
+ end
292
+
293
+ And /^Verifico que el paginado mantenga los filtros$/ do
294
+ BROWSER.div(:class,'ux-common-filter-section ux-flights-filter-departures').checkboxes[0].click
295
+ sleep(0.5)
296
+ if BROWSER.div(:id,'pagination').li(:class,'pagination-button next').present?
297
+ url_with_filter = BROWSER.url
298
+ BROWSER.div(:class,'flights-pagination').li(:class,'pagination-button next').links[0].click
299
+ Watir::Wait.until(timeout = 5){url_with_filter != BROWSER.url}
300
+ BROWSER.url.strip.should equal(url_with_filter.strip.gsub(/\/1\//,"/2/"))
301
+ end
302
+ reset_filter
303
+ end
304
+
305
+ Then /^Vuelvo a la primer pagina$/ do
306
+ BROWSER.div(:class,'flights-pagination').li(:class,'pagination-button prev').links[0].click while BROWSER.div(:class,'flights-pagination').li(:class,'pagination-button prev').present?
307
+ end
308
+
309
+ When /^Verifico que el paginado no traiga mas de "(.*)" paginas$/ do |limit_pages|
310
+ doc = Hpricot.parse(BROWSER.html)
311
+ if (doc/"li.paginatorItem")[-2]
312
+ ((doc/"li.paginatorItem")[-2].inner_text.to_i <= limit_pages.to_i).should be_true
313
+ end
314
+ end
315
+
316
+ And /^Verifico que el mensaje de error en el cluster sea correcto$/ do
317
+ clusters=load_clusters(BROWSER)
318
+ index = nil
319
+ cluster=clusters.each_with_index do |cluster,i|
320
+ if (cluster.idas.length>1 or cluster.vueltas.length>1)
321
+ BROWSER.link(:class=>"buy btn-buy flights-button",:index=>i).click
322
+ BROWSER.div(:class=>"cluster",:index=>i).li(:class=>'item error-message',:index=>((cluster.idas.length>1) ? 0 : 1)).text.no_accents.should match("Please choose a (return|departure) flight|Por favor, seleccione un vuelo de|Por favor, selecione um voo de")
323
+ end
324
+ end
325
+ end
@@ -0,0 +1,67 @@
1
+ # -*- encoding : utf-8 -*-
2
+ Then /^Elijo ordenamiento "(.*)"$/ do |value|
3
+ begin
4
+ BROWSER.select_list(:id,'orderby').select_value(value)
5
+ rescue Timeout::Error
6
+ stop_browser(BROWSER)
7
+ end
8
+ end
9
+
10
+ Then /^Levanto los datos de los clusters "(.*)"$/ do |type|
11
+ @clusters = []
12
+ i=0
13
+ doc = Hpricot.parse(BROWSER.div(:id,'clusters').html)
14
+ (doc/"div.cluster").each do |cluster|
15
+ itinerary = ResultsCluster.new(type,cluster)
16
+ i += 1
17
+ @clusters << itinerary
18
+ end
19
+ end
20
+
21
+ Then /^Verifico ordenamiento FARE_ASCENDING$/ do
22
+ after = @clusters.first.tarifas['tarifa_adulto']
23
+ @clusters.each do |cluster|
24
+ after.value.should_not is_greater_than(cluster.tarifas['tarifa_adulto'].value)
25
+ after = cluster.tarifas['tarifa_adulto']
26
+ end
27
+ end
28
+
29
+ Then /^Verifico ordenamiento FARE_DESCENDING$/ do
30
+ after = @clusters.first.tarifas['tarifa_adulto']
31
+ @clusters.each do |cluster|
32
+ after.value.should is_greater_equal_than(cluster.tarifas['tarifa_adulto'].value)
33
+ after = cluster.tarifas['tarifa_adulto']
34
+ end
35
+ end
36
+
37
+ Then /^Verifico ordenamiento STOPSCOUNT_DESCENDING$/ do
38
+ after = @clusters.first
39
+ @clusters.each do |cluster|
40
+ after.total_escalas.last.should is_greater_equal_than(cluster.total_escalas.first)
41
+ after = cluster
42
+ end
43
+ end
44
+
45
+ Then /^Verifico ordenamiento STOPSCOUNT_ASCENDING$/ do
46
+ after = @clusters.first
47
+ @clusters.each do |cluster|
48
+ after.total_escalas.last.should_not is_greater_than(cluster.total_escalas.last)
49
+ after = cluster
50
+ end
51
+ end
52
+
53
+ Then /^Verifico ordenamiento TOTALFARE_ASCENDING$/ do
54
+ after = @clusters.first.tarifas['total']
55
+ @clusters.each do |cluster|
56
+ after.value.should_not is_greater_than(cluster.tarifas['total'].value)
57
+ after = cluster.tarifas['total']
58
+ end
59
+ end
60
+
61
+ Then /^Verifico ordenamiento TOTALFARE_DESCENDING$/ do
62
+ after = @clusters.first.tarifas['total']
63
+ @clusters.each do |cluster|
64
+ after.value.should is_greater_equal_than(cluster.tarifas['total'].value)
65
+ after = cluster.tarifas['total']
66
+ end
67
+ end
@@ -0,0 +1,28 @@
1
+ # -*- encoding : utf-8 -*-
2
+ When /^Especifico filtro "(.*)"$/ do |query|
3
+ begin
4
+ BROWSER.goto "#{@path}#{query}"
5
+ rescue Timeout::Error
6
+ begin Timeout::Error
7
+ BROWSER.goto "#{@path}#{query}"
8
+ rescue
9
+ sleep(5)
10
+ end
11
+ end
12
+ end
13
+
14
+ When /^Seteo path$/ do
15
+ @path = BROWSER.url
16
+ end
17
+
18
+ Then /^Espero que de la carga devuelva "(.*)"$/ do |expected_result|
19
+ BROWSER.text.should match(expected_result)
20
+ end
21
+
22
+ Then /^Verifico que el panel de opciones avanzadas este (cerrado|abierto)$/ do |status|
23
+ if status == "cerrado"
24
+ BROWSER.div(:class,"com-advancedlink").present?
25
+ else
26
+ BROWSER.div(:class,"com-advancedlink active").present?
27
+ end
28
+ end
@@ -0,0 +1,34 @@
1
+ # -*- encoding : utf-8 -*-
2
+ When /^Verifico las combinaciones de busqueda avanzada "(.*)"$/ do |tipo|
3
+ escala = ["0","1","2","3","4","5"][rand(6)]
4
+ clase = ["YC","C","F"][rand(3)]
5
+ horario_salida = ["00","01","02","03","04","05","06","07","08","09","10","11","12"][rand(13)]
6
+ horario_llegada = ["00","01","02","03","04","05","06","07","08","09","10","11","12"][rand(13)]
7
+ aerolineas = ["AA","JJ","AR"]
8
+ aerolinea = aerolineas[rand(aerolineas.length)]
9
+ options = [ [horario_salida,horario_llegada,clase,escala,aerolinea].collect{|option| [option,"NA"][rand(2)]},
10
+ [horario_salida,horario_llegada,clase,escala,aerolinea],
11
+ ["NA",horario_llegada,clase,escala,aerolinea],
12
+ [horario_salida,"NA",clase,escala,aerolinea],
13
+ [horario_salida,horario_llegada,"NA",escala,aerolinea],
14
+ [horario_salida,horario_llegada,clase,"NA",aerolinea],
15
+ [horario_salida,horario_llegada,clase,escala,"NA"]]
16
+ options.each do |option|
17
+ option.delete_at(1) if tipo.downcase.match(/oneway/)
18
+ respond = nil
19
+ begin
20
+ respond = HTTParty.get(%!#{@url_resultado}/#{option.join('/')}!,:headers=>{"x-uow"=>"ROBOT"})
21
+ rescue Errno::ECONNRESET
22
+ nil.should be_true
23
+ rescue Timeout::Error
24
+ nil.should be_true
25
+ end
26
+ respond.should be_true
27
+ respond.code.should equal(200)
28
+ end
29
+ end
30
+
31
+ When /^Especifico path "(.*)""(.*)""(.*)"$/ do |site,cabotage,type|
32
+ @search = Class.const_get("MockSearch#{type.capitalize}").new(site,$ENV,cabotage)
33
+ @url_resultado = @search.generate_url_results_search()
34
+ end
@@ -0,0 +1,13 @@
1
+ # -*- encoding : utf-8 -*-
2
+ Then /^Verifico la busqueda anticipada "(.*)""(.*)""(.*)"$/ do |site,cabotage,type|
3
+ begin
4
+ @search = Class.const_get("MockSearch#{type.capitalize}").new(site,$ENV,cabotage)
5
+ respond = HTTParty.get(@search.generate_url_anticipated_search(),:headers=>{"x-uow"=>"ROBOT"})
6
+ rescue Errno::ECONNRESET
7
+ nil.should be_true
8
+ rescue Timeout::Error
9
+ nil.should be_true
10
+ end
11
+ respond.should be_true
12
+ respond.code.should equal(200)
13
+ end
@@ -0,0 +1,73 @@
1
+ Then /^Ingreso a la pagina de trackeo de vuelos "(.*)"$/ do |site|
2
+ set_site(site)
3
+ @search = MockSearchRoundtrip.new($SITE,$ENV,"nil")
4
+ puts @search.host + "/flights/tracker/"
5
+ BROWSER.goto(@search.host + "/flights/tracker/")
6
+ #BROWSER.div(:class,'flight-tracker-alert').links[0].click
7
+ end
8
+ Then /^Espero que termine de cargar la pagina de trackeo de vuelos$/ do
9
+ Watir::Wait.until(timeout=20){BROWSER.image(:class,'flight-tracker-banner').present?}
10
+ end
11
+ Then /^Verifico que se encuentren los elementos de la pagina de trackeo de vuelos$/ do
12
+ doc = Hpricot.parse(BROWSER.html)
13
+ (doc/"div#searchContainer").length.should equal(1)
14
+ (doc/"div#searchContainer div#flights-tracker-searchbox").length.should equal(1)
15
+ (doc/"div#searchContainer div#flights-tracker-searchbox").length.should equal(1)
16
+ (doc/"div#searchContainer div#flights-tracker-searchbox input#airline").length.should equal(1)
17
+ (doc/"div#searchContainer div#flights-tracker-searchbox input#flightNumber").length.should equal(1)
18
+ (doc/"div#searchContainer div#flights-tracker-searchbox input#no-flight-number-checkbox").length.should equal(1)
19
+ (doc/"div#searchContainer div#flights-tracker-searchbox input[@name='flight-date']").length.should equal(3)
20
+ (doc/"div#searchContainer div#flights-tracker-searchbox a.flights-search-button").length.should equal(1)
21
+ (doc/"div#searchContainer div#flights-tracker-searchbox input#flight-tracker-origin-city").length.should equal(1)
22
+ (doc/"div#searchContainer div#flights-tracker-searchbox input#flight-tracker-destiny-city").length.should equal(1)
23
+ (doc/"div#searchContainer div#flights-tracker-searchbox select#flight-tracker-hours").length.should equal(1)
24
+ end
25
+ Then /^Ingreso aerolinea$/ do
26
+ @caja = BROWSER.div(:id,'flights-tracker-searchbox')
27
+ @caja.text_field(:id,'airline').set("aerolineas argentinas")
28
+ sleep(0.5)
29
+ BROWSER.send_keys :enter
30
+ end
31
+ Then /^Ingreso numero de vuelo "(.*)"$/ do |nro|
32
+ @caja.text_field(:id,'flightNumber').set(nro)
33
+ end
34
+ Then /^Ingreso fecha de partida "(.*)"$/ do |fecha|
35
+ @caja.radio(:value,fecha).set()
36
+ end
37
+ Then /^Selecciono buscar$/ do
38
+ @caja.link(:class,"flights-search-button").click
39
+ sleep(0.5)
40
+ end
41
+ Then /^Espero que termine de cargar el vuelo trackeado$/ do
42
+ Watir::Wait.until(timeout=30){!BROWSER.div(:class,"flight-tracker-loader-content").present?}
43
+ end
44
+ Then /^Verifico que no encuentre resultados de trackeo$/ do
45
+ BROWSER.div(:id,'results-error').should visible("no se encontraron resultados")
46
+ end
47
+ Then /^Verifico que encuentre resultados de trackeo$/ do
48
+ BROWSER.div(:id,'results-error').should_not visible("no se encontraron resultados")
49
+ BROWSER.div(:id,'flight-info').should visible("informacion del vuelo")
50
+ end
51
+ Then /^Verifico que los datos de trackeo sean correctos$/ do
52
+ doc=Hpricot.parse(BROWSER.div(:id,'flight-info').html)
53
+ (doc/"span.flight-info-number").inner_text.should equal("AR 1298")
54
+ (doc/"div.airport-info-outbound div.airport-info-description").inner_text.should match('Aeropuerto El Plumerillo \(MDZ\) \- Mendoza|Aeroporto El Plumerillo \(MDZ\) \- Mendoza|El Plumerillo Airport \(MDZ\) \- Mendoza')
55
+ (doc/"div.airport-info-inbound div.airport-info-description").inner_text.should match('Arturo Merino Benitez Airport \(SCL\) \- Santiago de Chile|Aeropuerto Arturo Merino Benitez \(SCL\) \- Santiago de Chile|Aeroporto Arturo Merino Benitez \(SCL\) \- Santiago')
56
+ (doc/"span.flight-info-airline-name").inner_text.no_accents.should equal("Aerolineas Argentinas")
57
+ end
58
+ Then /^Elijo no se el numero de vuelo$/ do
59
+ BROWSER.checkbox(:id,"no-flight-number-checkbox").set(true)
60
+ end
61
+ Then /^Elijo origen$/ do
62
+ @caja.text_field(:id,'flight-tracker-origin-city').set("mendoza")
63
+ sleep(0.5)
64
+ BROWSER.send_keys :enter
65
+ end
66
+ Then /^Elijo destino$/ do
67
+ @caja.text_field(:id,'flight-tracker-destiny-city').set("santiago")
68
+ sleep(0.5)
69
+ BROWSER.send_keys :enter
70
+ end
71
+ Then /^Elijo horario de partida "(.*)"/ do |horario|
72
+ @caja.select_list(:id,'flight-tracker-hours').select_value(horario)
73
+ end
@@ -0,0 +1,35 @@
1
+ # -*- encoding : utf-8 -*-
2
+ Before do |scenario|
3
+ @@name = scenario.source_tag_names.collect{|tag| tag.gsub(/\@/,'')}.join(".")
4
+ @validaciones = Array.new
5
+ end
6
+
7
+ After do |scenario|
8
+ if $henry_params['browser']
9
+ if BROWSER.div(:id,'errorInfo').present?
10
+ puts BROWSER.div(:id,'errorInfo').html
11
+ end
12
+ if scenario.failed?
13
+ name = "FAILED_#{scenario.name.gsub(' ','').gsub(/[^0-9A-Za-z]/, '')}.png"
14
+ screenshot = "./output/reports/html/screenshots/#{name}"
15
+ BROWSER.driver.save_screenshot(screenshot)
16
+ embed "./screenshots/#{name}", 'image/png'
17
+ end
18
+ end
19
+ end
20
+
21
+ at_exit do
22
+ BROWSER.close if $henry_params['browser']
23
+ end
24
+
25
+ When /^Si (.*), (.*)$/ do |condition, paso |
26
+ doit = true
27
+ begin
28
+ step condition
29
+ rescue RSpec::Expectations::ExpectationNotMetError => e
30
+ doit = false
31
+ end
32
+ if doit
33
+ step paso
34
+ end
35
+ end
@@ -0,0 +1,50 @@
1
+ # -*- encoding : utf-8 -*-
2
+ When /^Fuerzo la cookie de newsletter$/ do
3
+ if BROWSER.cookies.to_a.select{|cookie| cookie[:name]=="-#{@search.description.upcase}-#{@search.city_from_1.code.upcase}-#{@search.city_to_1.code.upcase}"}.first
4
+ tracker_id = BROWSER.cookies.to_a.select{|cookie| cookie[:name]=="trackerid"}.first[:value]
5
+ end
6
+ cookie = BROWSER.cookies.to_a.select{|cookie| cookie[:name].match("#{@search.description.upcase}-#{@search.city_from_1.code.upcase}-#{@search.city_to_1.code.upcase}")}.first
7
+ delete_cookie(cookie[:name])
8
+ add_cookie("#{tracker_id}#{cookie[:name]}",3,{:expires => cookie[:expires],:domain=>cookie[:domain]})
9
+ end
10
+
11
+ When /^Fuerzo el abztesting de newsletter al "(.*)"$/ do |value|
12
+ cookie = BROWSER.cookies.to_a.select{|cookie| cookie[:name]=="abzTestingId"}.first
13
+ new_value = cookie[:value].gsub(/#{get_abtesting('newsletterPopup')}/,value)
14
+ delete_cookie("abzTestingId")
15
+ add_cookie("abzTestingId",new_value,{:expires => cookie[:expires],:domain=>cookie[:domain]})
16
+ end
17
+
18
+ When /^Verifico que se creen las cookies$/ do
19
+ puts BROWSER.cookies.to_a.select{|cookie| cookie[:name].match("#{@search.description.upcase}-#{@search.city_from_1.code.upcase}-#{@search.city_to_1.code.upcase}")}.first
20
+ puts BROWSER.cookies.to_a.select{|cookie| cookie[:name]=="abzTestingId"}.first
21
+ end
22
+
23
+ When /^Verifico los textos del popup grande de newsletter$/ do
24
+ BROWSER.div(:id,'flights-alerts-popup').p(:class,'nibbler-advice').text.no_accents.should match('Can\’t find the price you are looking for\? Create a flight price alert and receive the best deals in your e\-mail|\¿No encuentra el precio que busca\? Reciba las mejores ofertas en su e-mail|Nao encontra o preco que deseja\? Crie seu aviso personalizado e receba as melhores ofertas no seu e-mail')
25
+ end
26
+
27
+ When /^Verifico que cargue el popup chico de newsletter$/ do
28
+ Watir::Wait.until(timeout=10){BROWSER.div(:id,'create-alert-popup').present?}
29
+ BROWSER.div(:id,'create-alert-popup').should visible("popup chico de newsletter")
30
+ end
31
+
32
+ When /^Verifico los textos del popup chico de newsletter$/ do
33
+ BROWSER.div(:id,'create-alert-popup').div(:class,'popup-header').text.no_accents.should match('Can\’t find what you are looking for\?|\¿No encuentra lo que busca\?|Nao encontrou o que deseja\?')
34
+ BROWSER.div(:id,'create-alert-popup').div(:id,'create-alert-popup-content').link(:class,'create-alert-button flights-best-price-button').should visible("link de crear alerta personalizada")
35
+ BROWSER.div(:id,'create-alert-popup').div(:id,'create-alert-popup-content').link(:class,'cancel-button').should visible("link de cancelar alerta personalizada")
36
+ end
37
+
38
+ When /^Elijo crear alerta personalizada$/ do
39
+ BROWSER.div(:id,'create-alert-popup').div(:id,'create-alert-popup-content').link(:class,'create-alert-button flights-best-price-button').click
40
+ end
41
+
42
+ When /^No elijo crear alerta personalizada$/ do
43
+ BROWSER.div(:id,'create-alert-popup').div(:id,'create-alert-popup-content').link(:class,'cancel-button').click
44
+ end
45
+
46
+ When /^Verifico que no cargue el popup de newsletter$/ do
47
+ sleep(2)
48
+ BROWSER.div(:id,'flights-alerts-popup').p(:class,'nibbler-advice').should_not visible("popup grande de newsletter")
49
+ BROWSER.div(:id,'create-alert-popup').div(:id,'create-alert-popup-content').should_not visible("popup chico de newsletter")
50
+ end