使用加载Selenium Webdriver的AJAX内容滚动页面

时间:2013-07-12 14:42:11

标签: javascript ajax selenium scroll webdriver

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

我怎么知道什么时候到达底部?在某处可以使用“滚动条不可滚动”的条件吗?或者如果加载更多内容并且滚动条尚不可用于滚动,也会触发,但很快就会出现?

谢谢, BSG

更新

对我有用的答案实际上是给了我的另一个问题(这个问题是该问题的一个更精确的子集)。也就是说,使用jquery来测试以下等价:$(document).height()==($(window).height()+ $(window).scrollTop();.如果它的计算结果为true,那么你已达到页面的底部。(有关其工作原理的解释,请参阅Meaning of $(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);

希望这有助于某人。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

由于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";
}
相关问题