У меня есть тестовое приложение, которое отображает очень большую диаграмму Ганта. Большинство элементов не отображаются до тех пор, пока не сработает событие прокрутки, и они не понадобятся (с использованием угловых имен и имен классов и т. д.). Мне нужно иметь возможность двигаться во всех направлениях и делать утверждения об этих элементах.
Особой проблемой является проверка видимости. У меня есть следующее:
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 к моему обернутому драйверу и следить за ним самостоятельно....?
Я не пытаюсь отслеживать положение элементов, в идеале я хочу отслеживать относительное положение веб-страницы. Рассмотрим следующий пример: Мое окно просмотра имеет размер 1920 x 1080. Элемент 1 находится на одну «страницу» ниже (1080 пикселей вниз). элемент 2 находится на 2 страницы ниже (2160 пикселей). Если при загрузке страницы я получаю текущую позицию элемента 1 и перемещаю страницу, чтобы она была видна, все в порядке, но тот же метод говорит, что элемент 2 теперь требует прокрутки на 2 страницы, поэтому он сделает это, а затем элемент 2 не будет виден, так как он будет на 1 страницу выше окна просмотра?
Вы пробовали использовать метод JS, scrollIntoView()?
У меня, к сожалению, это полезно только в браузерах с полной поддержкой CSS 4. В общем, наверное, хватит. Я думаю, что, возможно, это закончится запросом функции к парням из Selenium, поскольку я чувствую, что это было бы полезно представить в классе драйвера....
Этот метод полностью поддерживается во всех основных браузерах, см. этот стол.
Да, как я уже сказал, я использую его для ряда случаев. Мой продукт имеет очень большой график, и именно им я манипулирую. По причинам, которые я не могу объяснить, я не могу прокручивать окно или использовать «обычные» полосы прокрутки. Я должен обновить scrollTop и оставить определенный элемент, и это приведет к тому, что мой другой элемент появится в поле зрения. Поэтому, чтобы иметь возможность сделать это, мне нужно будет отслеживать относительное преобразование, через которое прошла страница. Д.У.: Я закрою этот вопрос, ясно, что эта концепция не принимается.





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