2010-01-18 5 views
11

Как сделать селен-щелчок() работать так же, как ручной щелчок мыши?Selenium Testing of GWT 2.0

Я недавно обновил GWT с 1.7.1 до 2.0. Некоторые тесты селена (SeleniumRC v1.0.1, IE7) теперь терпят неудачу. Кажется, что метод Selenium.click() не выбирает GWT TreeItem. Ручной щелчок приведет к тому, что TreeItem станет синим (т. Е. Выберите выбранный и у вас есть атрибут класса «gwt-TreeItem-selected» в DOM), но тест selenium этого не делает.

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

В приведенном ниже примере используется веб-сайт GWT Showcase. Он пытается щелкнуть по слову «Бетховен». Если вы нажмете на это слово мышью, вы увидите, что TreeItem синий. Однако, когда вы запускаете тест селена, он не будет.

package test; 

import org.junit.Before; 
import org.junit.Test; 

import com.thoughtworks.selenium.DefaultSelenium; 
import com.thoughtworks.selenium.Selenium; 

public class TestTreeClick { 
    static Selenium selenium = null; 

    @Before 
    public void setUp() throws Exception { 
     if (selenium == null) { 
      selenium = new DefaultSelenium("localhost", 4444, "*iexplore", 
        "http://gwt.google.com/samples/Showcase/Showcase.html#CwTree"); 
      selenium.start(); 
     } 
    } 

    @Test 
    public void testingClicking() { 
     selenium.open("http://gwt.google.com/samples/Showcase/Showcase.html#CwTree"); 
     selenium.click("gwt-debug-cwTree-staticTree-root-child0-content"); 
    } 
} 

Я пробовал некоторые другие методы (Selenium.clickAt(), Selenium.fireEvent(), Selenium.mouseOver()/вниз()/Up()) - но ни один не воспроизвести вручную поведение.

+0

Функция селеном, который фактически увольняет клик события является triggerMouseEvent в селеном ядра/SRC/основные/ресурсы/ядра/скриптов/селеном-browserbot.js. Большая часть кода создает объект события, а затем вызывает element.dispatchEvent (событие). – John

ответ

6

К сожалению, не смотря на этот случай, я не смог повторить щелчок с помощью Selenium. Я видел, как многие люди жаловались, что они не могут использовать Selenium с GWT, и одна из наиболее известных команд имеет эту проблему. Команда разработчиков Google Wave начала использовать WebDriver для проверки своего кода.

Теперь хорошо, что в настоящее время существует проект слияния Selenium и WebDriver, поскольку у них есть свои сильные и слабые стороны, а некоторые из них находятся в разных областях, поэтому конечный продукт будет потрясающим.

Я считаю, что у них может быть рабочая версия WebDriverBackedSelenium по адресу Google Code, поэтому все, что вам нужно будет сделать, это обновить экземпляр Selenium, и он должен начать использовать код WebDriver для запуска теста.

+0

Спасибо за это предложение. Я попытался использовать WebDriverBackedSelenium, но получил тот же результат - Selenium не правильно «выбрал» GWT TreeItems, который я пытался щелкнуть, используя метод click(). – Glennn

+0

hmm, который кажется wierd, так как он должен делать команды webdriver, но вы просто пишете код селена или, как я его интерпретировал – AutomatedTester

+1

Следуя вашему комментарию, я снова проверил, и оказалось, что я не использовал WebDriverBackedSelenium. Я использовал селен-2.0a.1 jar, но не понял, что мне пришлось использовать новый конструктор WebDriverBackedSelenium() вместо нового DefaultSelenium(). С новыми параметрами конструктора и не-вызывающим .start() (который вызывает ошибку) он сработал. Спасибо, кучи. – Glennn

2

Кажется, что WebDriver может сделать это вот так.

import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.WebElement; 
import org.openqa.selenium.ie.InternetExplorerDriver; 

public class Example { 
public static void main(String[] args) throws InterruptedException { 
    WebDriver driver = new InternetExplorerDriver(); 
    driver.get("http://gwt.google.com/samples/Showcase/Showcase.html#CwTree"); 
    WebElement element = driver.findElement(By.id("gwt-debug-cwTree-staticTree-root-child0-content")); 
    element.click(); 
} 
} 

Мне все еще хотелось бы сделать это с помощью Selenium. Возможно, в будущем релиз Selenium будет более полно включать WebDriver, и все будет замечательно снова. Но я думаю, что сейчас это работает.

1

Я хотел опубликовать код, который, наконец, работал для меня после полезных комментариев от AutomatedTester.

import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.WebDriverBackedSelenium; 
import org.openqa.selenium.ie.InternetExplorerDriver; 

import com.thoughtworks.selenium.Selenium; 

public class TestTreeClick { 

    public static void main(String[] args) { 
     WebDriver driver = new InternetExplorerDriver(); 
     Selenium selenium = new WebDriverBackedSelenium(driver, "http://gwt.google.com/samples/Showcase/Showcase.html#CwTree"); 
     selenium.open("http://gwt.google.com/samples/Showcase/Showcase.html#CwTree"); 
     selenium.click("gwt-debug-cwTree-staticTree-root-child0-content"); 
    } 
}