Selenium 如何在web应用程序中测试上下文菜单功能?

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+

我正在玩一个grails应用程序,它有一个上下文菜单(右键单击)。 上下文菜单是使用Chris Domigan的创建的

虽然contextmenus确实可以工作,但我想进行自动测试,但我不知道如何进行

  • 我尝试过Selenium 2.05a(即Webdriver),但没有右键单击方法
  • 我注意到HtmlUnit有一个rightclick方法,但我似乎无法检测到DOM在单击之前和之后的任何差异

目前WebDriver中没有右键单击方法,有一个针对它的增强请求-

现在,您可以使用键盘快捷键Shift+F10模拟在图元上单击鼠标右键:

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函数来显示它