繁体   English   中英

滚动带有AJAX内容加载Selenium Webdriver的页面

[英]Scrolling a page with AJAX content loading Selenium Webdriver

我正在使用Selenium Webdriver来获取网页的内容。 当用户使用AJAX向下滚动时,页面将加载更多内容。 我可以使用javascript向下滚动,但不知道何时停止滚动。 我怎么知道何时无法向下滚动? 我不能使用document.clientheight或任何height属性,因为当窗口太小但元素都附加到DOM时,它们会处理滚动,因此它们的高度是已知的。 在这里,元素是动态附加到DOM的,因此高度是未知的。

我怎么知道什么时候到达底部? 某处是否存在“滚动条不可滚动”条件? 还是会在加载更多内容且滚动条尚不可用但很快就会滚动时触发该事件?

谢谢,bsg

更新资料

实际上,对我有用的答案是我的另一个问题(这个问题是该问题的更精确的子集)。 即,使用jquery测试以下等效性:$(document).height()==($(window).height()+ $(window).scrollTop();。如果计算结果为true,则说明达到了页面底部。(有关其工作原理的解释,请参见$(window).scrollTop()== $(document).height()-$(window).height()的含义 )我不是请确保如果没有jquery,这是否可行,因此,如果要测试的页面没有jquery,则可能应使用下面的user1177636答案。

我使用的确切代码是:

JavascriptExecutor js = (JavascriptExecutor)driver;
do{

  //scroll down and do whatever processing you need

  reachedbottom = Boolean.parseBoolean(js.executeScript("return $(document).height() == ($(window).height() + $(window).scrollTop());").toString());

  }while(!reachedbottom);

希望这可以帮助某人。

我有同样的问题。 我刚刚执行$('.footer').scrollIntoView() js滚动到底部。

OP希望我在这里做出回应,因此我会尝试写下一些内容,但可能不是此问题的正确答案。

首先,我需要了解您的网站是否可以无限滚动,例如Flickr Explore

如果它是无止境的,那么我怀疑是否有什么东西可以决定它什么时候结束。 您只能检查是否存在一个特定元素(不是您的情况,对吗?)。

但是,如果站点将在某个时刻结束,则可以继续滚动,如果readyState!= complete

因为您没有说使用什么语言,所以我将在C#中进行说明。

bool readyStateComplete = false;
while (!readyStateComplete) {
    IJavaScriptExecutor executor = driver as IJavaScriptExecutor;
    executor.ExecuteScript("window.scrollTo(0, document.body.offsetHeight)");
    readyStateComplete = (string)executor.ExecuteScript("return document.readyState") == "complete";
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM