5

Watir で Web アプリケーションをスクロールするにはどうすればよいですか?

私が試してみました@browser.send_keys :space

これにより、ページ全体がダウンします。しかし、アプリケーション内にスクロールがあります。自動化テストで垂直スクロール バーを上下にスクロールする必要があります。助けてください!

ありがとう!

<div dojoattachpoint="containerNode" class="containerNode tabContentPane typeNavigationSingleChild" style="overflow: auto; left: 5px; top: 10px; width: 1549px; height: 535px;">
  <div pageid="lifecycle_theme_home_page_dashboard_pageId" id="lifecycle_theme_home_page_dashboard_pageId" style="height: 535px; padding: 0px; width: 1549px;" widgetid="lifecycle_theme_home_page_dashboard_pageId" title="" role="group" class="dijitContentPane wcs-nullLayout">    
4

5 に答える 5

6

解決策 1) 最後の要素までスクロールする

Vinayのアプローチはうまくいくはずだと思います。ただし、現在のフォームでは、要素がページに既に存在することを前提としています。必要な要素は、十分にスクロールして初めて表示されると思います。したがって、できることは、div の最後の要素までスクロールすることです。

Watir-Webdriver

Watir-Webdriver では:

div_with_scroll = browser.div(:class => 'containerNode tabContentPane typeNavigationSingleChild')
div_with_scroll.elements.last.wd.location_once_scrolled_into_view

ワティルクラシック

Watir-Classic では、selenium-webdriver を使用しないため、異なります。

div_with_scroll = browser.div(:class => 'containerNode tabContentPane typeNavigationSingleChild')
div_with_scroll.elements.last.document.scrollIntoView

解決策 2) ScrollTop プロパティを使用する

別の方法として、上記が機能しない場合はscrollTop、div 要素のスクロールバーを移動するようにプロパティを設定できます。これは、私が取り組んでいた、一番下までスクロールしたときにのみ読み込まれるコンテンツを持つアプリケーションで機能しました。

Watir-Webdriver

スクロールバーを一番下にジャンプするには、理論的には以下のコンテンツの読み込みをトリガーする必要があります。scrollTopプロパティを次のように設定しますscrollHeight

div_with_scroll = browser.div(:class => 'containerNode tabContentPane typeNavigationSingleChild')
scroll_bottom_script = 'arguments[0].scrollTop = arguments[0].scrollHeight'
div_with_scroll.browser.execute_script(scroll_bottom_script, div_with_scroll)

一番上に戻るには、scrollTopを 0 に設定します。

div_with_scroll = browser.div(:class => 'containerNode tabContentPane typeNavigationSingleChild')
scroll_top_script = 'arguments[0].scrollTop = 0'
div_with_scroll.browser.execute_script(scroll_top_script, div_with_scroll)

移動する必要がある場所に応じて、その間の任意の値を使用することもできます。

ワティルクラシック

Watir-Classic では、scrollHeightより直接的に設定できます。

div_with_scroll = browser.div(:class => 'containerNode tabContentPane typeNavigationSingleChild')

#Go to bottom
div_with_scroll.document.scrollTop = div_with_scroll.document.scrollHeight

#Go to top
div_with_scroll.document.scrollTop = 0
于 2013-02-14T14:02:32.650 に答える
0

この結果を得るには、正しい JavaScript エグゼキュータを使用してください。以下に、「私の意見では」これを達成するための最良かつ最も信頼できる方法を示すコードをいくつか書きました。

ページの下部:

((IJavaScriptExecutor)webapplication).ExecuteScript("window.scrollTo(0, document.body.scrollHeight - 5)");

ページのトップ:

((IJavaScriptExecutor)webapplication).ExecuteScript("window.scrollTo(0, document.body.scrollHeight 0)");

また、さまざまな値を設定してさまざまな高さにスクロールすることもできます。頑張ってください、これがあなたにいくらか役立つことを願っています.

于 2014-09-19T08:21:24.037 に答える
0

Justin Ko が提供した 2 番目の方法は、Watir-Classic を使用して、スクロール可能なセクションを反復処理して特定のものを見つけるのに最適です。その例を次に示します。

div_with_scroll = browser.div(:class => 'containerNode tabContentPane typeNavigationSingleChild')
scroll_value = 50 # change this number to match how much you want to scroll each iteration
max_loop = div_with_scroll.document.scrollHeight / scroll_value
if div_with_scroll.document.scrollHeight % scroll_value > 0 # accounts for any remainder height
    max_loop = max_loop + 1
end
for i in 0..max_loop do
    div_with_scroll.document.scrollTop = i * scroll_value # moves the scrollbar
    if div_with_scroll.text.include? 'Search Text'
        puts 'Search Text found in iteration: ' + i.to_s()
        break # exits the loop when found
    end
end

私がここで行っていることを実行するためのより効率的な方法があるかもしれませんが、アイデアはわかります。

于 2013-02-14T20:33:41.790 に答える
0

Javascript を使用します (例: ページの下部):

browser.execute_script("window.scrollTo(0, document.body.scrollHeight);\n")
于 2013-02-15T14:50:33.277 に答える