2010-12-17 3 views
4

Ich mache Änderungen an einem Texteditor, und ich muss in der Lage sein, Text auszuwählen, um ihn mit JavaScript zu bearbeiten. Wie wähle ich Text mit Gurke, Capybara und Selen?Gurke + Capybara + Selen: Text auswählen

+4

Dieser Titel klingt nach dem Rezept für ein tödliches * hors d'oeuvre *. Sag es einfach. Bitte verzeih den Freitags dieses Kommentars. – MPelletier

Antwort

3

Ich habe eine andere stackoverflow Frage gefunden, die darüber spricht, wie man Text mit JavaScript auswählt.

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

konnte ich ihr Skript ändern, innerhalb eines getEval Anruf von Selenium IDE in der Lage sein zu arbeiten (wenn Sie Selen in einer anderen Art und Weise verwenden, können Sie es ändern müssen). Ich zog auch den Code nicht relevant für Firefox aus:

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) 

Auf diese Weise können Sie einen Textbereich innerhalb eines einzelnen Elements auszuwählen. "Container" ist die ID des Elements, das den Text enthält, und 10 und 20 sind die Indexe der Zeichen, zu denen gestartet und gestoppt werden soll.

Verdichten Sie dies nur auf eine Zeile, fügen Sie es zu einer Selenium getEval-Anweisung hinzu, und es sollte den Text für Sie auswählen.

Wenn Text in einem einzelnen Element nicht flexibel genug für Sie ist, sollte die Dokumentation zu JavaScript-Bereichen Ihnen die zusätzlichen Details liefern, die Sie benötigen.

+0

Danke. Ich überlege mir jedoch, wie ich das auf meine Einrichtung anwenden soll. –

0

bindet den Ansatz von Josh in eine Capybara Helferfunktion vorgeschlagen (und das Hinzufügen optionale Positions Argumente für Teil Auswahlen innerhalb der Start-/Ende-Elemente):

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) 

Dann in Ihrem Test:

start_el = first('#first') 
end_el = first('#last') 
select_text(start_el, end_el)