Groovy Geb无法捕获下拉列表

时间:2012-12-16 05:46:40

标签: html drop-down-menu groovy webdriver geb

@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框架从网页中获取所有链接(由Geb标记表示)。但是我没能在下拉列表中捕获这些链接。以this page为例,我无法捕获Colleges & SchoolsMap & Locations下的下拉列表。在上面代码的输出中,下拉列表中的每个项目都是占空一行的“空字符串”。输出的开头部分如下:

SIGN IN
ASU Home
My ASU
Colleges & Schools















Map & Locations











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

1 个答案:

答案 0 :(得分:4)

这是因为您只能获取可见元素的文本。这样,text()只返回对用户可见的文本。

看起来这个下拉列表的样式是在以下情况下打开:hover pseudoclass应用于它。您可以使用drag and drop support in GebmoveToElement action将光标指向元素,但它似乎不起作用 - 我发现一些线程表明Firefox驱动程序无法很好地处理它。不幸的是,它无法模拟:当前使用jQuery悬停,因此您唯一的选择是使用Geb's jQuery integration来手动制作元素:

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

之后,调用text()时应返回链接中的文本。另一种选择是不仅在以下情况下使下拉列表可见:悬停,而且在应用类时也可以在mouseenter / mouseleave处理程序中添加/删除该类。但是,只有当您可以修改为您自动化/测试的页面提供服务的应用程序时,才有可能。