flights_gui_henry_tests 1.8.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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