Селен не может найти элемент в меньшем разрешении экрана - PullRequest
0 голосов
/ 05 ноября 2019

У меня есть элемент с data-qa-id = "journal-submit";Когда я запускал тест с небольшим разрешением экрана, Selenium говорит, что этот элемент не виден и не может выполнять над ним никаких действий. Этот же элемент виден для селена в обычном разрешении хрома. Может кто-нибудь объяснить мне, почему это так? Как справиться с этим?

Ответы [ 3 ]

0 голосов
/ 06 ноября 2019

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

Но, если вы хотите использовать решение с прокруткой, вы можете попробовать что-то вроде этого:

// 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);

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

0 голосов
/ 06 ноября 2019

Я использовал JavascriptExecutor, и он работал

JavascriptExecutor executor = (JavascriptExecutor)browser; WebElement submit_btn = browser.findElement(By.name("submit-btn")); executor.executeScript("arguments[0].click()",submit_btn);

0 голосов
/ 05 ноября 2019

Если селен не может идентифицировать веб-элемент из-за разрешения, попробуйте перейти к элементу с помощью действия.

WebElement element = (new WebDriverWait(driver, 10))   
.until(ExpectedConditions.visibilityOfElementLocated(By.id("someid")));
Actions action=new Actions(driver);
action.moveToElement(element).perform();

Затем выполните необходимые действия с веб-элементом

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...