代码之家  ›  专栏  ›  技术社区  ›  John

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

  •  4
  • John  · 技术社区  · 14 年前

    我正在玩一个grails应用程序,它有一个上下文菜单(右击)。 jquery contextmenu plugin .

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

    • 我试过selenium2.05a(即Webdriver),但没有右键单击方法。
    • 我注意到HtmlUnit有一个rightclick方法,但是我似乎无法检测到在单击之前和之后DOM中的任何差异。
    3 回复  |  直到 14 年前
        1
  •  5
  •   Sergii Pozharov    14 年前

    目前在WebDriver中没有右键单击方法,已经为它打开了一个增强请求- http://code.google.com/p/selenium/issues/detail?id=161

    WebElement element = driver.findElement(....);
    element.sendKeys(Keys.chord(Keys.SHIFT, Keys.F10));
    
        2
  •  0
  •   John    14 年前

    虽然我也希望能在InternetExplorer或Firefox中这样做,但主要的用法是HtmlUnit。HtmlUnit HtmlElement有一个 rightClick() 方法,但不幸的是 protected 因此无法从WebDriver包装的HtmlUnitWebElement访问。

    // 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 ...
    }
    
        3
  •  0
  •   Sasha    11 年前

    如果您将Ruby与Capybara结合使用,那么这个应该很有用:

    module Capybara
      module Node
        class Element
          def context_click
            @session.driver.browser.action.context_click(self.native).perform
          end
        end
      end
    end