Selenium 如何在web应用程序中测试上下文菜单功能?
我正在玩一个grails应用程序,它有一个上下文菜单(右键单击)。 上下文菜单是使用Chris Domigan的创建的 虽然contextmenus确实可以工作,但我想进行自动测试,但我不知道如何进行Selenium 如何在web应用程序中测试上下文菜单功能?,selenium,automated-tests,contextmenu,htmlunit,webdriver,Selenium,Automated Tests,Contextmenu,Htmlunit,Webdriver,我正在玩一个grails应用程序,它有一个上下文菜单(右键单击)。 上下文菜单是使用Chris Domigan的创建的 虽然contextmenus确实可以工作,但我想进行自动测试,但我不知道如何进行 我尝试过Selenium 2.05a(即Webdriver),但没有右键单击方法 我注意到HtmlUnit有一个rightclick方法,但我似乎无法检测到DOM在单击之前和之后的任何差异 目前WebDriver中没有右键单击方法,有一个针对它的增强请求- 现在,您可以使用键盘快捷键Shift+
- 我尝试过Selenium 2.05a(即Webdriver),但没有右键单击方法
- 我注意到HtmlUnit有一个rightclick方法,但我似乎无法检测到DOM在单击之前和之后的任何差异
WebElement element = driver.findElement(....);
element.sendKeys(Keys.chord(Keys.SHIFT, Keys.F10));
虽然我也希望能够在InternetExplorer或Firefox中实现这一点,但主要的用途将是HtmlUnit。HtmlUnit HtmlElement有一个
rightClick()
方法很好,但不幸的是,它受保护,因此无法从WebDriver包装的HtmlUnitWebElement访问
我编写了一个hack使其可访问,因此现在我可以调用rightClick(),尽管它只有在使用HtmlUnit运行时才起作用,而不是IE或FF
// Needs to be in this package to get access to the element
package org.openqa.selenium.htmlunit;
import com.gargoylesoftware.htmlunit.html.HtmlElement;
public class OpenHtmlUnitWebElement extends HtmlUnitWebElement {
// Provide a constructor, even though we don't really need it.
public OpenHtmlUnitWebElement(HtmlUnitDriver parent, HtmlElement element) {
super(parent, element);
}
// this is the method we really want.
public static HtmlElement using(HtmlUnitWebElement huwe) {
return huwe.element;
}
}
现在,我的(groovy)测试如下所示:
import static org.openqa.selenium.htmlunit.OpenHtmlUnitWebElement.using
...
def itemWithContextMenu = driver.findElement(By.id('theId'))
if (itemWithContextMenu instanceOf HtmlUnitWebElement) {
using(itemWithContextMenu).rightClick()
def contextMenu = driver.findElement(By.id('jqContextMenu'))
assert ...
}
如果您将Ruby与Capybara结合使用,这一项应该很有用:
module Capybara
module Node
class Element
def context_click
@session.driver.browser.action.context_click(self.native).perform
end
end
end
end
谢谢ZloiAdun,但我还在努力。根据我将Shift-F10发送到哪个元素,我会看到常规IE上下文菜单,或者选择浏览器文件菜单按钮。我无法显示自定义上下文菜单。-也许你应该试着用JavaScript显示你的菜单?类似((JavascriptExecutor)driver.executeScript(“menu.display(…)”)的东西;我不知道您正在使用的菜单的细节,但肯定应该有一些JavaScript函数来显示它