Как прокрутить мышь в определенном меню в главном окне Java Selenium WebDriver - PullRequest
0 голосов
/ 02 января 2019

Я пытаюсь найти веб-элемент в Chrome с помощью Selenium WebDriver.Когда драйвер запускает URL-адрес, отображается список проектов, и драйвер должен выбрать конкретный проект из этого списка.

Пока этот проект находится в верхней части списка, он в порядке и может найтипроект, однако, если проект находится в самом низу списка (согласно списку был упорядочен в алфавитном порядке и, скажем, попытка выбрать запись 57 из списка), тест продолжает проваливаться, и драйвер не может найти веб-элемент !!!

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

Я перепробовал все возможные решения и просматривал весь форум Stack Overflow, а также Интернет, но не смогисправить эту ошибку.Было бы здорово, если бы вы, ребята, взглянули на приведенный ниже код и дали мне несколько советов.Пожалуйста, дайте мне знать, если я должен предоставить больше информации.Здесь стоит упомянуть, что я читаю «projectName» из электронной таблицы.

// Initially I need to hover the mouse on Select Project menu.

Actions action = new Actions(driver);
WebElement list = driver.findElement(By.xpath("//*[@id=\"gridview-1032\"]")); 
action.moveToElement(list);
JavascriptExecutor js = (JavascriptExecutor) driver;

 // Now I need to scroll down till find my desire project in the list.

 WebElement Project = driver.findElement(By.xpath("//*[text()= '"+ projectName +"']"));                 
js.executeScript("arguments[0].scrollIntoView(true);",Project);
Project.click();

Фактический результат:

Исключение в потоке "main" org.openqa.selenium.NoSuchElementException:нет такого элемента: невозможно найти элемент: {"method": "xpath", "selector": "// * [text () = 'projectName']"}

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

Ответы [ 3 ]

0 голосов
/ 03 января 2019

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

// он находит список и прокручивает 3000 пикселей

EventFiringWebDriver eventFiringWebDriver = new EventFiringWebDriver(driver6);
eventFiringWebDriver.executeScript("document.querySelector('#gridview-1032').scrollTop=3000");

// найти проект и залогиниться

WebElement Project = driver6.findElement(By.xpath("//*[text()= '"+ projectName +"']"));
Project.click();
0 голосов
/ 19 февраля 2019

Я нашел альтернативное решение для этого вопроса, которое проще:

// Создать экземпляр исполнителя Javascript

JavascriptExecutor je = (JavascriptExecutor) driver;

// Определить WebElement, который появится после прокрутки вниз

WebElement Project = driver.findElement(By.className("x-grid-item-container"));

// теперь выполняем запрос, который фактически будет прокручиваться до тех пор, пока этот элемент не появится на странице.

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

// Войти в нужный проект

Project.click();
0 голосов
/ 02 января 2019

Здесь ниже код, который работал для меня. Этот код отлично работает в вашем случае

Actions action = new Actions(driver);
WebElement list = driver.findElement(By.xpath("//*[@id=\"gridview-1032\"]")); 
action.moveToElement(list);
JavascriptExecutor js = (JavascriptExecutor) driver;

 // Now I need to scroll down till find my desire project in the list.

 WebElement Project = driver.findElement(By.xpath("//*[text()= '"+ projectName +"']"));                 
js.executeScript("arguments[0].click();",Project);
...