2010-01-18 28 views
11

Làm cách nào tôi có thể thực hiện một nhấp chuột selen() hoạt động giống như một cú click chuột thủ công?Thử nghiệm Selenium của GWT 2.0

Gần đây tôi đã nâng cấp GWT từ 1.7.1 lên 2.0. Một số thử nghiệm selen (SeleniumRC v1.0.1, IE7) hiện đang thất bại. Dường như phương thức Selenium.click() không chọn GWT TreeItem. Một nhấp chuột thủ công sẽ làm cho TreeItem chuyển sang màu xanh dương (ví dụ: nhìn được chọn và có thuộc tính lớp "gwt-TreeItem-selected" trong DOM), nhưng kiểm tra selen không.

Tôi tin rằng selenium thực sự đang tìm đúng yếu tố, chỉ cần không nhấp vào nó. Nếu bạn thay đổi tham số chuỗi trong phương thức nhấp, bạn có thể kiểm tra xem selen có ném ra ngoại lệ khi không tìm thấy phần tử đó hay không.

Mã mẫu bên dưới sử dụng trang web Trình diễn GWT. Nó cố bấm vào từ "Beethoven". Nếu bạn bấm vào từ đó bằng chuột, bạn sẽ thấy TreeItem chuyển sang màu xanh lam. Tuy nhiên khi bạn chạy thử nghiệm selen, nó sẽ không.

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

Tôi đã thử một số phương pháp khác (Selenium.clickAt(), Selenium.fireEvent(), Selenium.mouseOver()/Xuống()/Up()) - nhưng không ai tái tạo các hành vi bằng tay.

+0

Chức năng selen mà thực sự bắn các sự kiện nhấp chuột là triggerMouseEvent trong selen-core/src/main/nguồn/lõi/scripts/selen-browserbot.js. Hầu hết các mã đang tạo ra một đối tượng sự kiện, và sau đó nó gọi là element.dispatchEvent (sự kiện). – John

Trả lời

6

Thật không may khi xem xét trường hợp này, tôi đã không thể sao chép lần nhấp bằng Selenium. Tôi đã thấy một số người phàn nàn rằng họ không thể sử dụng Selenium với GWT và một trong những đội nổi tiếng hơn có vấn đề đó. Nhóm phát triển Google Wave đã bắt đầu sử dụng WebDriver để kiểm tra mã của họ. Bây giờ điều tốt là hiện tại có một dự án hợp nhất Selenium và WebDriver vì chúng có điểm mạnh và điểm yếu và một số trong số đó nằm trong các lĩnh vực khác nhau nên sản phẩm cuối cùng sẽ thật tuyệt vời.

Tôi tin rằng họ có thể có phiên bản làm việc của WebDriverBackedSelenium tại Google Code vì vậy tất cả những gì bạn cần làm là cập nhật phiên bản của Selenium và bắt đầu sử dụng mã WebDriver để chạy thử nghiệm của bạn.

+0

Cảm ơn đề xuất đó. Tôi đã thử bằng cách sử dụng WebDriverBackedSelenium nhưng có kết quả tương tự - Selenium không đúng cách "chọn" GWT TreeItems mà tôi đã cố gắng nhấp vào bằng cách sử dụng phương thức click() của nó. – Glennn

+0

hmm có vẻ khó xử vì nó được yêu cầu làm lệnh webdriver nhưng bạn chỉ cần viết mã selen hoặc đó là cách tôi đã giải thích nó – AutomatedTester

+1

Theo nhận xét của bạn, tôi đã kiểm tra lại và hóa ra tôi không sử dụng WebDriverBackedSelenium. Tôi đã sử dụng selenium-2.0a.1 jar, nhưng đã không nhận ra tôi đã phải sử dụng mới xây dựng WebDriverBackedSelenium() constructor thay vì mới DefaultSelenium(). Với các tham số constructor mới và không gọi .start() (mà ném một lỗi) nó hoạt động. Cảm ơn đống. – Glennn

2

Dường như WebDriver có thể làm điều đó như thế này.

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

Tôi vẫn muốn có thể làm điều đó với Selenium. Có thể là một bản phát hành Selenium trong tương lai sẽ kết hợp hoàn toàn hơn với WebDriver, và mọi thứ sẽ trở nên tuyệt vời một lần nữa. Nhưng tôi đoán điều này hoạt động ngay bây giờ.

1

Tôi muốn đăng mã mà cuối cùng đã làm việc cho tôi sau các bình luận hữu ích từ 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"); 
    } 
} 
Các vấn đề liên quan