2017-03-29 2 views
1

Vor 2 Wochen habe ich Post über meine watir Skript Timing out auf mich gestellt, ich konnte eine Lösung zu bekommen, aber ich erkannte zu spät die Ergebnisse, die ich bekam war anders als die Person, die geholfen hat ich raus. Hier ist das Original-Beitrag: Ruby Watir Gem, Timing Out on Form InputRuby Waitir Gem, bekommen unerwartete Ergebnisse

require 'watir' 

browser = Watir::Browser.new 

browser.goto('https://tripadvisor.com/CheapFlightsHome') 
browser.text_field(name: 'orig').set('Boston, MA - Logan International Airport (BOS)') 
browser.text_field(name: 'dest').set('Milan, Italy - All Airports (MIL)') 
browser.execute_script('document.querySelector(".in_date").click()') 
browser.execute_script('document.querySelector(".day_28").click()') 
browser.execute_script('document.querySelector(".out_date").click()') 
browser.execute_script('document.querySelector(".day_2").click()') 
browser.span(id: "CHECK_FARES_BUTTON").fire_event :click 
puts browser.url 
browser.quit 

Die Person, die schrieb, dass Code bekam dies als Ergebnis: https://www.tripadvisor.com/CheapFlightsSearchResults-g187849-a_airport0.BOS-a_airport1.MIL-a_cos.0-a_date0.20170328-a_date1.20170402-a_nearby0.no-a_nearby1.no-a_nonstop.no-a_pax0.a-a_travelers.1-Milan_Lombardy.html

ich den gleichen Code in meinem Skript haben und aus irgendeinem Grund ich nur bekommen: https://www.tripadvisor.com/CheapFlightsHome

Es scheint, als ob der Knopf Klick nicht für mich passiert, nicht sicher. Ich habe sowohl Chrome als auch Firefox ausprobiert.

+0

Welche Version von Chrome, Chromedriver, Selenium-Webdriver und Watir verwenden Sie? Ich frage mich, ob es einen Unterschied gibt zu erklären, warum wir unterschiedliche Ergebnisse für denselben Code sehen. –

+0

Chrome: 57.0.2987.98, Chromedriver: 2.28.455506, Selenium-Webdriver: 3.3.0 – KSan

Antwort

0

Zu allererst Ihr Klick tatsächlich zwei weitere Fenster geöffnet und auch die Zeit, die Sie klicken sind, ist nicht genau das Klicken empfangen, Bitte verwenden Sie diesen Code, wird es für Sie arbeiten, und Sie werden mit Ihrem erwarteten Fenster

gelassen werden
require 'watir' 
caps = Selenium::WebDriver::Remote::Capabilities.firefox(marionette: false) 

driver=Selenium::WebDriver.for :firefox, desired_capabilities: caps, profile: "default" 

b=Watir::Browser.new driver 


b.goto('https://tripadvisor.com/CheapFlightsHome') 
b.text_field(name: 'orig').set('Boston, MA - Logan International Airport (BOS)') 
b.text_field(name: 'dest').set('Milan, Italy - All Airports (MIL)') 
b.execute_script('document.querySelector(".in_date").click()') 
b.execute_script('document.querySelector(".day_28").click()') 
b.execute_script('document.querySelector(".out_date").click()') 
b.execute_script('document.querySelector(".day_2").click()') 
begin 
b.element(xpath: ".//*[@id='CHECK_FARES_BUTTON']").click 
end until b.windows.count>1 

b.windows[0].close 
b.windows[1].close 

puts b.url 
b.quit 
+0

Das bringt mich dahin, wo ich hin will, danke. Aber ich bin verwirrt, wie es funktioniert, wollen Sie die ersten paar Zeilen mit Caps und Treiber erklären? Auch der Unterschied b.element (xpath: "./**[@id='CHECK_FARES_BUTTON']").click und browser.span (id:" CHECK_FARES_BUTTON ").fire_event: klicke auf – KSan

+0

Caps, die ich eingefügt habe, um Geckodriver nicht aufzurufen, stattdessen den Legacy-firefox-Treiber zu verwenden, aber das ist nicht wichtig, Sie können später erkunden. Und Element (xpath, '') und span (: id, '') unterscheiden sich nicht, es funktioniert auf die gleiche Weise, beide funktionieren, versuche einfach mit span, es wird funktionieren. Der Punkt, der hier zu beachten ist, ist, dass Ihre Schaltfläche den Klick nicht korrekt empfängt, wenn Sie die Klick-Anweisung ausführen. Um sicherzustellen, dass Ihre Schaltfläche den Klick korrekt empfängt, habe ich diese Bedingung "b.windows.count> 1" und dann I geschrieben Schließen Sie das Fenster, das Sie nicht möchten, also Variable automatisch verbunden toyourwindow zum Drucken von URL. – RAJ

+0

vielen Dank Mann – KSan

0

Zuerst habe ich .fire_event :click zu .click geändert.

Dann gab es einen Fehler, der erschien.

Please enter a valid airport code or city.

Zweitens habe ich versucht, dies:

browser.span(id: "CHECK_FARES_BUTTON").click 
browser.span(id: "CHECK_FARES_BUTTON").click 
puts browser.url 

Und es umgeleitet mich: https://www.tripadvisor.com/CheapFlightsSearchResults-g187849-a_airport0.BOS-a_airport1.MIL-a_cos.0-a_date0.20170401-a_date1.20170402-a_nearby0.no-a_nearby1.no-a_nonstop.no-a_pax0.a-a_travelers.1-Milan_Lombardy.html

Um ehrlich zu sein, ich habe keine Ahnung, warum es nicht die Eingabe während des ersten Klick nicht registrieren ...

Ich verwende Chrom.

+0

Ich habe es gerade versucht, und ich bekomme immer noch: https://www.tripadvisor.com/CheapFlightsHome Auf Ubuntu 16.04, wenn das wichtig ist, das ist seltsam:/ – KSan

+0

Ich benutze auch Ubuntu 16.04. Haben Sie sicher einen Doppelklick versucht? Wurde die ungültige Nachricht angezeigt/Gab es überhaupt ein Klick-Ereignis? – DiodonHystrix

+0

Ja Ich habe versucht, den Doppelklick, ich habe keine Fehlermeldung erhalten. Ich glaube nicht, dass ich überhaupt ein Klickereignis bekomme. Der Browser schließt automatisch nach dem Ausfüllen des Datums, auch nach dem Entfernen des Browsers. – KSan