2012-03-26 4 views
9

셀레늄에 대해 물어볼 애매한 질문이 있습니다. FirefoxDriver를 사용하여 작업을 수행하는 몇 가지 다른 방법을 발견했습니다. 내가해야 할 일은 사용자가 웹 페이지에서 반복적으로 수행하는 작업 (링크 클릭, 체크 박스 확인 등)입니다. 사용자의 작업을 "기록"할 수있는 방법이나 방법의 조합이 있습니까? 나는이 작업을 수행하기 위해 지금까지 무엇을 여기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]"); 
    } 
} 

답변

5

당신은 Firefox 용 Selenium IDE 부가 기능을 사용하기위한 생성 된 테스트를 내보낼 수 있습니다 (당신은 내가 작업을 수행 할 WebDriverBackedSelenium 및 작업 클래스를 사용하려고했습니다 알 수 있습니다) Webdriver. FirefoxDriver는 특별히 말하지 않지만 인터페이스의 메소드는 게시 한 것과 유사합니다. 이게 도움이 되길 바란다.

+0

당신이 셀레늄 IDE는 사용자의 행동을 기록 할 수있는 방법을 알고 있나요 프로젝트의 창조자와 메인테이너입니까? 그것이 자신을 구현하려고하는 기능이지만, 그렇게 할 수있는 방법을 모릅니다. – user1294114

+0

나는 Selenium IDE가 어떻게 그것을하는지 모른다. 그러나 나는 당신이보고있는 페이지의 DOM에서 변경 이벤트를 잡는다고 생각할 것입니다. 나는 브라우저 GUI에 얼마나 많이 통합되어 있는지 알지 못하지만 그럴 수도있다. 대부분 서버 측에서 찾을 수 있지만 서버에 페이지를 보내지 않고 체크 박스를 선택했는지 확인하는 것은 클라이언트에서만 일어날 수 있습니다 (또는 모든 것을 아약스로 호출해야합니다) –

4

나는 Huxley을 발견했습니다. 사용자 작업을 기록하고 재생할 수 있습니다. 나는이 질문을 그들이 그것을 어떻게 찾았는지 찾아 냈지만 소스 코드에 의지해야했다.

huxley/run.py의 98-154 행은 레코드 기능을 정의합니다. webdirvier를 사용하여 일부 js를 페이지에서 실행하여 일부 이벤트 리스너를 추가합니다. 또한 이벤트를 반환하는 함수를 추가합니다.

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

은 JS 기능이
events = d.execute_script('return window._getHuxleyEvents();') 

그런 다음 이벤트가 응용 프로그램이 특정 보인다 방식으로 저장됩니다 호출되는 이벤트를 읽을 수 있습니다.

죄송합니다. 자바 코드가 없습니다. 이게 도움이 되길 바란다.

0

현재 프로젝트에서 다음과 같은 작업을하고 있습니다 : https://github.com/hristo-vrigazov/selenium-record-replay 브라우저와 응용 프로그램간에 프록시를 배치하고 정의한 동작을 수신하는 javascript를 삽입하여 작동합니다. 예를 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); 

이 프로젝트는 아주 초기 단계에 아직도를 참조하십시오, 그러나 지금도 사용할 수 있습니다. 현재 Chrome 만 지원되지만 곧 다른 브라우저도 추가 할 예정입니다.

면책 조항 : 나는

관련 문제