/ / Das erste Beispiel für ein Geb-Handbuch, das nicht ausgeführt wird - groovy, selenium, webdriver, geb

Erstes Beispiel für Geb-Handbuch, das nicht ausgeführt wird - Groovy, Selen, Webdriver, geb

Ich habe folgendes Setup:

  • installierte JDK & JRE 6u29
  • Installiertes Selen Standalone 2.8
  • Groovy 1.8.3
  • Geb 0.6.1

Ich habe nur mit der GroovyConsole versucht, das erste Beispiel aus dem Geb-Handbuch auszuführen:

import geb.Browser

Browser.drive {
go "http://google.com/ncr"

// make sure we actually got to the page
assert title == "Google"

// enter wikipedia into the search field
$("input", name: "q").value("wikipedia")

// wait for the change to results page to happen
// (google updates the page dynamically without a new request)
waitFor { title.endsWith("Google Search") }

// is the first link to wikipedia?
def firstLink = $("li.g", 0).find("a.l")
assert firstLink.text() == "Wikipedia"

// click the link
firstLink.click()

// wait for Google"s javascript to redirect to Wikipedia
waitFor { title == "Wikipedia" }
}

aber ich bekomme den folgenden Fehler:

WARNUNG: Stapelverfolgung desinfizieren:

geb.waiting.WaitTimeoutException: Bedingung in 5.0 nicht bestanden Sekunden

Stimmt etwas mit dem Beispiel nicht? Mache ich etwas falsch? das ist sehr frustrierend, da das SEHR erste Beispiel nicht einmal ausgeführt wird!

Antworten:

3 für die Antwort № 1

Das Skript wird eingegeben wikipedia in das Suchfeld, aber es trifft nicht die Google Search Taste, um die Suche zu starten.

Wenn Sie hinzufügen:

// hit the "Google Search" button

$("input", name: "btnG").click()

gleich nach

// enter wikipedia into the search field

$("input", name: "q").value("wikipedia")

du wirst ein bisschen weiter kommen.


2 für die Antwort № 2

In diesem Beispiel wird die Funktion zum automatischen Laden in verwendetGoogle, wobei Suchergebnisse angezeigt werden, während Sie die Suche eingeben. Sie müssen daher nicht auf die Suchschaltfläche klicken. Wenn Sie den Test ausführen, sollten Sie feststellen, dass die Suchergebnisse angezeigt werden und der Wikipedia-Link der erste ist.

Die WaitTimeoutException, die Sie erhalten, ist am meistenwahrscheinlich, weil der Browser nach dem Aufrufen der Wikipedia-Seite zu schnell geschlossen wird. Um dies zu beheben, aktualisieren Sie einfach den waitFor-Aufruf, damit er länger wartet, bevor Sie den Browser schließen, d. H.

waitFor(10) (at WikipediaPage)

Wenn Sie gradle im Debug-Modus ausführen, ist der Prozess jedoch viel langsamer und ermöglicht es dem Test, nach dem Titel zu suchen, bevor der Browser beendet wird

gradlew firefoxTest --debug --stacktrace

2 für die Antwort № 3

Ich hatte das gleiche Problem wie Sie.

Das erste WaitFor-Problem:

Das erste Warten auf kann durch die Antwort von J. Levine behoben werden.

$ ("input", name: "btnG"). click ()

nach:

$ ("input", name: "q"). value ("wikipedia").

Das zweite WaitFor-Problem:

Der Titel der Seite, auf die Wikipedia über Google zugreift, unterscheidet sich von der Wikipedia-Startseite. Auf der Homepage steht es <title>Wikipedia<title> auf der hauptseite (zu der google aufruft ist <title>Wikipedia, the free encyclopedia<title>.

Also ändern:

waitFor {title == "Wikipedia"}}
Zu:
waitFor {title == "Wikipedia, die freie Enzyklopädie"}
}

Und das sollte das zweite Warteproblem beheben


1 für die Antwort № 4

Keines der oben genannten hat bei mir funktioniert. Nach einigem Debuggen habe ich den Code so bekommen:

Browser.drive {

go "http://google.com"

// make sure we actually got to the page
assert title == "Google"

// enter wikipedia into the search field
$("input", name: "q").value("wikipedia")

// wait for the change to results page to happen
// (google updates the page dynamically without a new request)
waitFor { title.endsWith("Google Search") }

// is the first link to wikipedia?
def firstLink = $("li.g", 0).find("a")
assert firstLink.text() == "Wikipedia, the free encyclopedia"

// click the link
firstLink.click()

// wait for Google"s javascript to redirect to Wikipedia
waitFor { title == "Wikipedia, the free encyclopedia" }
}