2012-03-26 43 views
9

Tôi có một câu hỏi bán mơ hồ để hỏi về Selenium. Tôi đã khám phá ra một vài cách khác nhau để thực hiện các hành động bằng cách sử dụng FirefoxDriver. Những gì tôi cần làm là lặp lại các hành động mà người dùng thực hiện trên trang web (nhấp vào liên kết, chọn hộp kiểm, v.v.). Có phương pháp hay kết hợp các phương pháp nào cho phép tôi "ghi lại" hành động của người dùng không? Dưới đây là những gì tôi có cho đến nay để thực hiện hành động (bạn sẽ nhận thấy tôi đã cố gắng sử dụng các lớp WebDriverBackedSelenium và hành động để thực hiện hành động)Ghi lại hành động bằng cách sử dụng Selenium

import java.util.List; 

import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriverBackedSelenium; 
import org.openqa.selenium.WebElement; 
import org.openqa.selenium.firefox.FirefoxDriver; 
import org.openqa.selenium.interactions.Actions; 
import org.openqa.selenium.interactions.Action; 

public class MyReplayer { 
    public static void main(String[] args) throws Exception { 
     // The Firefox driver supports javascript 
     FirefoxDriver driver = new FirefoxDriver(); 

     driver.get("http://www.cs.umd.edu"); 

     List<WebElement> elements = driver.findElements(By.tagName("a")); 
     //WebDriverBackedSelenium driverBacked = new WebDriverBackedSelenium(driver,  "http://www.cs.umd.edu"); 
     Actions builder = new Actions(driver);  
     Action clickLink = builder.click(elements.get(100)).build(); 
     clickLink.perform(); 
     //driverBacked.click("document.getElementsByTagName('a')[100]"); 
    } 
} 

Trả lời

5

Bạn có thể sử dụng Selenium IDE Addon cho Firefox và xuất thử nghiệm tạo ra cho Trình quản lý web. Nó không cụ thể nói FirefoxDriver, nhưng các phương pháp của giao diện trông giống như những gì bạn đăng. Tôi hi vọng cái này giúp được.

+0

Bạn có biết cách IDE Selenium có thể ghi lại hành động của người dùng không? Đó là chức năng mà tôi đang tìm kiếm để thực hiện bản thân mình nhưng tôi không biết bất kỳ phương pháp nào để giúp tôi làm điều đó. – user1294114

+0

Tôi không biết làm thế nào Selenium IDE hiện nó. Nhưng tôi nghĩ rằng họ bắt sự kiện thay đổi trong DOM của trang bạn đang xem. Tôi không biết chúng được tích hợp vào GUI của Trình duyệt nhưng điều đó cũng có thể xảy ra. Phần lớn có thể được tìm thấy ở phía máy chủ, nhưng tìm ra nếu một hộp kiểm đã được kiểm tra mà không gửi trang đến máy chủ chỉ có thể xảy ra trên máy khách (hoặc bạn sẽ phải thực hiện cuộc gọi ajax cho mọi thứ) –

4

Tôi đã xem qua số Huxley. Nó cho phép ghi và phát lại các hành động của người dùng. Tôi tìm thấy câu hỏi này để tìm hiểu cách họ đã làm, nhưng phải dùng đến mã nguồn.

Dòng 98-154 trong số huxley/run.py xác định hàm bản ghi. Nó sử dụng webdirvier để thực hiện một số js trên trang mà thêm một số người nghe sự kiện. Nó cũng thêm một hàm để trả về các sự kiện.

(function() { 
var events = []; 
window.addEventListener('click', function (e) { events.push([Date.now(), 'click', [e.clientX, e.clientY]]); }, true); 
window.addEventListener('keyup', function (e) { events.push([Date.now(), 'keyup', String.fromCharCode(e.keyCode)]); }, true); 
window._getHuxleyEvents = function() { return events; }; 
})(); 

Để đọc các sự kiện chức năng js được gọi

events = d.execute_script('return window._getHuxleyEvents();') 

Sau đó, các sự kiện được lưu trữ trong một cách mà dường như ứng dụng cụ thể.

Rất tiếc, tôi không có mã Java. Tôi hi vọng cái này giúp được.

0

Tôi hiện đang làm việc trên một dự án thực hiện một việc như thế này: https://github.com/hristo-vrigazov/selenium-record-replay Nó hoạt động bằng cách đặt proxy giữa trình duyệt và ứng dụng, và tiêm javascript để lắng nghe các hành động mà bạn đã xác định. Xem ví dụ https://github.com/hristo-vrigazov/selenium-record-replay/blob/master/terminator-cli/src/main/java/browser/Main.java#L74

 RecordBrowserBase recordBrowserBase = new ChromeRecordBrowser(pathToChromedriver, pathToJSInjectionFile); 
     try { 
      recordBrowserBase.record(baseUrl); 
      System.out.println("Press Enter when finished recording"); 
      System.in.read(); 
      recordBrowserBase.dumpActions(outputFile); 
     } catch (IOException | InterruptedException | URISyntaxException e) { 
      e.printStackTrace(); 
     } 

     recordBrowserBase.cleanUp(); 

     System.exit(0); 

Dự án vẫn còn trong giai đoạn rất sớm, nhưng nó có thể được sử dụng ngay cả bây giờ. Hiện tại chỉ hỗ trợ Chrome, nhưng tôi cũng sẽ sớm thêm các trình duyệt khác.

Tuyên bố từ chối trách nhiệm: Tôi là người sáng tạo và người duy trì dự án

Các vấn đề liên quan