2016-03-21 140 views
1

Capybaraを使用してヘッドレスでWebページの特定の座標でクリック、ドラッグアンドリリースを実装しようとしています。ターゲットはajaxを介してマウスイベントに応答するカレンダーを含む要素です。スケジュールは、クリック、ドラッグ、および解放によって追加されます。capybara(ルビー)で特定の座標をクリック、ホールド、移動する必要があります

cal = find(:xpath, "//div[@class='dhx_cal_container']") 
page.driver.browser.mouse.move_to(cal.native, 240, 250) 
page.driver.browser.mouse.down 
page.driver.browser.mouse.move_by(0, 150) 
page.driver.browser.mouse.up 

方法1方法1を通報します

何がスクリーンショットに応じて起こっていないが、私は2つの方法を試してみました。

方法2

driver.browser.action.move_to(native).move_by(x1, y1).click_and_hold.perform 
driver.browser.action.move_to(native).move_by(x2, y2).release.perform 

方法2通報: click_and_holdは常に素子の中心を標的とします。

この場合、クリックとドラッグを実装する方法はありますか?

答えて

2

あなたはカピバラさんdrag_to方法

source = page.find('#foo') 
target = page.find('#bar') 
source.drag_to(target) 

詳細情報使用する必要があります:あなたは別の真ん中に一つの要素の中央をドラッグdrag_toカピバラクロスドライバーを発見してきたようにhttp://www.rubydoc.info/github/jnicklas/capybara/Capybara%2FNode%2FElement%3Adrag_to

+1

問題は、要素をドラッグしていないということです。特定のポイントでカレンダー要素をクリックし、マウスを数ピクセル上下に移動する必要があります。 –

0

を。これはあなたのニーズを満たしていないので、運転手に特化しなければなりません - あなたの場合、セレンを指示しました。 #click_and_holdは要素を渡すと要素の真ん中をクリックする必要があります。あなたの方法1の行動を取り、方法2スタイルに変換するには、次はあなたが

cal = find(:xpath, "//div[@class='dhx_cal_container']") 
page.driver.browser.action.move_to(cal.native, 240, 250). 
          click_and_hold. 
          move_to(cal.native, 240, 400). 
          release. 
          perform 

たい何をすべきmove_toに渡されたオフセットはcal.native要素の左上隅からです。 UIの振る舞いは、コンテナをドラッグするだけで、他の要素の位置に基づいていないオフセットをいくつか落とすということは変です。コンテナに基づいて場所を選択し、コンテナ内の要素をドラッグしないことを本当にしたいですか?

+0

残念ながら、動作しません。元の質問の方法2でわかるように、click_and_holdも要素の中心をターゲットにしています。 –

+0

そして、要素内でマウスをドラッグする必要があります。コンテナ内の要素を移動することはできません。 –

+0

@MiikaPalokangasセレンから - https://github.com/SeleniumHQ/selenium/blob/ab1e647d0fc8fc39e6b00ae94321ab228b6728f2/rb/lib/selenium/webdriver/common/action_builder.rb#L164 - click_and_holdは、要素の中央に移動することになっています。 1つが渡されている場合(Mouse#を呼び出してhttps://github.com/SeleniumHQ/selenium/blob/ab1e647d0fc8fc39e6b00ae94321ab228b6728f2/rb/lib/selenium/webdriver/common/mouse.rb#L49)、要素が渡された場合にのみ移動します。渡された要素がなければマウスを押し下げてください。そうでない場合は、セレンプロジェクトに報告してください。 –

関連する問題