2
@Grapes([
    @Grab("org.codehaus.geb:geb-core:0.7.2"),
    @Grab("org.seleniumhq.selenium:selenium-firefox-driver:2.25.0"),
    @Grab("org.seleniumhq.selenium:selenium-support:2.25.0")
])
import geb.Browser
import org.openqa.selenium.firefox.FirefoxDriver

Browser.drive {

  go "http://www.asu.edu/"
  $("li a").each { a ->
     println(a.text())
  }

}

aフレームワークを使用して、Webページからすべてのリンク(タグで表される)を取得しようとしていますGeb。しかし、ドロップダウンリストにそれらのリンクをキャプチャできませんでした。このページを例にとると、Colleges & Schoolsとの下のドロップダウンリストをキャプチャできませんでしたMap & Locations。上記のコードの出力では、ドロップダウンリストの各項目は1行を占める「空の文字列」でした。出力の最初の部分は次のとおりです。

SIGN IN
ASU Home
My ASU
Colleges & Schools















Map & Locations











Contact ASU
Freshman
Transfer
Graduate
International
Military | Veteran
Home-Educated
Online
Prospective Students
4

1 に答える 1

4

これは、表示されている要素のテキストしか取得できないためです。これは、text() がユーザーに表示されるテキストのみを返すようにするためです。

:hover 疑似クラスが適用されたときにドロップダウンが開くようにスタイル設定されているようです。カーソルを要素に向けるために使用できる GebおよびmoveToElement アクションにはドラッグ アンド ドロップのサポートがありますが、機能していないようです - Firefox ドライバーがうまく処理できないことを示唆するスレッドを見つけました。残念ながら、現在 jQuery で :hover をシミュレートすることはできないため、唯一のオプションは、Geb の jQuery 統合を使用して要素を手動で表示することです。

$('#asu_universal_nav li', 2).find('ul').jquery.show()

その後、text() を呼び出すと、リンク内のテキストが返されます。別のオプションは、:hover 時だけでなく、クラスが適用されたときにもドロップダウンを表示し、mouseenter/mouseleave ハンドラーでそのクラスを追加/削除することです。ただし、自動化/テストしているページを提供しているアプリを変更できる場合にのみ可能です。

于 2012-12-17T01:02:45.630 に答える