Подтвердить что ты не робот

Тестирование селена GWT 2.0

Как я могу сделать селен щелчок() работать так же, как ручной щелчок мыши?

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

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

В приведенном ниже примере кода используется веб-сайт 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()/Down()/Up()), но никто не воспроизводит поведение руководства.

4b9b3361

Ответ 1

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

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

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

Ответ 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, и все будет замечательно снова. Но я думаю, что это работает пока.

Ответ 3

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