4

我正在使用具有上下文菜单(右键单击)的 grails 应用程序。上下文菜单是使用 Chris Domigan 的jquery contextmenu 插件构建的。

虽然上下文菜单确实有效,但我想要进行自动化测试,但我不知道如何去做。

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

3 回答 3

5

目前 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));
于 2010-07-20T08:52:36.687 回答
0

虽然我也希望能够在 Internet Explorer 或 Firefox 中执行此操作,但主要用途是 HtmlUnit。很高兴 HtmlUnit HtmlElement 有一个rightClick()方法,但不幸的是它protected不能从 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;
    }
}

现在我的(常规)测试看起来像这样:

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 ...
}
于 2010-07-24T09:49:41.300 回答
0

如果您将 Ruby 与 Capybara 一起使用,这个应该很有用:

module Capybara
  module Node
    class Element
      def context_click
        @session.driver.browser.action.context_click(self.native).perform
      end
    end
  end
end
于 2013-10-22T14:04:00.533 回答