Прокрутка элемента в поле зрения с помощью Selenium
Автор вопроса: Dan at DemandОтветов: 12
Есть ли способ в Selenium 1.x или 2.x прокручивать окно браузера, чтобы конкретный элемент, идентифицированный XPath, был виден браузеру? В Selenium есть метод focus, но он, похоже, не прокручивает представление в FireFox физически. Есть ли у кого-нибудь предложения, как это сделать?
Причина, по которой мне это нужно, заключается в том, что я тестирую щелчок элемента на странице. К сожалению, событие не работает, если элемент не виден. У меня нет контроля над кодом, который запускается при щелчке по элементу, поэтому я не могу отлаживать или вносить в него изменения, поэтому самым простым решением является прокрутка элемента в поле зрения.
Вы можете попробовать этот хакерский , если у вас больше ничего не работает: stackoverflow.com/a/53771434/7093031 < / а> Y-B Cause 17.12.2018
Пробовали много вещей в отношении прокрутки, но приведенный ниже код дал лучшие результаты.
Это будет прокручиваться, пока элемент не появится в поле зрения:
WebElement element = driver.findElement(By.id("id_of_element"));
((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", element);
Thread.sleep(500);
//do anything you want with the element
Ответ 2 · рейтинг 172 · sascha
Вы можете использовать класс org.openqa.selenium.interactions.Actions для перехода к элементу.
Джава:
WebElement element = driver.findElement(By.id("my-id"));
Actions actions = new Actions(driver);
actions.moveToElement(element);
actions.perform();
Python:
from selenium.webdriver.common.action_chains import ActionChains
ActionChains(driver).move_to_element(driver.sl.find_element_by_id('my-id')).perform()
Если вы хотите прокручивать окно Firefox с помощью веб-драйвера Selenium, одним из способов является использование JavaScript в коде Java. Код JavaScript для прокрутки вниз (вниз веб-страницы) выглядит следующим образом:
Таргетинг на любой элемент и отправка клавиш вниз (или вверх / влево / вправо ), похоже, тоже работает. Я знаю, что это что-то вроде взлома, но мне тоже не очень нравится использовать JavaScript для решения проблемы прокрутки.
Например:
WebElement.sendKeys(Keys.DOWN);
Ответ 6 · рейтинг 11 · Mukesh otwani
В Selenium нам нужно воспользоваться помощью исполнителя JavaScript для прокрутки к элементу или прокрутки страницы:
В приведенном выше утверждении element - это именно тот элемент, который нам нужно прокрутить. Я попробовал приведенный выше код, и у меня он сработал.
Дополнительные примеры см. здесь. Все на русском, но код Java кросс-культурный :)
Ответ 8 · рейтинг 6 · Mohsin Awan
Вы можете использовать этот фрагмент кода для прокрутки:
C #
var element = Driver.FindElement(By.Id("element-id"));
Actions actions = new Actions(Driver);
actions.MoveToElement(element).Perform();
Вот оно что
Ответ 9 · рейтинг 6 · Ganesh S
Используйте драйвер для отправки ключей, таких как pagedown или downarrow, чтобы отобразить элемент. Я знаю, что это слишком простое решение и может быть применимо не во всех случаях.
Ответ 10 · рейтинг 6 · user103
Это сработало для меня:
IWebElement element = driver.FindElements(getApplicationObject(currentObjectName, currentObjectType, currentObjectUniqueId))[0];
((IJavaScriptExecutor)driver).ExecuteScript("arguments[0].scrollIntoView(true);", element);
Ответ 11 · рейтинг 4 · Robbie Wareham
По моему опыту, Selenium Webdriver не выполняет автоматическую прокрутку к элементу по щелчку, когда на странице есть более одного прокручиваемого раздела (что довольно часто).
Я использую Ruby, и для моего AUT мне пришлось обезьяно исправить метод щелчка следующим образом;
class Element
#
# Alias the original click method to use later on
#
alias_method :base_click, :click
# Override the base click method to scroll into view if the element is not visible
# and then retry click
#
def click
begin
base_click
rescue Selenium::WebDriver::Error::ElementNotVisibleError
location_once_scrolled_into_view
base_click
end
end
Метод location_once_scrolled_into_view - это существующий метод в классе WebElement.
Я ценю, что вы, возможно, не используете Ruby, но он должен дать вам некоторые идеи.
Ответ 12 · рейтинг 3 · AutomatedTester
Selenium 2 пытается прокрутить до элемента, а затем щелкнуть по нему. Это связано с тем, что Selenium 2 не будет взаимодействовать с элементом, если не считает, что он видим.
Прокрутка к элементу происходит неявно, поэтому вам просто нужно найти элемент, а затем работать с ним.