如何在Web应用程序中测试上下文菜单功能?
问题描述:
我正在玩一个具有contextmenu的grails应用程序(右键单击)。 上下文菜单使用Chris Domigan的jquery contextmenu plugin构建。如何在Web应用程序中测试上下文菜单功能?
尽管上下文菜单确实有效,但我想要进行自动化测试,但我无法弄清楚如何去做。
- 我试过Selenium 2.05a(即Webdriver),但没有rightClick方法。
- 我注意到HtmlUnit有一个rightclick方法,但我似乎无法检测到点击之前和之后DOM之间的任何差异。
答
虽然我希望能够在Internet Explorer或Firefox中完成,但主要用法是HtmlUnit。很高兴HtmlUnit HtmlElement有一个rightClick()
方法,但不幸的是它的protected
,因此无法从WebDriver包装的HtmlUnitWebElement访问。
我写了一个黑客,使之接近,所以现在我可以打电话请右键单击(),虽然它只有当它与运行的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;
}
}
现在我的(常规)测试看起来是这样的:
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 ...
}
答
目前有在webdriver的没有右键的方法,有打开它的增强请求 - http://code.google.com/p/selenium/issues/detail?id=161
现在你可以使用键盘快捷键Shift + F10模拟元素上点右键:
WebElement element = driver.findElement(....);
element.sendKeys(Keys.chord(Keys.SHIFT, Keys.F10));
答
,如果你使用Ruby与水豚,这应该是有用的:
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上下文菜单,或浏览器文件menubutton被选中。我无法让我的自定义情景菜单出现。 - 约翰。 – John 2010-07-20 23:15:37
也许你应该尝试通过JavaScript显示你的菜单?喜欢的东西 ((JavascriptExecutor)驱动程序).executeScript( “menu.display(...)”); 我不知道你正在使用的菜单的细节,但肯定应该有一些JavaScript函数来显示它 – 2010-07-21 08:12:49