如何在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">
答案 0 :(得分: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古典强>
在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
设置为零。
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古典强>
在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
答案 1 :(得分:4)
如果元素位于页面底部,则会加载更多内容:
browser.element.wd.location_once_scrolled_into_view
答案 2 :(得分:0)
使用Watir-Classic,Justin Ko提供的第二种方法非常适合迭代可滚动部分以查找特定内容。这是一个例子:
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
可能有一种更有效的方式来做我在这里做的事情,但你明白了。
答案 3 :(得分:0)
使用Javascript(例如页面底部):
browser.execute_script("window.scrollTo(0, document.body.scrollHeight);\n")
答案 4 :(得分:0)
使用正确的javascript执行程序来实现这一结果 - 下面我已经编写了一些代码来向您展示我认为的&#39;实现这一目标的最佳和最可靠的方法:
页面底部:
((IJavaScriptExecutor)webapplication).ExecuteScript("window.scrollTo(0, document.body.scrollHeight - 5)");
TOP OF PAGE:
((IJavaScriptExecutor)webapplication).ExecuteScript("window.scrollTo(0, document.body.scrollHeight 0)");
您还可以设置不同的值以滚动到不同的高度 - 例如滚动到底部代码我已从页面底部设置为5px。祝你好运,希望这对你有所帮助。