Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Прокрутка элемента в поле зрения с помощью 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

scrollseleniumautomated-tests

Ответы

Ответ 1 · рейтинг 253 · Amith

Пробовали много вещей в отношении прокрутки, но приведенный ниже код дал лучшие результаты.

Это будет прокручиваться, пока элемент не появится в поле зрения:

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()

Ответ 3 · рейтинг 29 · Mayur

JavascriptExecutor js = (JavascriptExecutor) driver;
        js.executeScript("javascript:window.scrollBy(250,350)");

Вы можете попробовать это.

Ответ 4 · рейтинг 16 · Ankit Pandey

Если вы хотите прокручивать окно Firefox с помощью веб-драйвера Selenium, одним из способов является использование JavaScript в коде Java. Код JavaScript для прокрутки вниз (вниз веб-страницы) выглядит следующим образом:

JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("window.scrollTo(0, Math.max(document.documentElement.scrollHeight, document.body.scrollHeight, document.documentElement.clientHeight));");

Ответ 5 · рейтинг 14 · DevDave

Таргетинг на любой элемент и отправка клавиш вниз (или вверх / влево / вправо ), похоже, тоже работает. Я знаю, что это что-то вроде взлома, но мне тоже не очень нравится использовать JavaScript для решения проблемы прокрутки.

Например:

WebElement.sendKeys(Keys.DOWN);

Ответ 6 · рейтинг 11 · Mukesh otwani

В Selenium нам нужно воспользоваться помощью исполнителя JavaScript для прокрутки к элементу или прокрутки страницы:

je.executeScript("arguments[0].scrollIntoView(true);", element);

В приведенном выше утверждении element - это именно тот элемент, который нам нужно прокрутить. Я попробовал приведенный выше код, и у меня он сработал.

У меня есть полный пост и видео по этому поводу:

http://learn-automation.com/how-to-scroll-into-view-in-selenium-webdriver/

Ответ 7 · рейтинг 9 · VovecUdalec

webElement = driver.findElement(By.xpath("bla-bla-bla"));
((JavascriptExecutor)driver).executeScript("arguments[0].scrollIntoView();", webElement);

Дополнительные примеры см. здесь. Все на русском, но код 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 не будет взаимодействовать с элементом, если не считает, что он видим.

Прокрутка к элементу происходит неявно, поэтому вам просто нужно найти элемент, а затем работать с ним.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы