5

テキスト エディターに変更を加えているのですが、テキストを選択して JavaScript で操作できるようにする必要があります。Cucumber、Capybara、Selenium でテキストを選択するにはどうすればよいですか?

4

2 に答える 2

3

JavaScript を使用してテキストを選択する方法について説明している別のスタックオーバーフローの質問を見つけました。

JavaScript でユーザーのテキスト選択を設定および/または変更できますか?

Selenium IDE からの getEval 呼び出し内で機能するようにスクリプトを変更することができました (別の方法で Selenium を使用している場合は、変更が必要になる場合があります)。また、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)

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

これを 1 行に要約し、Selenium の getEval ステートメントに追加するだけで、テキストが選択されます。

1 つの要素内のテキストに十分な柔軟性がない場合は、JavaScript の範囲に関するドキュメントで、必要な追加の詳細を提供する必要があります。

于 2011-01-13T13:54:53.900 に答える
0

Josh によって提案されたアプローチを Capybara ヘルパー関数に結び付けます (そして、開始/終了要素内の部分選択のためのオプションの位置引数を追加します):

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)
于 2017-08-09T20:38:58.783 に答える