2010-01-18 4 views
11

Come faccio a fare clic su un selenio() come un clic del mouse manuale?Test al selenio di GWT 2.0

Ho recentemente aggiornato GWT da 1.7.1 a 2.0. Alcuni test sul selenio (SeleniumRC v1.0.1, IE7) stanno fallendo. Sembra che il metodo Selenium.click() non stia selezionando GWT TreeItem. Un clic manuale farà diventare TreeItem blu (ad esempio, l'aspetto è selezionato e l'attributo di classe "gwt-TreeItem-selected" nel DOM), ma il test del selenio no.

Sono convinto che il selenio stia effettivamente trovando l'elemento giusto, semplicemente non facendo clic su di esso. Se si modifica il parametro stringa nel metodo click, è possibile verificare che il selenio generi un'eccezione quando l'elemento non viene trovato.

Il seguente codice di esempio utilizza il sito Web di GWT Showcase. Cerca di cliccare sulla parola "Beethoven". Se fai clic su quella parola con il mouse, vedrai che TreeItem diventa blu. Tuttavia quando si esegue il test del selenio, non lo farà.

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"); 
    } 
} 

ho provato alcuni altri metodi (Selenium.clickAt(), Selenium.fireEvent(), Selenium.mouseOver()/Giù()/Su()) - ma nessuno riprodurre il comportamento manuale.

+0

La funzione di selenio che in realtà genera gli eventi click è triggerMouseEvent di selenio-core/src/main/resources/nucleo/scripts/selenio-browserbot.js. La maggior parte del codice sta creando un oggetto evento, quindi chiama element.dispatchEvent (evento). – John

risposta

6

Purtroppo non ho potuto replicare cliccando su Selenium. Ho visto un numero di persone lamentarsi del fatto che non possono utilizzare il Selenium con GWT e uno dei team più famosi ha quel problema. Il team di sviluppo di Google Wave ha iniziato a utilizzare WebDriver per testare il codice.

Ora la cosa buona è che al momento esiste un progetto per unire Selenium e WebDriver in quanto hanno i loro punti di forza e di debolezza e alcuni di essi si trovano in aree diverse, quindi il prodotto finale sarà sorprendente.

Credo che possano avere una versione funzionante di WebDriverBackedSelenium allo Google Code quindi tutto ciò che si dovrebbe fare è aggiornare l'istanziazione di Selenium e dovrebbe iniziare a usare il codice WebDriver per eseguire il test.

+0

Grazie per il suggerimento. Ho provato a utilizzare WebDriverBackedSelenium ma ho ottenuto lo stesso risultato: il selenio non ha correttamente "selezionato" GWT TreeItems che ho provato a fare clic utilizzando il suo metodo click(). – Glennn

+0

hmm che sembra strano dal momento che dovrebbe fare comandi webdriver ma basta scrivere codice selenio o è come l'ho interpretato – AutomatedTester

+1

In seguito al tuo commento, ho ricontrollato e risulta che non stavo usando WebDriverBackedSelenium. Stavo usando il selenio-2.0a.1 jar, ma non mi ero reso conto che dovevo usare il nuovo costruttore WebDriverBackedSelenium() invece del nuovo DefaultSelenium(). Con i nuovi parametri del costruttore e la non chiamata .start() (che genera un errore) ha funzionato. Grazie mille. – Glennn

2

Sembra che WebDriver possa farlo in questo modo.

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(); 
} 
} 

Mi piacerebbe ancora essere in grado di farlo con selenio. Può darsi che una futura versione di Selenium includa più pienamente WebDriver e tutto sarà di nuovo meraviglioso. Ma immagino che questo funzioni per ora.

1

Volevo pubblicare il codice che finalmente funzionava per me dopo i commenti utili di 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"); 
    } 
}