【发布时间】:2011-09-08 02:39:57
【问题描述】:
我正在使用 Selenium Java 2.0b3。我有这个代码:
...
WebDriver driver = new InternetExplorerDriver();
Selenium seleniumDriver = new WebDriverBackedSelenium(driver, "http://localhost:8088/Sistema/");
...
...
RenderedWebElement menuRegistrar = (RenderedWebElement)driver.findElement(By.xpath("//a[normalize-space()='Registrar']"));
seleniumDriver.mouseOver("//a[normalize-space()='Registrar']"); //makes element visible
menuRegistrar.click();
seleniumDriver.mouseOut("//a[normalize-space()='Registrar']");
...
使用 InternetExplorerDriver(使用 IE 8)就像一个魅力,但它不适用于 FirefoxDriver(使用 Firefox 4)。我已经用代码尝试了很多东西,但没有任何效果。而且我必须使用 FirefoxDriver,因为我正在测试的应用程序在 IE 上表现不佳。
正如您可能猜到的,“注册器”链接在 mouseOver 事件触发之前是隐藏的。
任何经过验证的解决方法?感谢您的宝贵时间...
编辑:还尝试了 ChromeDriver 和 Chrome 11。也没有用。如果有适用于 Chrome 的解决方法,我会接受!
答案(使用 Selenium Java 2.0RC1、Windows 7、Firefox 4 的工作代码):感谢 Andy Tinkham 和 Luke Inman-Semerau:
//get the element that shows menu with the mouseOver event
WebElement menu = driver.findElement(By.xpath("//div[@id='nav']/li[3]"));
//the element that I want to click (hidden)
WebElement menuOption = driver.findElement(By.xpath("//a[normalize-space()='Registrar']"));
//build and perform the mouseOver with Advanced User Interactions API
Actions builder = new Actions(driver);
builder.moveToElement(menu).build().perform();
//then click when menu option is visible
menuOption.click();
注意:高级用户交互 API 在浏览器上使用 NativeEvents(不支持跨平台)。因此,如果您更改操作系统,此代码可能无法正常工作。这就是我添加操作系统和浏览器详细信息的原因。见question in selenium users group
【问题讨论】:
-
你不需要打电话给
builder.moveToElement(menu).build().perform();,但builder.moveToElement(menu).perform();会做同样的事情
标签: java webdriver selenium-webdriver