通过Selenium获取scrollheight跨浏览器

时间:2010-05-04 17:15:16

标签: javascript jquery internet-explorer-8 selenium

我正在开发一个使用Selenium的项目,我想尝试跨浏览器和跨平台获得完整的网页高度。 IE8一如既往地顽固,是否有人知道如何解决这个问题?

问题:向下滚动页面时,例如500px并且你一直这样做直到页面底部,最后一次滚动将小于500px。我需要知道最后一卷是多少。

两种解决方法: 1)找到每次滚动的偏移量(除了IE8以外的任何地方都可以工作) 2)找到网页的总高度

我知道JQuery的height()函数可以做到这一点,但我不能使用Selenium RC中的这个函数。 如果您知道通过Selenium或任何其他解决方案调用JQuery函数的方法,请告诉我们!

干杯, 亨利

1 个答案:

答案 0 :(得分:2)

我找到了解决自己问题的方法。 当您使用Selenium运行测试时,它会启动两个窗口: 1)Selenium窗口执行所有命令 2)测试网站的浏览器窗口。

当您尝试通过JavaScript函数获取有关窗口2的信息时,您需要执行以下操作: selenium.browserbot.getCurrentWindow()

要通过selenium跨浏览器获取浏览器窗口的完整高度,您需要以下脚本:

function getPageHeight(){
    $scrOfY = 0;
    $test = $this->getEval("typeof(selenium.browserbot.getCurrentWindow().pageYOffset)");
    if(strcmp($test,"number") == 0) {
        //Netscape compliant
        $scrOfY = (int)$this->getEval("selenium.browserbot.getCurrentWindow().pageYOffset;");
        //scrOfX = window.pageXOffset;
    } else if( (bool)$this->getEval("selenium.browserbot.getCurrentWindow().document.body != null") && (bool)$this->getEval("selenium.browserbot.getCurrentWindow().document.body.scrollTop != null")) {
        //DOM compliant
        $scrOfY = (int)$this->getEval("selenium.browserbot.getCurrentWindow().document.body.scrollTop;");
        //scrOfX = document.body.scrollLeft;
    } else if( (bool)$this->getEval("selenium.browserbot.getCurrentWindow().document.documentElement != null") && (bool)$this->getEval("selenium.browserbot.getCurrentWindow().document.documentElement.scrollTop != null")) {
        //IE6 standards compliant mode
        $scrOfY = (int)$this->getEval("selenium.browserbot.getCurrentWindow().document.documentElement.scrollTop;");
        //scrOfX = document.documentElement.scrollLeft;
    }
    if(!$scrOfY || $scrOfY <= 0)
        $scrOfY = $this->getEval("selenium.browserbot.getCurrentWindow().document.body.offsetHeight");

    return $scrOfY;
}