2010-12-17 12 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コール内で動作できるようにするには、そのスクリプトを変更することができました。私はまた、Firefoxに関係のないコードを取り除いた:

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) 

これは、単一の要素内のテキストの範囲を選択することができます。 "Container"はテキストを含む要素のIDで、10と20は開始および停止する文字のインデックスです。

これを1行に縮めて、それをSelenium getEvalステートメントに追加して、それを選択する必要があります。

1つの要素内のテキストに十分な柔軟性がない場合は、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) 
関連する問題