Здесь есть несколько вариантов решений. Я думаю, что прокрутка к элементу может быть немного хакерской, потому что тогда он удалит другие элементы из представления браузера, так что вам в конечном итоге придется прокручивать повсюду, чтобы найти элементы, которые могут или не могут быть видныбраузера.
Но, если вы хотите использовать решение с прокруткой, вы можете попробовать что-то вроде этого:
// declare JS executor
JavascriptExecutor executor = (JavascriptExecutor)driver;
// this is the element you want to find
WebElement element = driver.findElement(someLocatorHere);
// scroll to the element
executor.executeScript("arguments[0].scrollIntoView(true);", element);
Я не большой поклонник этого решения, по причинамЯ упоминал выше. «Истинное» решение, которое решит все проблемы этого типа, - это запустить браузер в headless
и указать размер экрана в настройках драйвера.
// declaring the webdriver
// headless options
ChromeOptions headlessOptions = new ChromeOptions();
headlessOptions.AddArgument("--headless");
headlessOptions.AddArguments("--disable-gpu");
headlessOptions.AddArguments("--window-size=1920,1200");
// start driver
driver = new ChromeDriver(headlessOptions);
Я предпочитаю безголовое решение, потому что оно решитбольшинство, если не все, ваши проблемы, связанные с меньшим разрешением экрана. Большую часть своей карьеры я изучал проблемы с разрешением экрана, и прокрутка всех страниц для поиска отдельных элементов не была долговременным или надежным решением. Я добился гораздо большего успеха, используя безголовый, и водитель может найти все мои элементы.