Получить кросс-браузер Scrollheight через Selenium
Я работаю над проектом, который использует Selenium, и я хотел бы попытаться получить полную кросс-браузерную и кроссплатформенную высоты веб-страницы. IE8 как всегда упрямый, есть ли у кого-нибудь идеи, как это решить?
Проблема: когда вы прокручиваете страницу вниз, например, на 500 пикселей, и продолжаете делать это до нижней части страницы, последняя прокрутка будет меньше, чем 500 пикселей. Мне нужно знать, сколько был этот последний свиток.
Два способа решения: 1) Найти смещение, которое было прокручено каждый раз (работает везде, кроме IE8) 2) Найти общую высоту веб-страницы
Я знаю, что функция JQuery height() делает это, но я не могу использовать эту функцию из Selenium RC. Если вы знаете способ вызова функций JQuery через Selenium или любое другое решение, пожалуйста, сообщите!
Ура, Генри
1 ответ
Я нашел решение своей проблемы. Когда вы запускаете тесты с Selenium, он запускает два окна: 1) Окно Selenium, выполняющее все команды 2) Окно браузера, в котором тестируется веб-сайт.
Когда вы пытаетесь получить информацию об окне 2 с помощью функций JavaScript, вам нужно сделать следующее: selenium.browserbot.getCurrentWindow()
Чтобы получить полную высоту окна браузера через селен, вам понадобится следующий скрипт:
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;
}