Как я могу проверить функциональность контекстного меню в веб-приложении? - PullRequest
4 голосов
/ 20 июля 2010

Я играю с приложением Grails, которое имеет контекстное меню (при щелчке правой кнопкой мыши).Контекстное меню создается с помощью плагина jquery contextmenu Криса Домигана .

Хотя контекстные меню действительно работают, я хочу иметь автоматические тесты и не могу понять, как это сделать.

  • Я пробовал Selenium 2.05a (т. Е. Webdriver), но нет метода rightClick.
  • Я заметил, что в HtmlUnit есть метод щелчка правой кнопкой мыши, но мне кажется, чтобыть в состоянии обнаружить любую разницу в DOM между до и после клика.

Ответы [ 3 ]

5 голосов
/ 20 июля 2010

В настоящее время в 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));
0 голосов
/ 22 октября 2013

если вы используете Ruby с Capybara, это должно быть полезно:

module Capybara
  module Node
    class Element
      def context_click
        @session.driver.browser.action.context_click(self.native).perform
      end
    end
  end
end
0 голосов
/ 24 июля 2010

Хотя я бы хотел сделать это и в Internet Explorer, или в Firefox, основное использование будет HtmlUnit.Приятно, что HtmlUnit HtmlElement имеет метод rightClick(), но, к сожалению, он protected и поэтому недоступен из обернутого WebDriver HtmlUnitWebElement.

Я написал хак, чтобы сделать его доступным, и теперь я могу вызвать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 ...
}
...