2010-07-20 3 views
4

Я играю с приложением grails, у которого есть контекстное меню (щелкните правой кнопкой мыши). Контекстное меню построено с использованием Chris Domigan's jquery contextmenu plugin.Как проверить функциональность контекстного меню в веб-приложении?

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

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

ответ

0

Хотя я хотел бы иметь возможность делать это в 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 ... 
} 
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)); 
+0

Благодаря ZloiAdun, но я все еще борется. В зависимости от того, какой элемент я отправляю Shift-F10, я либо вижу обычное контекстное меню IE, либо выбирается меню меню браузера. Я не могу создать свой контекстный контекст. Джон. – John

+0

Возможно, вам стоит попробовать показать свое меню с помощью JavaScript? Код типа ((JavascriptExecutor)) .executeScript ("menu.display (...)"); Я не знаю подробностей меню, которое вы используете, но для его отображения, безусловно, должна быть какая-то функция JavaScript –

0

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

module Capybara 
    module Node 
    class Element 
     def context_click 
     @session.driver.browser.action.context_click(self.native).perform 
     end 
    end 
    end 
end 
Смежные вопросы