Selenium/Webdriver отслеживает движение страницы

У меня есть тестовое приложение, которое отображает очень большую диаграмму Ганта. Большинство элементов не отображаются до тех пор, пока не сработает событие прокрутки, и они не понадобятся (с использованием угловых имен и имен классов и т. д.). Мне нужно иметь возможность двигаться во всех направлениях и делать утверждения об этих элементах.

Особой проблемой является проверка видимости. У меня есть следующее:

    private Point AssessElementOutOfViewport()
    {
        var workingViewportMovement = new Point();

        // Essentially the top right of our webpage should ALWAYS be 0,0
        var currentViewportWidth = (int) driver.ExecuteJavaScript<long>("return window.innerWidth");
        var currentViewportHeight = (int) driver.ExecuteJavaScript<long>("return window.innerHeight");

        if (element.Location.X > currentViewportWidth | element.Location.X < 0)
        {
            workingViewportMovement.X = element.Location.X - currentViewportWidth;

            if (workingViewportMovement.X < 20 && workingViewportMovement.X > 0)
            {
                workingViewportMovement.X = 20;
            }
        }

        if (element.Location.Y > currentViewportHeight | element.Location.Y < 0)
        {
            workingViewportMovement.Y = element.Location.Y - currentViewportHeight;

            if (workingViewportMovement.Y < 150 && workingViewportMovement.Y > 0)
            {
                workingViewportMovement.Y = 150;
            }
        }

        return workingViewportMovement;
    }


Этого недостаточно. Это работает только тогда, когда страница находится в состоянии по умолчанию. Как только я переместил страницу при первой проверке, следующий элемент захочет переместиться на величину, которая нежизнеспособна, и после одной целой страницы он переместит страницу на целую страницу, и элемент по-прежнему не будет виден.

Пока я могу обойтись вышеперечисленным, НО я не хочу изобретать велосипед.

С этим наверняка ДОЛЖНО быть уже покончено?

Я просмотрел здесь, документацию WebDriver/ChromeDriver/Selecnium и не нашел свойств или методов, которые помогают отслеживать «смещение», которым манипулировали окном просмотра с течением времени/с момента загрузки страницы.

Любые альтернативные подходы, которые я должен рассмотреть?

В нынешнем виде я просто собираюсь прикрепить объект Point к моему обернутому драйверу и следить за ним самостоятельно....?

Нет, нет кода Selenium, который делает что-то подобное. Я не понимаю, почему вы пытаетесь отслеживать положение элемента с помощью переменной, когда вы можете получить его местоположение по желанию. Почему AssessElementOutOfViewport не возвращает bool... true если он в окне просмотра, false если нет? Вы также не учитываете ширину и высоту элемента. Вам нужно решить, означает ли «в окне просмотра» весь элемент или его часть, и внести соответствующие изменения.

JeffC 25.02.2019 15:26

Я не пытаюсь отслеживать положение элементов, в идеале я хочу отслеживать относительное положение веб-страницы. Рассмотрим следующий пример: Мое окно просмотра имеет размер 1920 x 1080. Элемент 1 находится на одну «страницу» ниже (1080 пикселей вниз). элемент 2 находится на 2 страницы ниже (2160 пикселей). Если при загрузке страницы я получаю текущую позицию элемента 1 и перемещаю страницу, чтобы она была видна, все в порядке, но тот же метод говорит, что элемент 2 теперь требует прокрутки на 2 страницы, поэтому он сделает это, а затем элемент 2 не будет виден, так как он будет на 1 страницу выше окна просмотра?

Joe Triccas 04.03.2019 11:16

Вы пробовали использовать метод JS, scrollIntoView()?

JeffC 04.03.2019 15:42

У меня, к сожалению, это полезно только в браузерах с полной поддержкой CSS 4. В общем, наверное, хватит. Я думаю, что, возможно, это закончится запросом функции к парням из Selenium, поскольку я чувствую, что это было бы полезно представить в классе драйвера....

Joe Triccas 04.03.2019 17:40

Этот метод полностью поддерживается во всех основных браузерах, см. этот стол.

JeffC 04.03.2019 19:31

Да, как я уже сказал, я использую его для ряда случаев. Мой продукт имеет очень большой график, и именно им я манипулирую. По причинам, которые я не могу объяснить, я не могу прокручивать окно или использовать «обычные» полосы прокрутки. Я должен обновить scrollTop и оставить определенный элемент, и это приведет к тому, что мой другой элемент появится в поле зрения. Поэтому, чтобы иметь возможность сделать это, мне нужно будет отслеживать относительное преобразование, через которое прошла страница. Д.У.: Я закрою этот вопрос, ясно, что эта концепция не принимается.

Joe Triccas 05.03.2019 16:03
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
6
36
0

Другие вопросы по теме