flights_gui_tests 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (76) hide show
  1. checksums.yaml +4 -4
  2. data/features/data/miles.yml +5 -5
  3. data/features/step_definitions/checkout/cash_payment_steps.rb +57 -0
  4. data/features/step_definitions/checkout/checkout_steps.rb +48 -5
  5. data/features/step_definitions/checkout/compra_duplicada_steps.rb +27 -0
  6. data/features/step_definitions/checkout/cupones_steps.rb +35 -0
  7. data/features/step_definitions/checkout/error_messages_steps.rb +245 -0
  8. data/features/step_definitions/checkout/fast_checkout_steps.rb +51 -0
  9. data/features/step_definitions/checkout/form_steps.rb +1 -1
  10. data/features/step_definitions/checkout/load_steps.rb +14 -1
  11. data/features/step_definitions/checkout/price_jump_steps.rb +67 -0
  12. data/features/step_definitions/checkout/upselling_steps.rb +55 -0
  13. data/features/step_definitions/checkout/verifications_steps.rb +36 -0
  14. data/features/step_definitions/{results/desambiguation_steps.rb → desambiguation_steps.rb} +10 -8
  15. data/features/step_definitions/landing/landing_steps.rb +51 -4
  16. data/features/step_definitions/landing/load_steps.rb +8 -0
  17. data/features/step_definitions/landing/long_tail_steps.rb +48 -0
  18. data/features/step_definitions/landing/negative_steps.rb +109 -0
  19. data/features/step_definitions/page_steps.rb +4 -0
  20. data/features/step_definitions/results/filters_steps.rb +15 -7
  21. data/features/step_definitions/results/load_steps.rb +14 -0
  22. data/features/step_definitions/results/matrix_steps.rb +22 -0
  23. data/features/step_definitions/results/results_steps.rb +1 -1
  24. data/features/step_definitions/{results/tags_steps.rb → tags_steps.rb} +93 -1
  25. data/features/step_definitions/thanks/load_steps.rb +9 -2
  26. data/features/step_definitions/thanks/thanks_steps.rb +44 -7
  27. data/features/support/classes/clusters/checkout_cluster.rb +9 -4
  28. data/features/support/env.rb +2 -0
  29. data/features/support/modules/checkout/datos_de_facturacion.rb +13 -17
  30. data/features/support/modules/checkout/errores.rb +35 -0
  31. data/features/support/modules/checkout/fast_checkout.rb +31 -0
  32. data/features/support/modules/checkout/pasajeros.rb +1 -0
  33. data/features/support/modules/checkout/tarjeta.rb +83 -0
  34. data/features/support/modules/results/filters.rb +1 -1
  35. data/features/support/modules/results/matrix/matrix_airline.rb +4 -0
  36. data/features/support/pages/all_pages.rb +20 -14
  37. data/features/support/pages/checkout/checkout_page.rb +59 -4
  38. data/features/support/pages/checkout/popup_results_page.rb +5 -3
  39. data/features/support/pages/landing/search_page.rb +21 -2
  40. data/features/support/pages/results/desambiguation_airports_page.rb +8 -2
  41. data/features/support/pages/results/search_page.rb +8 -3
  42. data/features/support/pages/thanks/thanks_page.rb +28 -0
  43. data/features/tests/checkout/agency.feature +35 -0
  44. data/features/tests/checkout/book_ok.feature +9 -1
  45. data/features/tests/checkout/cac.feature +56 -0
  46. data/features/tests/checkout/cash_payment.feature +55 -0
  47. data/features/tests/checkout/compras_duplicadas.feature +97 -0
  48. data/features/tests/checkout/cupones.feature +37 -0
  49. data/features/tests/checkout/error_messages.feature +84 -0
  50. data/features/tests/checkout/fast_checkout.feature +80 -0
  51. data/features/tests/checkout/low_cost.feature +52 -0
  52. data/features/tests/checkout/online_payment.feature +55 -0
  53. data/features/tests/checkout/price_jump.feature +107 -0
  54. data/features/tests/checkout/providers.feature +59 -0
  55. data/features/tests/checkout/seguros.feature +46 -0
  56. data/features/tests/flights_tracker/search.feature +1 -1
  57. data/features/tests/landing/disambiguation_airports.feature +88 -0
  58. data/features/tests/landing/filters.feature +88 -0
  59. data/features/tests/landing/integration.feature +148 -0
  60. data/features/tests/landing/long_tail.feature +171 -0
  61. data/features/tests/landing/matrix.feature +154 -0
  62. data/features/tests/landing/negative.feature +152 -0
  63. data/features/tests/landing/orders.feature +81 -0
  64. data/features/tests/landing/pagination.feature +142 -0
  65. data/features/tests/landing/reviews.feature +137 -0
  66. data/features/tests/landing/search.feature +2 -2
  67. data/features/tests/landing/sort.feature +142 -0
  68. data/features/tests/landing/tags.feature +144 -0
  69. data/features/tests/results/errors.feature +1 -1
  70. data/features/tests/results/matrix/matrix_price.feature +1 -1
  71. data/features/tests/results/recommendation.feature +2 -2
  72. data/features/tests/results/reviews_airlines.feature +1 -1
  73. data/features/tests/results/search.feature +1 -1
  74. data/flights_gui_tests.gemspec +1 -1
  75. data/henry-context.yml +7828 -191
  76. metadata +39 -4
@@ -0,0 +1,55 @@
1
+ # encoding: utf-8
2
+ Entonces(/^existe la opcion de cobertura$/) do
3
+ @page.cobertura_element.should visible
4
+ end
5
+
6
+ Y(/^elijo "(.*)" si quiero cobertura$/) do |option|
7
+ @page.opcion_seguros_element.set((option=="chequear") ? true : false)
8
+ @page.carga_element.when_not_visible(timeout=60)
9
+ sleep(1)
10
+ end
11
+
12
+ Entonces(/^verifico que se muestre correctamente la caja de seguro sin chequear$/) do
13
+ @page.cobertura_element.should visible("caja de seguros")
14
+ @page.opcion_seguros_element.should visible("checkbox en la caja de seguro")
15
+ @page.cobertura_element.should visible("link de cobertura en la caja de seguro")
16
+ @page.desprotegido_element.should visible("texto de no estoy protegido en la caja de seguro")
17
+ @page.desprotegido_element.text.should match("No estoy protegido")
18
+ end
19
+
20
+ Entonces(/^verifico que el precio del seguro no se muestre en el desglose$/) do
21
+ @page.precio_seguro_desglose_element.should_not visible
22
+ end
23
+
24
+ Entonces(/^verifico que se muestre correctamente la caja de seguro chequeada$/) do
25
+ @page.cobertura_element.should visible("caja de seguros")
26
+ @page.opcion_seguros_element.should visible("checkbox en la caja de seguro")
27
+ @page.cobertura_element.should visible("link de cobertura en la caja de seguro")
28
+ @page.protegido_element.should visible("texto de estoy protegido en la caja de seguro")
29
+ @page.protegido_element.text.should match("Estoy protegido")
30
+ end
31
+
32
+ Entonces(/^verifico que el precio del seguro se muestre correctamente en el desglose$/) do
33
+ @page.precio_seguro_desglose_element.should visible
34
+ price_detail=@page.precio_seguro_desglose_element.span(:class,'amount').text
35
+ price_assistance=@page.precio_seguro_element.text.gsub(/\./,'').match(/(.+)(\D)(\d+) (por persona)/)[3]
36
+ price_detail.gsub(/\./,'').to_i.should be_within(4).of(price_assistance.to_i*(@page.manage_data.adt+@page.manage_data.cnn+@page.manage_data.inf)) unless AllPages.site == "AR"
37
+ end
38
+
39
+ Cuando(/^muestro el popup de la cobertura completa$/) do
40
+ @page.link_cobertura_element.click
41
+ @page.popup_cobertura_element.when_visible(timeout=20)
42
+ end
43
+
44
+ Entonces(/^verifico que se muestre correctamente el popup de la cobertura completa para destino "(.*?)"$/) do |destino|
45
+ popup = @page.popup_cobertura_element
46
+ popup.div(:class,'coverage').should visible("Contenido del popup")
47
+ popup.text.should match_sensitive("ASSIST CARD")
48
+ popup.div(:class,'coverage').span(:class,'upselling-coverage-cell upselling-coverage-code').should visible("Contenido del popup Codigos")
49
+ popup.div(:class,'coverage').span(:class,'upselling-coverage-cell upselling-coverage-title').should visible("Contenido del popup Descripcion")
50
+ popup.div(:class,'coverage').span(:class,'upselling-coverage-cell upselling-coverage-value').should visible("Contenido del popup Values")
51
+ popup.div(:class,'coverage').div(:class,/odd/).span(:class,'upselling-coverage-cell upselling-coverage-value').text.strip.should match(destino.match("MIA") ? 'U\$S' : "€")
52
+ popup.div(:class,'coverage').text.should_not is_empty?
53
+ @page.cerrar_popup_cobertura_element.click
54
+ @page.popup_cobertura_element.when_not_visible(timeout=20)
55
+ end
@@ -0,0 +1,36 @@
1
+ # -*- encoding : utf-8 -*-
2
+ Entonces(/^valido los valores del desglose del checkout$/) do
3
+ @itinerario_checkout = @page.datos_itinerario
4
+ @itinerario_checkout.validarSumaDesgloce.should be_within(4).of(@itinerario_checkout.tarifas['total'].value)
5
+ unless @itinerario_checkout.tarifas['adt'].valor.zero?
6
+ @itinerario_checkout.tarifas['adt'].valor.should be_within(4).of(@itinerario_checkout.tarifas['tarifa_adulto'].valor * @page.manage_data.adt)
7
+ end
8
+ @itinerario_resultados.tarifas.each_pair do |key,value|
9
+ if @itinerario_checkout.tarifas[key] and !value.zero? and value.currency == @itinerario_checkout.tarifas[key].currency
10
+ value.value.should be_within(4).of(@itinerario_checkout.tarifas[key].value)
11
+ end
12
+ end
13
+ end
14
+
15
+ Y(/^verifico que se muestren la caja de clientes felices$/) do
16
+ if AllPages.site=="US"
17
+ @page.clientes_felices_element.should_not visible("Se muestra la caja de comentarios en usa")
18
+ end
19
+ if @page.clientes_felices_element.present?
20
+ happy_clients = @page.clientes_felices_element
21
+ happy_clients.should visible
22
+ happy_clients.div(:class,'ux-common-comment').should visible
23
+ happy_clients.div(:class,'ux-common-comment').text.should match('[A-Z]|[a-z]')
24
+ happy_clients.div(:class,'ux-common-comment-description').should visible
25
+ happy_clients.div(:class,'ux-common-comment-description').span(:class,'flights-comment-description').should visible
26
+ happy_clients.div(:class,'ux-common-comment-description').span(:class,'flights-comment-description').text.no_accents.should match('[A-Z]|[a-z]')
27
+ happy_clients.div(:class,'ux-common-comment-profile').span(:class,'ux-common-comment-name').should visible
28
+ happy_clients.div(:class,'ux-common-comment-profile').span(:class,'ux-common-comment-name').text.no_accents.should match('[A-Z]|[a-z]')
29
+ happy_clients.span(:class,'description').should visible
30
+ happy_clients.span(:class,'description').text.no_accents.should match('Por que \d+ millones de viajeros nos eligen|Why \d+ million travelers choose us|Por que \d+ milhoes de viajantes nos escolhem')
31
+ end
32
+ end
33
+
34
+ Cuando(/^verifico que los precios de las cuotas se muestran correctamente$/) do
35
+ @page.verificar_tipos_de_pago
36
+ end
@@ -1,10 +1,4 @@
1
1
  # encoding: utf-8
2
- Dado(/^una pagina de resultados en "(.*?)" para una busqueda "(.*?)" que desambigue por "(.*?)"$/) do |arg1, arg2, arg3|
3
- Helpers.set_date_language(arg1)
4
- @page = Results::DesambiguationAirportsPage.new($browser)
5
- @page.load_page(arg2,arg1,$ENV,arg3,"true")
6
- end
7
-
8
2
  Cuando(/^espero que termine de cargar la pagina de desambiguacion$/) do
9
3
  @page.mensaje_desambiguacion_element.when_visible(timeout=100)
10
4
  end
@@ -64,7 +58,6 @@ Entonces(/^verifico cada opcion de aeropuerto "(.*?)" en "(.*?)"$/) do |type,cit
64
58
  @iata = (tramo/"ul.airports//p.description")[option+aux].inner_text[-4,3]
65
59
  end
66
60
  end
67
- puts @iata
68
61
  @page.browser.li(:class=>"strech",:index=>i).radio(:class=>'radio',:index=>option+aux).click if @page.browser.li(:class=>"strech",:index=>i).radio(:class=>'radio',:index=>option+aux).exists?
69
62
  i += 1
70
63
  end
@@ -137,8 +130,17 @@ Cuando(/^realizo una nueva busqueda desde desambiguacion de ciudades$/) do
137
130
  end
138
131
 
139
132
  Cuando(/^verifico que las ciudades elegidas sean las correctas$/) do
140
- puts @cities
141
133
  @cities.each do |city|
142
134
  @page.url.should match(city)
143
135
  end
144
136
  end
137
+
138
+ Entonces(/^paso a landing$/) do
139
+ @page.boton_busqueda_element.click
140
+ @page = Landing::SearchPage.new($browser)
141
+ end
142
+
143
+ Entonces(/^verifico que el aeropuerto elegido sea el buscado en landing$/) do
144
+ airports = {"GIG"=>"RIO","SDU"=>"RIO","JDF"=>"JDF","IZA"=>"JDF","CFB"=>"CFB","CAW"=>"CAW","MEA"=>"MEA","CUN"=>"CUN","CZM"=>"CZM"}
145
+ @page.url.downcase.should match("#{airports[@iata].downcase}")
146
+ end
@@ -15,12 +15,12 @@ Y(/^verifico que la ciudad destino sea la que se eligio$/) do
15
15
  @page.ciudad_elegida.should equal(ciudad_destino) unless @page.ciudad_elegida.match(/Guarullos/)
16
16
  end
17
17
 
18
- Entonces(/^valido el sorting de landing en "(.*)"$/) do |pais|
18
+ Entonces(/^valido el sorting de landing$/) do
19
19
  doc = Hpricot.parse(@page.orden_element.html)
20
20
  options = (doc/"option").collect{|option| option.attributes['value']}
21
- if pais=="BR"
21
+ if AllPages.site=="BR"
22
22
  @page.orden_element.value.should match("FARE_ASCENDING")
23
- elsif pais != "MX"
23
+ elsif AllPages.site != "MX"
24
24
  @page.orden_element.value.should match("TOTALFARE_ASCENDING")
25
25
  end
26
26
  options.should include?("FARE_ASCENDING")
@@ -56,4 +56,51 @@ end
56
56
  Y(/^verifico que el valor elejido en landing se encuentre en la lista de resultados$/) do
57
57
  doc = Hpricot.parse(@page.html)
58
58
  matchs = (doc/"div#clusters div.cluster span[@class='price-currency USD'] span.amount").select{|span| (span.inner_text.to_i - @page.datos_de_itinerarios.first.tarifa.valor).abs < 2 }
59
- end
59
+ end
60
+
61
+ Cuando(/^verifico que funcione el paginado correctamente en landing$/) do
62
+ iterator = 2
63
+ while(@page.pagina_siguiente_element.present? and iterator < 5)do
64
+ before_url = @page.url
65
+ @page.pagina_siguiente_element.links[0].click
66
+ Watir::Wait.until(timeout = 5){before_url != @page.url}
67
+ @page.url.should match("(.+)\?pageIndex\=#{iterator}")
68
+ iterator += 1
69
+ end
70
+ end
71
+
72
+ Y(/^verifico que el paginado mantenga los filtros en landing$/) do
73
+ @page.filtros_salidas_elements[0].click
74
+ sleep(0.5)
75
+ if @page.pagina_siguiente_element.present?
76
+ url_with_filter = @page.url
77
+ @page.pagina_siguiente_element.links[0].click
78
+ Watir::Wait.until(timeout = 5){url_with_filter != @page.url}
79
+ @page.url.strip.should equal(url_with_filter.strip.gsub(/\/1\//,"/2/"))
80
+ end
81
+ reset_filter
82
+ end
83
+
84
+ Entonces(/^vuelvo a la primer pagina de landing$/) do
85
+ @page.pagina_previa_element.links[0].click while @page.pagina_previa_element.present?
86
+ end
87
+
88
+ Cuando(/^verifico que el paginado no rompa en la ultima paginas de landing$/) do
89
+ doc = Hpricot.parse(@page.html)
90
+ unless (doc/"div.flights-pagination li.page a").length==1
91
+ url_with_filter = @page.url
92
+ iterator = @page.paginas_elements[-1].text
93
+ @page.paginas_elements[-1].links[0].click
94
+ Watir::Wait.until(timeout = 5){url_with_filter != @page.url}
95
+ @page.url.should match("(.+)\?pageIndex\=#{iterator}")
96
+ end
97
+ end
98
+
99
+ Entonces(/^verifico que se muestre correctamente la review de pasajero$/) do
100
+ pending("No se muestra la review de pasajeros") unless @page.reviews_pasajeros_element.present?
101
+ @page.reviews_pasajeros_element.should visible
102
+ @page.reviews_pasajeros_title_element.text.no_accents.should match("Puntuacion general de vuelos a #{@ciudad_elegida}|Pontuacao geral de voos #{@ciudad_elegida}|Overall rating for flights to #{@ciudad_elegida}")
103
+ if $SITE != "US"
104
+ @page.reviews_pasajeros_title_element.text.no_accents.should match("Ya compraron vuelos a #{@ciudad_elegida}|Ja compraram voos a #{@ciudad_elegida}|")
105
+ end
106
+ end
@@ -7,8 +7,16 @@ Cuando(/^una pagina de landing en "(.*)" del tipo "(.*)"$/) do |pais,tipo|
7
7
  @page.elegir_idioma
8
8
  end
9
9
 
10
+ Dado(/^una pagina de landing en "(.*?)" para una busqueda "(.*?)" que desambigue por "(.*?)"$/) do |arg1, arg2, arg3|
11
+ Helpers.set_date_language(arg1)
12
+ @page = Results::DesambiguationAirportsPage.new($browser)
13
+ @page.load_page_landing(arg2,arg1,$ENV,arg3,"true")
14
+ end
15
+
16
+
10
17
  Entonces(/^espero que termine de cargar la pagina de landing$/) do
11
18
  @page.titulo_element.when_visible(timeout=30)
19
+ sleep(5)
12
20
  end
13
21
 
14
22
  Y(/^verifico que traiga resultados de landing$/) do
@@ -0,0 +1,48 @@
1
+ # encoding: utf-8
2
+ Entonces(/^verifico las nuevas urls de vuelos a destino por aerolinea$/) do
3
+ doc = Hpricot.parse(@page.html)
4
+ options = (doc/"div.ux-flights-filter-airlines")[0]
5
+ options = (options/"ul.items label").reject{|option| option.attributes["class"].match(/selected|disabled|enabled/)}
6
+ @airline = options[rand(options.length)]
7
+ code = (@airline/"img").first.attributes['src'].match(/\/(..)\.png/)[1].strip
8
+ @arrival = @page.url.match(/#{@page.manage_data.host()}\/(vuelos|passagens-aereas|flights)\/(\D{3})\/(\D{3})\/(vuelos|passagens-aereas)-(a|para)-(.+)-(desde|saindo-de)-(.+)/)[3]
9
+ @page.ir(@page.manage_data.generate_url_landing_airline(code,@arrival))
10
+ end
11
+
12
+ Entonces(/^verifico que aparezcan los links propuestos de vuelos a destino por aerolinea$/) do
13
+ doc = Hpricot.parse(@page.html)
14
+ if (doc/"div#seo-links div.category h4.category-title").inner_text.match(/Vuelos a destino por aerolinea|Passagens para destino com Cia A.{1,2}rea|Flights to destination on airline/)
15
+ links = (doc/"div#seo-links ul.list li.item a").select{|a| a.attributes['href'].match(/#{@page.manage_data.host()}\/(vuelos|passagens-aereas|fligths)\/(aerolinea|companhiasaerea)\/(\D{3})\/(..)\/(vuelos|passagens-aereas)-(a|da)-(.+)-(por|para)-(.+)/)}
16
+ links.should_not is_empty?
17
+ end
18
+ end
19
+
20
+ Y(/^verifico que aparezcan los links propuestos de vuelos a destino por aeropuerto de llegada$/) do
21
+ doc = Hpricot.parse(@page.html)
22
+ if (doc/"div#seo-links div.category h4.category-title").inner_text.match(/Vuelos a aeropuertos|Passagens para o Aeroporto|Flights to airport/)
23
+ links = (doc/"div#seo-links ul.list li.item a").select{|a| a.attributes['href'].match(/#{@page.manage_data.host()}\/(vuelos|passagens-aereas|fligths)\/(aeropuerto|aeroporto|airport)\/(\D{3})\/(voos-para-aeroporto|vuelos-a)(.+)/)}
24
+ links.should_not is_empty?
25
+ end
26
+ end
27
+
28
+ Entonces(/^verifico las nuevas urls de vuelos a destino por aeropuerto de llegada$/) do
29
+ doc = Hpricot.parse(@page.html)
30
+ options = (doc/"div.ux-flights-filter-destinyairports label").reject{|option| option.attributes["class"].match(/selected|disabled/) or option.attributes["for"].match(/unique-airport/)}
31
+ @airport = options[rand(options.length)]
32
+ @page.ir(@page.manage_data.generate_url_landing_arrival_airport((@airport/"input").first.attributes['value']))
33
+ end
34
+
35
+ Cuando(/^verifico las nuevas urls de vuelos a destino por aeropuerto de salida$/) do
36
+ doc = Hpricot.parse(@page.html)
37
+ options = (doc/"div.ux-flights-filter-originairports label").reject{|option| option.attributes["class"].match(/selected|disabled/) or option.attributes["for"].match(/unique-airport/)}
38
+ @airport = options[rand(options.length)]
39
+ @page.ir(@page.manage_data.generate_url_landing_origin_airport((@airport/"input").first.attributes['value'],@arrival))
40
+ end
41
+
42
+ Entonces(/^verifico que aparezcan los links propuestos de vuelos a destino por aeropuerto de salida$/) do
43
+ doc = Hpricot.parse(@page.html)
44
+ if (doc/"div#seo-links div.category h4.category-title").inner_text.match(/Vuelos a destino desde aeropuerto origen|Passagens para destino saindo do Aeroporto de Origem|Flights to destination from departure airport/)
45
+ links = (doc/"div#seo-links ul.list li.item a").select{|a| a.attributes['href'].match(/#{@page.manage_data.host()}\/(vuelos|passagens-aereas|fligths)\/(aeropuerto|aeroporto|airport)\/(\D{3})\/(\D{3})\/(passagens-aereas-para|vuelos-a|flights-to)-(.+)-(desde|from|saindo-de)-(.+)/)}
46
+ links.should_not is_empty?
47
+ end
48
+ end
@@ -0,0 +1,109 @@
1
+ # encoding: utf-8
2
+ Entonces(/^verifico que el mensaje de error en el cluster sea correcto$/) do
3
+ @page.cargar_itinerarios
4
+ clusters=@page.datos_de_itinerarios
5
+ clusters.each_with_index do |cluster,i|
6
+ if (cluster.idas.length>1 or (cluster.vueltas and cluster.vueltas.length>1))
7
+ @page.buscar_elements[i].click
8
+ @page.itinerarios_elements[i].li(:class=>'item error-message',:index=>((cluster.idas.length>1) ? 0 : 1)).text.no_accents.should match("Choose a (return|departure) flight|Por favor, seleccione un vuelo de|Por favor, selecione um voo de")
9
+ end
10
+ end
11
+ end
12
+
13
+ Entonces(/^verifico que ciudades iguales de error$/) do
14
+ @path_landing = @page.url.match(/(.+)(vuelos-a|passagens\-aereas\-para)(.+)/)
15
+ @page.ir(@path_landing[1].gsub(/\/...\/...\//,"/bue/bue/"))
16
+ @page.simbolo_error_element.when_visible(timeout=10)
17
+ @page.mensaje_element.text.should match("The destination city is the same as the departure city|La ciudad de destino es la misma que la ciudad de origen|A cidade de destino .{1,2} a mesma que a cidade de origem")
18
+ end
19
+
20
+ Entonces(/^verifico que si paso tres ciudades en la url de error$/) do
21
+ @page.ir(@path_landing[1] + "#{@page.manage_data.city_to_1.code.downcase}/" + @path_landing[2] + @path_landing[3])
22
+ @page.simbolo_error_element.when_visible(timeout=10)
23
+ @page.mensaje_element.text.no_accents.should match("La pagina solicitada no es valida|A pagina que voce solicitou nao e valido|The page you requested is not valid")
24
+ end
25
+
26
+ Entonces(/^verifico que fechas iguales no de error$/) do
27
+ @page.ir(@path_landing[1] + "1/2014-12-05/2014-12-05/" + @path_landing[2] + @path_landing[3])
28
+ @page.simbolo_error_element.when_visible(timeout=10)
29
+ @page.mensaje_element.text.should match("No flights were found for your search|No encontramos vuelos para su b.{1,2}squeda|N.{1,2}o foi possivel encontrar assentos disponiveis nos v.{1,2}os buscados")
30
+ end
31
+
32
+ Entonces(/^verifico que la ciudad "(.*?)" de error$/) do |arg1|
33
+ @page.ir(@path_landing[1].gsub(/\/...\/...\//,"/bue/xxx/"))
34
+ @page.simbolo_error_element.when_visible(timeout=10)
35
+ @page.mensaje_element.text.should match("We couldnt understand the city you want to fly|No hemos podido interpretar la ciudad a la que quiere volar|N.{1,2}o encontramos a cidade solicitada")
36
+ end
37
+
38
+ Entonces(/^verifico que paginado negativo de error$/) do
39
+ @page.ir(@path_landing[1] + "-1/" + @path_landing[2] + @path_landing[3])
40
+ @page.simbolo_error_element.when_visible(timeout=10)
41
+ @page.mensaje_element.text.should match("The page you requested is not valid|La pagina solicitada no es valida|A p.{1,2}gina que voc.{1,2} solicitou n.{1,2}o .{1,2} v.{1,2}lido")
42
+ end
43
+
44
+ Entonces(/^verifico que si la fecha de ida ingresada es posterior a la fecha de vuelta de error$/) do
45
+ @page.ir(@path_landing[1] + "1/2014-09-05/2014-09-04/" + @path_landing[2] + @path_landing[3])
46
+ @page.simbolo_error_element.when_visible(timeout=10)
47
+ @page.mensaje_element.text.should match("The departure date entered is later than the return date|La fecha de ida ingresada es posterior a la fecha de vuelta|A data de partida digitada .{1,2} posterior a data de retorno")
48
+ end
49
+
50
+ Entonces(/^verifico que si la url no tiene el seoPath, se redirige a la pagina que si lo tiene$/) do
51
+ @page.ir(@path_landing[1])
52
+ sleep(0.5)
53
+ @page.url.strip.should equal(@path_landing.to_s.gsub(/\?(.+)/,'').strip)
54
+ end
55
+
56
+ Entonces(/^verifico que si el seoPath esta mal escrito, se redirige a la pagina con el seoPath correcto$/) do
57
+ @page.ir(@path_landing[1]+"qwerty")
58
+ sleep(0.5)
59
+ @page.url.strip.should equal(@path_landing.to_s.strip.to_s.gsub(/\?(.+)/,'').strip)
60
+ end
61
+
62
+ Entonces(/^verifico que si se pone un codigo de aeropuerto en vez de uno de cuidad, se redirige a la ciudad del aeropuerto$/) do
63
+ @page.ir(@path_landing[1].gsub(/\/...\/...\//,"/ccs/eze/"))
64
+ sleep(0.5)
65
+ if AllPages.site=="BR"
66
+ @page.url.strip.should equal(@path_landing[1].to_s.gsub(/\/...\/...\//,"/ccs/bue/")+@path_landing[2]+"-buenos+aires-saindo-de-caracas")
67
+ else
68
+ @page.url.strip.should equal(@path_landing[1].to_s.gsub(/\/...\/...\//,"/ccs/bue/")+@path_landing[2]+"-buenos+aires-desde-caracas")
69
+ end
70
+ end
71
+
72
+ Entonces(/^verifico que si se pone algun caracter en mayuscula, se redirige a todo minuscula$/) do
73
+ @page.ir(@path_landing[1] + @path_landing[2].upcase + @path_landing[3])
74
+ sleep(0.5)
75
+ @page.url.strip.should equal(@path_landing.to_s.strip)
76
+ end
77
+
78
+ Entonces(/^verifico que si la url tiene parametros, se deben conservar en la redireccion$/) do
79
+ @page.ir(@path_landing[1] + "qwerty?param=value")
80
+ sleep(0.5)
81
+ @page.url.strip.should equal("#{@path_landing.to_s.strip.to_s.gsub(/\?(.+)/,'').strip}?param=value")
82
+ end
83
+
84
+ Entonces(/^verifico que la url para sem funcione correctamente con un ciudad con resultados sin seoPath$/) do
85
+ match = @path_landing[1].match(/(.+)(vuelos|passagens-aereas)\/(...)\/(...)\//)
86
+ @page.ir("#{match[1]}#{match[2]}/handler/#{match[3]}/#{match[4]}")
87
+ sleep(0.5)
88
+ @page.url.strip.should equal(@path_landing.to_s.strip.gsub(/\?(.+)/,''))
89
+ end
90
+
91
+ Entonces(/^verifico que la url para sem funcione correctamente con un ciudad sin resultados sin seoPath$/) do
92
+ match = @path_landing[1].match(/(.+)(vuelos|passagens-aereas)\/(...)\/(...)\//)
93
+ @page.ir("#{match[1]}#{match[2]}/handler/#{match[3]}/KLP")
94
+ sleep(0.5)
95
+ @page.url.strip.should equal("#{match[1]}#{match[2].to_s.gsub(/\?(.+)/,'').strip}/")
96
+ end
97
+
98
+ Entonces(/^verifico que la url de landing para el destino "(.*?)" no rompa$/) do |to_city|
99
+ match = @path_landing[1].match(/(.+)(vuelos|passagens-aereas)\/(...)\/(...)\//)
100
+ respond = HTTParty.get("#{match[1]}#{match[2]}/css/#{to_city}")
101
+ respond.code.to_s.should match("200|404")
102
+ end
103
+
104
+ Entonces(/^verifico que redirija a la home de vuelos si no hay oficinas en la ciudad de origen$/) do
105
+ @page.ir(@page.manage_data.generate_url_landing_home + "/tyo")
106
+ @page.url.should equal(@page.manage_data.generate_url_landing_home + "/")
107
+ @page.ir(@page.manage_data.generate_url_landing_home + "/#{@page.manage_data.city_from_1.code}")
108
+ @page.url.should equal(@page.manage_data.generate_url_landing_home + "/#{@page.manage_data.city_from_1.code.downcase}")
109
+ end
@@ -15,4 +15,8 @@ Entonces(/^seteo el proveedor "(.*)"$/) do |provider|
15
15
  @page.browser.execute_script("javascript:void(document.cookie='XDESP-FDBS-PROVIDER=#{provider};path=/');")
16
16
  @page.manage_data.set_header_json({"XDESP-FDBS-PROVIDER"=>provider})
17
17
  @page.refresh
18
+ end
19
+
20
+ Entonces(/^es ida y vuelta$/) do
21
+ @page.manage_data.description.downcase=="roundtrip"
18
22
  end
@@ -32,18 +32,22 @@ Entonces(/^verifico que la primer pagina muestre correctamente los filtros de ae
32
32
  group_airlines = [["UA","CM","AM","US","AA","DL"],["LA","4M","XL","4C","JJ","PZ"],["AV","TA","LR"]]
33
33
  doc = Hpricot.parse(@page.html)
34
34
  airlines = []
35
- airline = (@airline/"img").first.attributes['src'].match(/\/(..)\.png/)[1].strip
35
+ airline = (@airline/"img").first.attributes['src'].match(/\/(.{1,7})\.png/)[1].strip
36
36
  (doc/"div#clusters div.cluster ul.itineraries-group").each do |itineraries|
37
- airlines += (itineraries/"li.logo img").collect{|img| img.attributes['src'].match(/\/(..)\.png/)[1]}
38
- airlines += (itineraries/"li.airlines img").collect{|img| img.attributes['src'].match(/\/(..)\.png/)[1]}
39
- airlines += (itineraries/"li.airlinesShort img").collect{|img| img.attributes['src'].match(/\/(..)\.png/)[1]}
37
+ airlines += (itineraries/"li.logo img").collect{|img| img.attributes['src'].match(/\/(.{1,7})\.png/)[1]}
38
+ airlines += (itineraries/"li.airlines img").collect{|img| img.attributes['src'].match(/\/(.{1,7})\.png/)[1]}
39
+ airlines += (itineraries/"li.airlinesShort img").collect{|img| img.attributes['src'].match(/\/(.{1,7})\.png/)[1]}
40
40
  group_airlines.each{|airlines_tmp| airlines.concat(airlines_tmp) if airlines_tmp.include?(airline)}
41
41
  end
42
42
  airlines.should include?(airline)
43
43
  end
44
44
 
45
45
  Cuando(/^limpio el filtro de aerolineas$/) do
46
- @page.limpiar_filtro_aerolinea_element.set
46
+ begin
47
+ @page.limpiar_filtro_aerolinea_element.set
48
+ rescue Watir::Exception::ObjectDisabledException
49
+ @page.cantidad_items_aeropuerto_salida_element.text.to_i.should equal(@total)
50
+ end
47
51
  end
48
52
 
49
53
  Cuando(/^elijo un aeropuerto (outbound|inbound) a aplicar$/) do |_class|
@@ -112,7 +116,11 @@ Entonces(/^verifico que la primer pagina muestre correctamente los filtros de es
112
116
  end
113
117
 
114
118
  Cuando(/^limpio el filtro de escalas$/) do
115
- @page.limpiar_filtro_escalas_element.set
119
+ begin
120
+ @page.limpiar_filtro_escalas_element.set if @page.limpiar_filtro_escalas_element.present?
121
+ rescue Watir::Exception::ObjectDisabledException
122
+ @page.cantidad_items_aeropuerto_salida_element.text.to_i.should equal(@total)
123
+ end
116
124
  end
117
125
 
118
126
  Cuando(/^elijo un horario (outbound|inbound) a aplicar$/) do |_class|
@@ -176,7 +184,7 @@ end
176
184
 
177
185
  Cuando(/^limpio el filtro de horario (outbound|inbound)$/) do |_class|
178
186
  box=@page.browser.div(:class,"ux-common-filter-section ux-common-filter-slider ux-flights-filter-hours-slider ux-flights-filter-#{_class}hours-slider")
179
- box.link(:class,'ux-common-filter-reset').click
187
+ box.link(:class,'ux-common-filter-reset').click if box.link(:class,'ux-common-filter-reset').present?
180
188
  end
181
189
 
182
190
  Cuando(/^elijo una duracion (outbound|inbound) a aplicar$/) do |_class|
@@ -7,6 +7,20 @@ Dado(/^una pagina de resultados en "(.*)" para una busqueda "(.*)" del tipo "(.*
7
7
  @page.elegir_idioma
8
8
  end
9
9
 
10
+ Dado(/^una pagina de resultados en "(.*?)" para una busqueda "(.*?)" con origen "(.*?)" y destino "(.*?)" de tipo "(.*?)"$/) do |pais,tipo,ida,vuelta,cabotaje|
11
+ Helpers.set_date_language(pais)
12
+ @page = Results::SearchPage.new($browser)
13
+ @page.load_page(tipo,pais,$ENV,cabotaje,{"from"=>ida.upcase,"to"=>vuelta.upcase})
14
+ @page.set_cookies
15
+ @page.elegir_idioma
16
+ end
17
+
18
+ Dado(/^una pagina de resultados en "(.*?)" para una busqueda "(.*?)" que desambigue por "(.*?)"$/) do |arg1, arg2, arg3|
19
+ Helpers.set_date_language(arg1)
20
+ @page = Results::DesambiguationAirportsPage.new($browser)
21
+ @page.load_page_results(arg2,arg1,$ENV,arg3,"true")
22
+ end
23
+
10
24
  Cuando(/^espero que termine de cargar la pagina de resultados$/) do
11
25
  @page.carga_element.when_not_visible(timeout=60)
12
26
  @page.actualizar_filtro_element.when_not_visible(timeout=60)
@@ -1,4 +1,26 @@
1
1
  # -*- encoding : utf-8 -*-
2
+ Cuando(/^elijo en la matriz una escala a aplicar$/) do
3
+ doc = Hpricot.parse(@page.html)
4
+ @stop = (doc/"ul.matrix-scales li.scale")[rand((doc/"ul.matrix-scales li.scale").length)]
5
+ @cant = @stop.inner_text.gsub(/\D/,'').strip.to_i
6
+ end
7
+
8
+ Entonces(/^filtro por matriz una escala$/) do
9
+ @page.elegir_escala(@stop.inner_text.strip).click
10
+ end
11
+
12
+ Entonces(/^verifico que la primer pagina muestre correctamente los filtros de escalas en matriz$/) do
13
+ end
14
+
15
+ Entonces(/^verifico el mensaje del filtro por escala$/) do
16
+ scale = case AllPages.site
17
+ when "BR" then {"1 escala"=>"com uma escala","direto"=>"diretos","2 escalas ou mais"=>"com duas ou mais escalas"}
18
+ when "US" then {"1 stop"=>"with 1 stop","non-stop"=>"Non-stop","2 stops or more"=>"with two or more stops"}
19
+ else {"1 escala"=>"con una escala","directo"=>"directos","2 escalas o mas"=>"con dos o mas escalas"}
20
+ end
21
+ @page.filtro_matriz_element.text.no_accents.strip.should match("Currently viewing: #{scale[@stop.inner_text.no_accents.downcase.strip]} flights|Currently viewing: Flights #{scale[@stop.inner_text.no_accents.downcase.strip]}|Actualmente visualizando: Vuelos #{scale[@stop.inner_text.no_accents.downcase.strip]}|Atualmente visualizando: Voos #{scale[@stop.inner_text.no_accents.downcase.strip]}")
22
+ end
23
+
2
24
  Cuando(/^elijo en la matriz una aerolinea a aplicar$/) do
3
25
  doc = Hpricot.parse(@page.html)
4
26
  @airline = (doc/"div.matrix-airlines div.airline-description")[rand((doc/"div.matrix-airlines div.airline-description").length)]
@@ -21,7 +21,7 @@ Cuando(/^elijo un itinerario y paso a checkout$/) do
21
21
  @page.cargar_itinerarios
22
22
  @index, permitida = @page.sanear_itinerarios(["DL"])
23
23
  pending("Se encontraron solo vuelos de delta") unless permitida
24
- @itinerario = @page.elegir_itinerario(@index)
24
+ @itinerario_resultados = @page.elegir_itinerario(@index)
25
25
  end
26
26
 
27
27
  Entonces(/^recorro y verifico cada itinerario$/) do
@@ -99,4 +99,96 @@ Y(/^verifico el pixel de e-planning$/) do
99
99
  tag_planning = @page.buscar_script_con_texto("planning")
100
100
  tag_planning.first.inner_html.empty?.should_not be_true
101
101
  (tag_planning.length >= 1).should be_true
102
- end
102
+ end
103
+
104
+ Y(/^verifico el segundo tag de google en resultado de landing$/) do
105
+ tag_script = @page.buscar_script_con_texto("google_custom_params")
106
+ tag_script.first.should be_true
107
+ (tag_script.length == 1).should be_true
108
+ vars = tag_script.first.inner_text.split(";")
109
+ vars.delete_at(-1)
110
+ tmp = Hash.new
111
+ vars.each do |option|
112
+ (tmp[option.strip.match(/var (.+) \= (.+)/)[1]]=option.gsub(/"|\n/,'').match(/var (.+) \= (.+)/)[2].to_s) unless option.strip.match("document.write")
113
+ end
114
+ tmp['google_conversion_id'].should match("\\d")
115
+ tmp['google_conversion_label'].should match("(.+)")
116
+ match = @page.url.match(/\/(...)\/(...)\//)
117
+ tmp['google_custom_params'].should match("{ CustomA: '#{AllPages.site}',CustomB: 'D',CustomC: '6',CustomD: '1',CustomCD: '6-1',CustomE: '#{match[1].upcase}',CustomF: '#{match[2].upcase}'}")
118
+ tmp['google_remarketing_only'].should match("true")
119
+ end
120
+
121
+ Cuando(/^levanto los tag que deben mostrarse segun la ciudad buscada para landing$/) do
122
+ cities = YAML.load(File.open("features/data/tag_microsoft.yml"))
123
+ iata = @page.url.match(/\/(...)\/(...)\//)[2].upcase
124
+ @temp = cities[AllPages.site].select{|city| city['City']==iata}
125
+ if @temp.empty?
126
+ @temp = cities[AllPages.site].select{|city| city['City']=="DEF"}
127
+ end
128
+ end
129
+
130
+ Y(/^verifico el pixel de Efrontier$/) do
131
+ doc = Hpricot.parse(@page.html)
132
+ doc.inner_html.should match("INITIAL_PIXELS")
133
+ doc.inner_html.should match("ASYNC_PIXELS")
134
+ end
135
+
136
+ Y(/^verifico el pixel de trackeame en checkout$/) do
137
+ pixel_trackeame = @page.buscar_elemento_html("img#PixelTrackeame").first
138
+ pixel_trackeame.nil?.should_not be_true
139
+ pixel_trackeame.attributes['src'].should match("fl=checkout&pr=flights&cc=#{AllPages.site}&exch=(.+)&pri=(.+)&cur=(#{Helpers.currency(AllPages.site)}|USD)&dn=Despegar")
140
+ end
141
+
142
+ Entonces(/^verifico el tag de datalayer$/) do
143
+ script = @page.buscar_script_con_texto("^dataLayer")
144
+ script.should_not is_empty?
145
+ text = script.first.inner_text.strip.gsub(/\/\/(.*)\n/,'').gsub(/\n/,'').match(/dataLayer \= \[(.*)\]\;/)[1]
146
+ json = JSON.parse(text.gsub(/\'/,"\""))
147
+ json["transactionId"].should equal(@id_reserva)
148
+ json["transactionTotal"].to_s.should_not is_empty?
149
+ json["transactionProducts"].should_not is_empty?
150
+ end
151
+
152
+ Y(/^verifico el pixel de trackeame en gracias$/) do
153
+ pixel_trackeame = @page.buscar_elemento_html("img#PixelTrackeame").first
154
+ pixel_trackeame.nil?.should_not be_true
155
+ pixel_trackeame.attributes['src'].should match("idcro=#{@id_reserva}&pr=flights&cc=#{AllPages.site}&exch=(.+)&pri=(.+)&cur=(#{Helpers.currency(AllPages.site)}|USD)&dn=Despegar")
156
+ end
157
+
158
+ Y(/^verifico el segundo tag de google en resultado de checkout$/) do
159
+ tag_script = @page.buscar_script_con_texto("google_custom_params")
160
+ tag_script.first.should be_true
161
+ (tag_script.length == 1).should be_true
162
+ vars = tag_script.first.inner_text.split(";")
163
+ vars.delete_at(-1)
164
+ tmp = Hash.new
165
+ vars.each do |option|
166
+ (tmp[option.strip.match(/var (.+) \= (.+)/)[1]]=option.gsub(/"|\n/,'').match(/var (.+) \= (.+)/)[2].to_s) unless option.strip.match("document.write")
167
+ end
168
+ tmp['google_conversion_id'].should match("\\d")
169
+ tmp['google_conversion_label'].should match("(.+)")
170
+ if @page.tipo_de_busqueda.downcase == "oneway"
171
+ tmp['google_custom_params'].should match("{ CustomA: '#{AllPages.site}',CustomB: 'D',CustomC: '4',CustomD: '1',CustomCD: '4-1',CustomE: '#{@page.manage_data.city_from_1.code}',CustomF: '#{@page.manage_data.city_to_1.code}',CustomG: '.',CustomH: '.',CustomI: '.',CustomJ: '#{@page.manage_data.date_from_1}',CustomO: '..'}")
172
+ elsif @page.tipo_de_busqueda.downcase == "roundtrip"
173
+ tmp['google_custom_params'].should match("{ CustomA: '#{AllPages.site}',CustomB: 'D',CustomC: '4',CustomD: '1',CustomCD: '4-1',CustomE: '#{@page.manage_data.city_from_1.code}',CustomF: '#{@page.manage_data.city_to_1.code}',CustomG: '.',CustomH: '.',CustomI: '.',CustomJ: '#{@page.manage_data.date_from_1}',CustomK: '....\-..\-..',CustomO: '..'}")
174
+ end
175
+ end
176
+
177
+ Y(/^verifico el segundo tag de google en resultado de gracias$/) do
178
+ tag_script = @page.buscar_script_con_texto("google_custom_params")
179
+ tag_script.first.should be_true
180
+ (tag_script.length == 1).should be_true
181
+ vars = tag_script.first.inner_text.split(";")
182
+ vars.delete_at(-1)
183
+ tmp = Hash.new
184
+ vars.each do |option|
185
+ (tmp[option.strip.match(/var (.+) \= (.+)/)[1]]=option.gsub(/"|\n/,'').match(/var (.+) \= (.+)/)[2].to_s) unless option.strip.match("document.write")
186
+ end
187
+ tmp['google_conversion_id'].should match("\\d")
188
+ tmp['google_conversion_label'].should match("(.+)")
189
+ if @page.tipo_de_busqueda.downcase == "oneway"
190
+ tmp['google_custom_params'].should match("{ CustomA: '#{AllPages.site}',CustomB: 'D',CustomC: '5',CustomD: '1',CustomCD: '5-1',CustomE: '#{@page.manage_data.city_from_1.code}',CustomF: '#{@page.manage_data.city_to_1.code}',CustomG: '.',CustomH: '.',CustomI: '.',CustomJ: '#{@page.manage_data.date_from_1}',CustomO: '..'}")
191
+ elsif @page.tipo_de_busqueda.downcase == "roundtrip"
192
+ tmp['google_custom_params'].should match("{ CustomA: '#{AllPages.site}',CustomB: 'D',CustomC: '5',CustomD: '1',CustomCD: '5-1',CustomE: '#{@page.manage_data.city_from_1.code}',CustomF: '#{@page.manage_data.city_to_1.code}',CustomG: '.',CustomH: '.',CustomI: '.',CustomJ: '#{@page.manage_data.date_from_1}',CustomK: '....\-..\-..',CustomO: '..'}")
193
+ end
194
+ end
@@ -1,10 +1,17 @@
1
- # encodign: utf-8
1
+ # encoding: utf-8
2
2
  Cuando(/^espero que termine de cargar la pagina de gracias$/) do
3
3
  @page = Thanks::ThanksPage.new($browser)
4
- @page.checkout_id_element.when_visible(timeout=60)
4
+ Watir::Wait.until(timeout=60){@page.checkout_id_element.present? or @page.checkout_id_cash_element.present?}
5
5
  end
6
6
 
7
7
  Entonces(/^verifico que ingrese a la pagina de gracias$/) do
8
8
  @page.checkout_id_element.should visible("Checkout ID")
9
9
  puts @page.checkout_id_element.text
10
+ @id_reserva = @page.checkout_id_element.text
11
+ end
12
+
13
+ Entonces(/^verifico que ingrese a la pagina de gracias para pago cash$/) do
14
+ @page.checkout_id_cash_element.should visible("Checkout ID")
15
+ puts @page.checkout_id_cash_element.text
16
+ @id_reserva = @page.checkout_id_cash_element.text
10
17
  end