2010-12-17 4 views
4

텍스트 편집기를 변경하고 있으며 JavaScript로 조작하기 위해 텍스트를 선택할 수 있어야합니다. Cucumber, Capybara 및 Selenium으로 텍스트를 선택하려면 어떻게해야합니까?Cucumber + Capybara + Selenium : 텍스트 선택

+4

그 제목은 치명적인 전설의 요리법처럼 들립니다. 그냥 말해. 이 의견의 금요일 맞이를 용서해주십시오. – MPelletier

답변

3

JavaScript를 사용하여 텍스트를 선택하는 방법에 대해 이야기하는 또 다른 stackoverflow 질문을 발견했습니다.

Can you set and/or change the user’s text selection in JavaScript?

나는 (당신이 다른 방법으로 셀레늄을 사용하는 경우, 당신이 그것을 수정해야 할 수 있습니다) 셀레늄 IDE에서 getEval 호출 내에서 작동 할 수 있도록 자신의 스크립트를 수정 할 수 있었다.

function selectElementContents(el,start,end) { 
    var sel = window.getSelection(); 
    var range = window.document.createRange(); 
    range.setStart(el,start); 
    range.setEnd(el,end); 
    sel.removeAllRanges(); 
    sel.addRange(range); 
} 
selectElementContents(window.document.getElementById("container").firstChild,10,20) 

이것은 당신이 하나의 요소 내에서 텍스트 범위를 선택할 수 있습니다 : 나는 또한 파이어 폭스에 관련되지 않은 코드를 제거. "컨테이너"는 텍스트가 포함 된 요소의 ID이고 10과 20은 시작 및 중지 할 문자의 색인입니다.

그냥 한 줄에 압축하여 Selenium getEval 문에 추가하면 텍스트가 선택됩니다.

단일 요소 내의 텍스트가 충분히 유연하지 않으면 JavaScript 범위에 대한 설명서에서 필요한 추가 세부 정보를 제공해야합니다.

+0

감사합니다. 나는 이것을 설치 프로그램에 적용하는 방법을 알아 냈습니다. –

0

카피 바라 도우미 함수에 조쉬에 의해 제안 된 접근 방식을 묶는 (및 시작/종료 요소 내에서 부분적인 선택에 대한 임의의 위치 인수를 추가) :

module TextSelection 
    def select_text(startEl, endEl, startPos = 0, endPos = 0) 
    js = <<-JS 
     var sel = window.getSelection(); 
     var range = window.document.createRange(); 
     range.setStart(arguments[0],#{startPos}); 
     range.setEnd(arguments[1],#{endPos}); 
     sel.removeAllRanges(); 
     sel.addRange(range); 
    JS 

    page.execute_script(js, startEl.native, endEl.native) 
    end 
end 

World(TextSelection) 

를 그런 다음 테스트 :

start_el = first('#first') 
end_el = first('#last') 
select_text(start_el, end_el) 
관련 문제