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,58 @@
1
+ # -*- encoding : utf-8 -*-
2
+ When /^genero los datos para realizar una busqueda en "(.*)"$/ do |site|
3
+ set_site(site)
4
+ @search = MockSearchRoundtrip.new(site,$ENV,"nil")
5
+ end
6
+
7
+ When /^ingreso a la home de "(.*)"$/ do |site|
8
+ BROWSER.goto(@search.host)
9
+ set_cookies(BROWSER)
10
+ end
11
+
12
+ Then /^realizo la busqueda para mañana$/ do
13
+ BROWSER.li(:class,/tab-flights/).click
14
+ sleep(0.5)
15
+ BROWSER.checkbox(:id,'sb-oneway').set
16
+ BROWSER.text_field(:id,'sb-origin-flights').set($SITE=~/MX|UY/ ? "RIO" : @search.city_from_1.code)
17
+ sleep(0.5)
18
+ BROWSER.send_keys :enter
19
+ BROWSER.text_field(:id,'sb-destination-flights').set($SITE=="AR" ? "MIA" : "BUE")
20
+ sleep(0.5)
21
+ BROWSER.send_keys :enter
22
+ BROWSER.text_field(:id,'sb-datein-flights').click
23
+ if !(BROWSER.div(:id,'sb-datein-flights-datepicker').div(:class,'calendar first').span(:class,"in day-#{(Date.today+1).strftime('%-d')} disabled").present? or BROWSER.div(:id,'sb-datein-flights-datepicker').div(:class,'calendar first').span(:class,"in day-#{(Date.today+1).strftime('%-d')} weekend disabled").present?)
24
+ BROWSER.div(:id,'sb-datein-flights-datepicker').div(:class,'calendar first').span(:class,"in day-#{(Date.today+1).strftime('%-d')}").click
25
+ else
26
+ puts "deshabilitado"
27
+ @habilitado = nil
28
+ @disabled = true
29
+ #BROWSER.div(:id,'sb-datein-flights-datepicker').div(:class,'calendar last').div(:class,'next').span(:class,'nextArrow').click
30
+ #BROWSER.div(:id,'sb-datein-flights-datepicker').div(:class,'calendar first').span(:class,"in day-#{(Date.today+1).strftime('%-d')}").click
31
+ end
32
+ BROWSER.div(:id,'sb-datein-flights-datepicker').div(:class,'commonSprite closePopUp closeBlueIcon').click
33
+ sleep(0.5)
34
+ if $SITE=="VE"
35
+ BROWSER.div(:class,"pdt-flights").div(:class,'com-searchbutton').link(:class,'ctn-searchbutton').click
36
+ else
37
+ BROWSER.div(:class,"pdt-flights fh").div(:class,'com-searchbutton').link(:class,'ctn-searchbutton').click
38
+ end
39
+ end
40
+
41
+ Then /^Espero salir de home$/ do
42
+ Watir::Wait.until(timeout=15){BROWSER.span(:class,'search-info').present?}
43
+ end
44
+
45
+ Then /^esta habilitado$/ do
46
+ @disabled.should_not be_true
47
+ end
48
+
49
+ And /^Verifico si se puede comprar o no$/ do
50
+ @habilitado = !BROWSER.div(:id,'results-error').text.match(/es una fecha demasiado cercana para comprar en nuestro sitio web|uma data muito pr.{1,2}xima ao embarque para voc.{1,2} comprar sua passagem em nosso website/)
51
+ puts @habilitado
52
+ end
53
+
54
+ And /^guardo los resultados en un archivo$/ do
55
+ file = File.open("data.txt","a+")
56
+ file.puts "#{$SITE} (#{Time.now.strftime('%H:%M')}) [#{Date.today} -> #{Date.today+1}] #{@habilitado ? 'Habilitado' : 'No habilitado'}"
57
+ file.close
58
+ end
@@ -0,0 +1,26 @@
1
+ # -*- encoding : utf-8 -*-
2
+ Then /^elijo un ticket "(.*)"$/ do |type|
3
+ doc = Hpricot.parse(BROWSER.div(:id,'clusters').div(:class,/cluster/).html)
4
+ @ticket = ResultsCluster.new(type,doc)
5
+ end
6
+
7
+ Then /^verifico que exista el icono de impresion$/ do
8
+ BROWSER.div(:id,'clusters').divs(:class,'cluster flights-cluster oldCluster').each do |cluster|
9
+ cluster.link(:class,'main-sprite icon-print icon').should visible("No se mostro el icono de impresion")
10
+ end
11
+ end
12
+
13
+ Then /^abro el popup de impresion$/ do
14
+ #BROWSER.div(:id,'clusters').div(:class,/cluster/).link(:class,'main-sprite icon-print icon').click
15
+ # attach_browser(BROWSER, :title, "Imprimir")
16
+ # sleep(1)
17
+ # errores_http(BROWSER)
18
+ # BROWSER.div(:id,'clusters').divs(:class,/cluster flights-cluster/).length.should_not is_greater_than(1)
19
+ # attach_browser(BROWSER, :url, ($SITE=="BR") ? "decolar" : "despegar")
20
+ end
21
+
22
+ Then /^verifico que los datos sean correctos$/ do
23
+ end
24
+
25
+ Then /^envio a imprimir$/ do
26
+ end
@@ -0,0 +1,6 @@
1
+ # -*- encoding : utf-8 -*-
2
+ Then /^Verifico que se propaguen los parametros "(.*)""(.*)""(.*)"$/ do |site,cabotage,type|
3
+ @search = Class.const_get("MockSearch#{type.capitalize}").new(site,$ENV,cabotage)
4
+ BROWSER.goto(@search.generate_url_results_search("?params=1"))
5
+ BROWSER.url.should equal(@search.generate_url_results_search("?params=1").gsub(/search/,'results'))
6
+ end
@@ -0,0 +1,80 @@
1
+ # -*- encoding : utf-8 -*-
2
+ Then /^Verifico que exista el icono de enviar recomendacion$/ do
3
+ BROWSER.div(:class,'actions').div(:class,'icons').span(:class,'main-sprite icon-mail icon').should visible
4
+ end
5
+
6
+ When /^Hago click en el icono de enviar recomendacion$/ do
7
+ BROWSER.div(:class,'actions').div(:class,'icons').span(:class,'main-sprite icon-mail icon').click
8
+ sleep(1)
9
+ if BROWSER.li(:class,"item itinerary cluster-item itinerary-required itinerary-error").present?
10
+ puts "Hay mas de un itinerario. Se selecciona el primero"
11
+ BROWSER.label(:for,"0-outbound-0").li(:class,'radio').click
12
+ if BROWSER.div(:class,"sub-cluster inbound").present?
13
+ BROWSER.label(:for,"0-inbound-0").li(:class,'radio').click
14
+ end
15
+ BROWSER.div(:class,'actions').div(:class,'icons').span(:class,'main-sprite icon-mail icon').click
16
+ end
17
+ end
18
+
19
+ Then /^Verifico que cargue el contenido del popup$/ do
20
+ Watir::Wait.until{BROWSER.div(:class,"flights-popup").present?}
21
+ end
22
+
23
+ When /^Hago click en el boton de enviar$/ do
24
+ BROWSER.div(:id,"popup-email").link(:class,'btn-send flights-send-button').click
25
+ end
26
+
27
+ Then /^Verifico que el nombre del remitente sea un campo obligatorio$/ do
28
+ BROWSER.div(:id,"popup-email").input(:class,"input sender-name flights-input error").should visible
29
+ end
30
+
31
+ Then /^Verifico que el mail del remitente sea un campo obligatorio$/ do
32
+ BROWSER.div(:id,"popup-email").input(:class,"input sender flights-input error").should visible
33
+ end
34
+
35
+ Then /^Verifico que el mail del destinatario sea un campo obligatorio$/ do
36
+ BROWSER.div(:id,"popup-email").input(:class,"input receiver flights-input error").should visible
37
+ end
38
+
39
+ Then /^Verifico que el mail del remitente tenga un formato valido$/ do
40
+ BROWSER.input(:class,"input sender flights-input error").present?.should be_true
41
+ end
42
+
43
+ Then /^Verifico que el mail del destinatario tenga un formato valido$/ do
44
+ BROWSER.input(:class,"input receiver flights-input error").present?.should be_true
45
+ end
46
+
47
+ Then /^Verifico que el asunto sea correcto "(.*)"$/ do |text|
48
+ BROWSER.input(:class,"input subject placeholder").placeholder.strip.should match(text)
49
+ end
50
+
51
+ Then /^Verifico que el comentario por default sea correcto "(.*)"$/ do |text|
52
+ BROWSER.textarea(:class,"input message flights-input").value.strip.match(text).should be_true
53
+ end
54
+
55
+ When /^Completo el nombre del remitente "(.*)"$/ do |text|
56
+ BROWSER.text_field(:id,"sender-name").set(text)
57
+ end
58
+
59
+ When /^Completo el mail del remitente "(.*)"$/ do |text|
60
+ BROWSER.text_field(:id,"sender").set(text)
61
+ end
62
+
63
+ When /^Completo el mail del destinatario "(.*)"$/ do |text|
64
+ BROWSER.text_field(:id,"receiver").set(text)
65
+ end
66
+
67
+ Then /^Verifico que se haya enviado correctamente el email$/ do
68
+ Watir::Wait.until{BROWSER.p(:class,"email-feedback").present?}
69
+ end
70
+
71
+ Then /^Verifico que el texto de feedback este bien formado "(.*)"$/ do |text|
72
+ BROWSER.p(:class,"email-feedback").text.strip.should match(text)
73
+ end
74
+
75
+ When /^Recorro el resto de los clusters$/ do
76
+ doc = Hpricot.parse(BROWSER.html)
77
+ (doc/"div.cluster").each do |cluster|
78
+ (!(cluster/"span[@class='main-sprite icon-mail icon']").empty?).should be_true
79
+ end
80
+ end
@@ -0,0 +1,70 @@
1
+ # -*- encoding : utf-8 -*-
2
+ When /^Elijo un itinerario y levanto los datos para ingresar al popup del tipo "(.*)"$/ do |type|
3
+ json = @search.get_results_search_service
4
+ @session_expired = [true,false][rand(2)]
5
+ url = @search.host()
6
+ @popup_url = case type
7
+ when /roundtrip/ then url = url + "/shop/flights/test/render/roundtrip/#{@search.path}/#{json['result']['metadata']['ticket']['hash']}/#{@session_expired ? -1 : json['result']['metadata']['ticket']['version']}/#{json['result']['items'][0]['itinerariesBox']['matchingInfoMap']['_0_0']['id']}"
8
+ when /oneway/ then url = url + "/shop/flights/test/render/oneway/#{@search.path}/#{json['result']['metadata']['ticket']['hash']}/#{@session_expired ? -1 : json['result']['metadata']['ticket']['version']}/#{json['result']['items'][0]['itinerariesBox']['matchingInfoMap']['_0_-1']['id']}"
9
+ when /multipledestinations/ then url = url + "/shop/flights/test/render/multipledestinations/#{@search.path}/#{json['result']['metadata']['ticket']['hash']}/#{@session_expired ? -1 : json['result']['metadata']['ticket']['version']}/#{json['result']['items'][0]['itinerary']['itineraryInfo']['id']}"
10
+ end
11
+ puts @popup_url
12
+ end
13
+
14
+ When /^Fuerzo la aparicion del popup de no disponibilidad$/ do
15
+ BROWSER.goto(@popup_url)
16
+ sleep(2)
17
+ end
18
+
19
+ Then /^Espero que cargue el popup de no disponibilidad$/ do
20
+ Watir::Wait.until(timeout = 120){(BROWSER.div(:id,'render').present? and BROWSER.div(:class, 'clusters').present?)}
21
+ end
22
+
23
+ Then /^Valido render "(.*)"$/ do |type|
24
+ validate_render(@popup_url,type)
25
+ end
26
+
27
+ And /^Valido los items de render$/ do
28
+ @results = []
29
+ num = 0
30
+ page = 0
31
+ while true
32
+ doc = Hpricot.parse(BROWSER.html)
33
+ (doc/"div.clusters//div.cluster").each do |ticket_tmp|
34
+ ticket = RenderCluster.new(@search.type,ticket_tmp)
35
+ @results << ticket
36
+ cluster_info = JSON.parse(ticket_tmp.attributes['data-cluster-info'])
37
+ validar_fechas(ticket,@search)
38
+ validar_destinos(ticket,@search,ticket_tmp)
39
+ unless ticket.tarifas['total'].empty?
40
+ ticket.validarSumaDesgloce
41
+ ticket.validarEcuacionTarifasPorCantidadDePasajeros(@search.adt)
42
+ ticket.validarResolucionAFIP
43
+ end
44
+ @session_expired ? validate_prices_session_expired(ticket) : validate_prices_without_session_expired(ticket)
45
+ validar_button(ticket_tmp)
46
+ num = num + 1
47
+ end
48
+ break if other_page(page)
49
+ page += 1
50
+ sleep(2)
51
+ end
52
+ end
53
+
54
+ And /^Valido el orden de los cluster de render$/ do
55
+ first = @results.first
56
+ @results.each do |ticket|
57
+ if first.tarifas['total'].valor > ticket.tarifas['total'].valor
58
+ puts "El orden esta incorrecto, #{first.tarifas['total'].valor} < #{ticket.tarifas['total'].valor}"
59
+ end
60
+ first = ticket
61
+ end
62
+ end
63
+
64
+ And /^Valido el popup de mas detalles del primer cluster de render$/ do
65
+ begin
66
+ mostrar_mas_detalles_nr(@search)
67
+ rescue Selenium::WebDriver::Error::StaleElementReferenceError
68
+ puts "Rompio arreglar"
69
+ end
70
+ end
@@ -0,0 +1,157 @@
1
+ # encoding : utf-8
2
+
3
+ When /^Levanto los tag que deben mostrarse segun la ciudad buscada para landing$/ do
4
+ cities = YAML.load(File.open("features/data/tag_microsoft.yml"))
5
+ iata = BROWSER.url.match(/\/(...)\/(...)\//)[2].upcase
6
+ puts iata
7
+ @temp = cities[$SITE].select{|city| city['City']==iata}
8
+ if @temp.empty?
9
+ @temp = cities[$SITE].select{|city| city['City']=="DEF"}
10
+ end
11
+ end
12
+
13
+ When /^Levanto los tag que deben mostrarse segun la ciudad buscada para una busqueda "(.*)"$/ do |type|
14
+ cities = YAML.load(File.open("features/data/tag_microsoft.yml"))
15
+ if type == "multipledestinations"
16
+ to_city = @search.city_to_3.code
17
+ else
18
+ to_city = @search.city_to_1.code
19
+ end
20
+ puts to_city
21
+ @temp = cities[$SITE].select{|city| city['City']==to_city}
22
+ if @temp.empty?
23
+ @temp = cities[$SITE].select{|city| city['City']=="DEF"}
24
+ end
25
+ end
26
+
27
+ Then /^Verifico que se muestre en el codigo fuente$/ do
28
+ doc = Hpricot.parse(BROWSER.html)
29
+ tag = (doc/"img").select{|img| img.attributes['src'].match(/view.atdmt.com/)}
30
+ tag.first.should be_true
31
+ (tag.length == 1).should be_true
32
+ puts @temp[0]["Tag"]
33
+ puts tag.first.attributes['src']
34
+ @temp[0]["Tag"].match(tag.first.attributes['src']).should be_true
35
+ end
36
+
37
+ Then /^el site es "(.*)"$/ do |sites|
38
+ $SITE.should match(sites)
39
+ end
40
+
41
+ And /^Verifico el segundo tag de google en (resultado|home) de (landing|fgui|checkout)$/ do |page,product|
42
+ doc = Hpricot.parse(BROWSER.html)
43
+ tag_script = (doc/"script[@type='text/javascript']").select{|script| script.inner_text.match(/google_custom_params/)}
44
+ tag_script.first.should be_true
45
+ (tag_script.length == 1).should be_true
46
+ vars = tag_script.first.inner_text.split(";")
47
+ vars.delete_at(-1)
48
+ tmp = Hash.new
49
+ vars.each do |option|
50
+ (tmp[option.strip.match(/var (.+) \= (.+)/)[1]]=option.gsub(/"|\n/,'').match(/var (.+) \= (.+)/)[2].to_s) unless option.strip.match("document.write")
51
+ end
52
+ tmp['google_conversion_id'].should match("\\d")
53
+ tmp['google_conversion_label'].should match("(.+)")
54
+ if product=="landing"
55
+ match = BROWSER.url.match(/\/(...)\/(...)\//)
56
+ tmp['google_custom_params'].should match("{ CustomA: '#{$SITE}',CustomB: 'D',CustomC: '6',CustomD: '1',CustomE: '#{match[1].upcase}',CustomF: '#{match[2].upcase}'}")
57
+ elsif product=="fgui"
58
+ if @search.description == "oneway"
59
+ match = BROWSER.url.match(/\/(...)\/(...)\/(....\-..\-..)\//)
60
+ tmp['google_custom_params'].should match("{ CustomA: '#{$SITE}',CustomB: 'D',CustomC: '2',CustomD: '1',CustomE: '#{match[1].upcase}',CustomF: '#{match[2].upcase}',CustomH: '.',CustomI: '.',CustomJ: '#{match[3].upcase}'}")
61
+ elsif @search.description == "roundtrip"
62
+ match = BROWSER.url.match(/\/(...)\/(...)\/(....\-..\-..)\/(....\-..\-..)/)
63
+ tmp['google_custom_params'].should match("{ CustomA: '#{$SITE}',CustomB: 'D',CustomC: '2',CustomD: '1',CustomE: '#{match[1].upcase}',CustomF: '#{match[2].upcase}',CustomH: '.',CustomI: '.',CustomJ: '#{match[3].upcase}',CustomK: '#{match[4].upcase}'}")
64
+ end
65
+ else
66
+ if @search.description == "oneWay"
67
+ tmp['google_custom_params'].should match("{ CustomA: '#{$SITE}',CustomB: 'D',CustomC: '5',CustomD: '1',CustomE: '#{@search.city_from_1.code}',CustomF: '#{@search.city_to_1.code}',CustomG: '.',CustomH: '.',CustomI: '.',CustomJ: '#{@search.date_from_1}',CustomO: '..'}")
68
+ elsif @search.description == "roundTrip"
69
+ tmp['google_custom_params'].should match("{ CustomA: '#{$SITE}',CustomB: 'D',CustomC: '5',CustomD: '1',CustomE: '#{@search.city_from_1.code}',CustomF: '#{@search.city_to_1.code}',CustomG: '.',CustomH: '.',CustomI: '.',CustomJ: '#{@search.date_from_1}',CustomK: '....\-..\-..',CustomO: '..'}")
70
+ end
71
+ end
72
+ unless product=="checkout"
73
+ tmp['google_remarketing_only'].should match("true")
74
+ tag_noscript = (doc/"noscript").select{|script| script.inner_html.match(/googleads/)}[1]
75
+ tag_noscript.inner_html.gsub(/\n\r/,'').should match("(.+)\/\/googleads.g.doubleclick.net\/pagead\/viewthroughconversion\/#{tmp['google_conversion_id']}\/(.+)")
76
+ (doc/"script[@src='http://www.googleadservices.com/pagead/conversion.js']").should_not is_empty
77
+ end
78
+ end
79
+
80
+ And /^Verifico el primer tag de google en (resultado|home) de (landing|fgui)$/ do |page,product|
81
+ doc = Hpricot.parse(BROWSER.html)
82
+ tag_script = (doc/"script[@type='text/javascript']").select{|script| script.inner_text.match(/google_conversion_language/)}
83
+ tag_script.first.should be_true
84
+ (tag_script.length == 1).should be_true
85
+ vars = tag_script.first.inner_text.split(";")
86
+ vars.delete_at(-1)
87
+ tmp = Hash.new
88
+ vars.each{|option| tmp[option.strip.match(/var (.+) \= (.+)/)[1]]=option.gsub(/"|\n/,'').match(/var (.+) \= (.+)/)[2].to_s }
89
+ tmp['google_conversion_id'].should match("\\d")
90
+ tmp['google_conversion_language'].should match("en")
91
+ tmp['google_conversion_format'].should match("3")
92
+ tmp['google_conversion_color'].should match("666666")
93
+ tmp['google_conversion_label'].should match(".+")
94
+ tmp['google_conversion_value'].should match(0)
95
+ tag_noscript = (doc/"noscript").select{|script| script.inner_html.match(/googleadservices/)}[0]
96
+ tag_noscript.inner_html.gsub(/\n\r/,'').should match("(.+)\/\/www.googleadservices.com\/pagead\/conversion\/#{tmp['google_conversion_id']}\/(.+)")
97
+ (doc/"script[@src='http://www.googleadservices.com/pagead/conversion.js']").should_not is_empty
98
+ end
99
+
100
+ And /^Verifico el tag de facebook$/ do
101
+ if $SITE.match("MX|CO|BR")
102
+ doc = Hpricot.parse(BROWSER.html)
103
+ tag_script = (doc/"script[@type='text/javascript']").select{|script| script.inner_text.match(/fb_param/)}
104
+ tag_script.first.should be_true
105
+ (tag_script.length == 1).should be_true
106
+ tag_noscript = (doc/"noscript").select{|script| script.inner_html.match(/facebook/)}[0]
107
+ tag_noscript.inner_html.gsub(/\n\r/,'').should match('(.+)www.facebook.com\/offsite_event.php\?id\=(.+)')
108
+ end
109
+ end
110
+
111
+ And /^Verifico el tag de groovinads/ do
112
+ doc = Hpricot.parse(BROWSER.html)
113
+ tag_groovinads = (doc/"img").select{|img| img.attributes['src'].match(/groovinads.com/)}
114
+ tag_groovinads.nil?.should_not be_true
115
+ (tag_groovinads.length == 1).should be_true
116
+ tag_groovinads.first.attributes['src'].strip.no_accents.gsub(/\n\r/,'').should match('http:\/\/ads01.groovinads.com\/grv\/track\/bhpx.os\?idc\=81\&sku\=\{SKU\}\&idcategory\=\{IDCATEGORY\}|http:\/\/ads01.groovinads.com\/grv\/track\/bhpx.os\?idc\=81&sku\=%7BSKU%7D&idcategory\=%7BIDCATEGORY%7D')
117
+ end
118
+
119
+ And /^Verifico el logger en (resultado|home) de (landing|fgui)$/ do |page,product|
120
+ doc = Hpricot.parse(BROWSER.html)
121
+ img = (doc/"img").select{|img| img.attributes['src'].match(/logger.asp/)}
122
+ img.nil?.should_not be_true
123
+ (img.length == 1).should be_true
124
+ img.first.attributes['src'].strip.no_accents.gsub(/\n\r/,'').should match("(.+)logger.asp.{1,3}pagina\=\/shop\/flights\/results\/#{@search.description}\/#{@search.path}(.+)")
125
+ end
126
+
127
+ And /^Verifico el tag de canonical$/ do
128
+ if @search.description == "roundtrip"
129
+ doc = Hpricot.parse(BROWSER.html)
130
+ link = (doc/"link").select{|link| link.attributes['rel']=="canonical"}
131
+ link.first.attributes['href'].should match("#{@search.generate_url_landing_search(@search.city_from_1.code.downcase,@search.city_to_1.code.downcase)}/")
132
+ end
133
+ end
134
+
135
+ And /^Verifico el pixel de trackeame en checkout$/ do
136
+ doc = Hpricot.parse(BROWSER.html)
137
+ pixel_trackeame = (doc/"img#PixelTrackeame").first
138
+ pixel_trackeame.nil?.should_not be_true
139
+ pixel_trackeame.attributes['src'].should match("fl=checkout&pr=flights&cc=#{$SITE}&exch=(.+)&pri=(.+)&cur=(#{currency($SITE)}|USD)&dn=Despegar")
140
+ end
141
+
142
+ And /^Verifico el pixel de trackeame en gracias$/ do
143
+ doc = Hpricot.parse(BROWSER.html)
144
+ pixel_trackeame = (doc/"img#PixelTrackeame").first
145
+ pixel_trackeame.nil?.should_not be_true
146
+ pixel_trackeame.attributes['src'].should match("fl=thanks&idcro=#{@id_cro}&pr=flights&cc=#{$SITE}&exch=(.+)&pri=(.+)&cur=(#{currency($SITE)}|USD)&dn=Despegar")
147
+ end
148
+
149
+ And /^Verifico el pixel de e-planning$/ do
150
+ doc = Hpricot.parse(BROWSER.html)
151
+ tag_script = (doc/"script[@language='JavaScript']")
152
+ tag_script.first.inner_html.empty?.should_not be_true
153
+ (tag_script.length == 1).should be_true
154
+ tag_planning = (doc/"script").select{|script| script.inner_text.match(/planning/)}
155
+ tag_planning.first.inner_html.empty?.should_not be_true
156
+ (tag_planning.length >= 1).should be_true
157
+ end
@@ -0,0 +1,27 @@
1
+ # -*- encoding : utf-8 -*-
2
+ When /^elijo la opcion de bussines y busco$/ do
3
+ BROWSER.checkbox(:id,'searchBusinessOnlyChkBox').set(true)
4
+ BROWSER.link(:class,'buttonSprite ctn-searchbutton').click
5
+ end
6
+
7
+ When /^busco resultados con la opcion de bussines$/ do
8
+ BROWSER.goto(BROWSER.url + @search.get_advanced_bussinnes)
9
+ end
10
+
11
+ And /^Verifico que exista el banner de upgrade bussines$/ do
12
+ unless BROWSER.div(:id,'best-price-alert').div(:class,'secondary-message betterUpsellPriceButton').present?
13
+ BROWSER.div(:id,'best-price-alert').link(:class,'flights-best-price-button betterUpsellPriceButton').should visible
14
+ end
15
+ end
16
+
17
+ And /^Verifico que el banner redirija a la url correcta$/ do
18
+ if BROWSER.div(:id,'best-price-alert').div(:class,'secondary-message betterUpsellPriceButton').present?
19
+ puts BROWSER.div(:id,'best-price-alert').div(:class,'secondary-message betterUpsellPriceButton').href
20
+ puts "#{BROWSER.url}#{@search.advanced_bussinnes}"
21
+ (BROWSER.url + "#{@search.advanced_bussinnes}").should match(BROWSER.div(:id,'best-price-alert').div(:class,'secondary-message betterUpsellPriceButton').href)
22
+ else
23
+ puts BROWSER.link(:class,'flights-best-price-button betterUpsellPriceButton').href
24
+ puts "#{BROWSER.url}#{@search.advanced_bussinnes}"
25
+ (BROWSER.url + "#{@search.advanced_bussinnes}").should match(BROWSER.link(:class,'flights-best-price-button betterUpsellPriceButton').href)
26
+ end
27
+ end
@@ -0,0 +1,69 @@
1
+ # -*- encoding : utf-8 -*-
2
+ When /^Verifico el nuevo loader$/ do
3
+ puts " URL: #{BROWSER.url} "
4
+ if BROWSER.div(:id,'results-loader').present? and !@search.description.match(/multipledestinations/)
5
+ begin
6
+ Watir::Wait.until(timeout=25){BROWSER.div(:id,'results-loader').span(:class,'nibbler-iterated-text-description').exists? and !BROWSER.div(:id,'results-loader').span(:class,'nibbler-iterated-text-description').text.empty?}
7
+ text = BROWSER.div(:id,'results-loader').span(:class,'nibbler-iterated-text-description').text
8
+ unless text.empty?
9
+ unless text.no_accents.downcase.match("searching flights to #{@search.city_to_1.name($SITE).downcase} by|buscando vuelos hacia #{@search.city_to_1.name($SITE).downcase} por|procurando voos a #{@search.city_to_1.name($SITE).downcase} por")
10
+ airlines=@search.get_indec_airlines($ENV)
11
+ airlines.should is_empty
12
+ end
13
+ else
14
+ puts "Fallo la validacion en el loader con el texto de aerolineas"
15
+ end
16
+ text_hotels = BROWSER.div(:id,'results-loader').div(:class,'nibbler-second-text').text
17
+ unless text_hotels.empty?
18
+ text_hotels.no_accents.downcase.should match("hoteles en #{@search.city_to_1.name($SITE).downcase}|hotels in #{@search.city_to_1.name($SITE).downcase} , best price guaranteed|hoteles en #{@search.city_to_1.name($SITE).downcase} con el mejor precio garantizado|hoteis em #{@search.city_to_1.name($SITE).downcase} com o melhor preco garantido")
19
+ hotels_count = BROWSER.div(:id,'results-loader').text.gsub(/\D/,'')
20
+ hotels_count.to_i.should is_greater_than(0)
21
+ else
22
+ puts "Fallo la validacion en el loader con el texto de hoteles"
23
+ end
24
+ rescue Watir::Wait::TimeoutError
25
+ puts "Timeout loader!"
26
+ end
27
+ end
28
+ end
29
+
30
+ When /^Espero que termine de cargar$/ do
31
+ step "Verifico que la pagina no rompa"
32
+ begin
33
+ puts " URL: #{BROWSER.url} "
34
+ Watir::Wait.until(timeout = 120){!BROWSER.div(:id,'results-loader').present? and !BROWSER.div(:id,'results-update').present? and !BROWSER.div(:class,'results-update').present? and !BROWSER.div(:class,'update-message').present?}
35
+ rescue Timeout::Error, Watir::Wait::TimeoutError
36
+ puts "Timeout de resultados"
37
+ end
38
+ sleep(1)
39
+ end
40
+
41
+ Then /^Verifico que resultados cargue correctamente$/ do
42
+ puts " URL: #{BROWSER.url} "
43
+ (BROWSER.div(:id,'results-error').present? or BROWSER.div(:id,'clusters').div(:class,'cluster flights-cluster').present?).should be_true
44
+ end
45
+
46
+ Then /^Verifico que traiga resultados$/ do
47
+ unless brought_results?(BROWSER)
48
+ json = @search.get_results_search_service
49
+ if json["result"]["data"]["metadata"]["status"]["code"].match("NO_RESULTS|SUCCEEDED")
50
+ pending("No se encontraron resultados")
51
+ else
52
+ json["result"]["data"]["metadata"]["status"]["code"].should equal("NO_RESULTS")
53
+ end
54
+ end
55
+ end
56
+
57
+ Then /^Verifico si trajo resultados$/ do
58
+ unless brought_results?(BROWSER)
59
+ raise("No trajo resultados")
60
+ end
61
+ end
62
+
63
+ Then /^Vuelvo a la pagina anterior$/ do
64
+ BROWSER.back
65
+ end
66
+
67
+ Then /^Refresco la pagina$/ do
68
+ BROWSER.refresh
69
+ end
@@ -0,0 +1,21 @@
1
+ # -*- encoding : utf-8 -*-
2
+ And /^Verifico si se muestran los beneficios en resultados$/ do
3
+ if BROWSER.div(:class,'benefit-alert').present?
4
+ @benefits = true
5
+ BROWSER.div(:class,'benefit-alert').span(:class,'smile icon-smile main-sprite').should visible("icono smile")
6
+ BROWSER.div(:class,'benefit-alert').p(:class,'text').should visible("texto de beneficio")
7
+ BROWSER.div(:class,'benefit-alert').p(:class,'text').text.should match("\¡Con su compra obtenga (.*)\!")
8
+ @text_benefits = BROWSER.div(:class,'benefit-alert').p(:class,'text').text
9
+ end
10
+ end
11
+
12
+ And /^Verifico si se muestran los beneficios en checkout$/ do
13
+ if @benefits
14
+ BROWSER.div(:class,'benefit-alert').should visible("beneficios en checkout")
15
+ BROWSER.div(:class,'benefit-alert').span(:class,'smile icon-smile main-sprite').should visible("icono smile en checkout")
16
+ BROWSER.div(:class,'benefit-alert').p(:class,'text').should visible("texto de beneficio en checkout")
17
+ BROWSER.div(:class,'benefit-alert').p(:class,'text').text.should equal(@text_benefits)
18
+ else
19
+ BROWSER.div(:class,'benefit-alert').should_not visible("beneficios en checkout")
20
+ end
21
+ end
@@ -0,0 +1,82 @@
1
+ # -*- encoding : utf-8 -*-
2
+ When /^Ingreso a la pagina de resultados de "(.*)" para una busqueda "(.*)"$/ do |site,type|
3
+ set_site(site)
4
+ @search = Class.const_get("MockSearch#{type.capitalize}").new(site,$ENV,"nil")
5
+ BROWSER.goto(@search.generate_url_results_search)
6
+ set_language(site)
7
+ set_cookies(BROWSER)
8
+ end
9
+
10
+ When /^Ingreso a resultados que pase por "(.*)" en "(.*)" para una busqueda "(.*)" de tipo "(.*)"$/ do |site_url,site,type,cabotage|
11
+ set_site(site)
12
+ @search = Class.const_get("MockSearch#{type.capitalize}").new(site,$ENV,cabotage)
13
+ BROWSER.goto(@search.generate_url_results_search("",site_url))
14
+ set_language(site)
15
+ set_cookies(BROWSER)
16
+ end
17
+
18
+ When /^Ingreso a la pagina de resultados en "(.*)" para una busqueda "(.*)" del tipo "(.*)"$/ do |site,type,cabotage|
19
+ set_site(site)
20
+ @search = Class.const_get("MockSearch#{type.capitalize}").new(site,$ENV,cabotage)
21
+ begin
22
+ BROWSER.goto(@search.generate_url_results_search)
23
+ rescue Timeout::Error
24
+ stop_browser(BROWSER)
25
+ end
26
+ set_language(site)
27
+ set_cookies(BROWSER)
28
+ end
29
+
30
+ When /^Ingreso a la pagina de resultados en "(.*)" para una busqueda "(.*)" con origen "(.*)" y destino "(.*)" de tipo "(.*)"$/ do |site,type,from,to,cabotage|
31
+ set_site(site)
32
+ @search = Class.const_get("MockSearch#{type.capitalize}").new(site,$ENV,cabotage,{"from"=>from.upcase,"to"=>to.upcase})
33
+ begin
34
+ BROWSER.goto(@search.generate_url_results_search)
35
+ rescue Timeout::Error
36
+ stop_browser(BROWSER)
37
+ end
38
+ set_language(site)
39
+ set_cookies(BROWSER)
40
+ end
41
+
42
+ When /^Ingreso a la pagina de resultados en "(.*)" para una busqueda "(.*)" que desambigue por "(.*)"$/ do |site,type,city|
43
+ set_site(site)
44
+ @search = Class.const_get("MockSearch#{type.capitalize}").new(site,$ENV,"true")
45
+ puts @search.generate_url_disambiguation_airports(city)
46
+ BROWSER.goto(@search.generate_url_disambiguation_airports(city))
47
+ set_language(site)
48
+ set_cookies(BROWSER)
49
+ end
50
+
51
+ When /^Ingreso a la pagina de resultados en "(.*)" para una busqueda "(.*)" del tipo "(.*)" sin gui$/ do |site,type,cabotage|
52
+ set_site(site)
53
+ @search = Class.const_get("MockSearch#{type.capitalize}").new(site,$ENV,cabotage)
54
+ puts @search.generate_url_results_search
55
+ @get = HTTParty.get(@search.generate_url_results_search,:headers=>{"x-uow"=>"ROBOT"})
56
+ end
57
+
58
+ When /^Ingreso a la pagina de checkout de agencia en "(.*)" para una busqueda "(.*)" del tipo "(.*)"$/ do |site,type,cabotage|
59
+ set_site(site)
60
+ @search = Class.const_get("MockSearch#{type.capitalize}").new(site,$ENV,cabotage)
61
+ begin
62
+ puts @search.generate_url_checkout + "?agency=AG10560"
63
+ BROWSER.goto(@search.generate_url_checkout + "?agency=AG10560")
64
+ rescue
65
+ pending("No se encontraron resultados para la busqueda #{@search.generate_url_results_search}")
66
+ end
67
+ set_language(site)
68
+ set_cookies(BROWSER)
69
+ end
70
+
71
+ When /^Ingreso a la pagina de checkout en "(.*)" para una busqueda "(.*)" del tipo "(.*)"$/ do |site,type,cabotage|
72
+ set_site(site)
73
+ @search = Class.const_get("MockSearch#{type.capitalize}").new(site,$ENV,cabotage)
74
+ begin
75
+ puts @search.generate_url_checkout
76
+ BROWSER.goto(@search.generate_url_checkout)
77
+ rescue
78
+ pending("No se encontraron resultados para la busqueda #{@search.generate_url_results_search}")
79
+ end
80
+ set_language(site)
81
+ set_cookies(BROWSER)
82
+ end