Каков наилучший способ прокрутки до веб-элемента, расположенного на текущей странице в окне просмотра, с помощью Selenium - PullRequest
0 голосов
/ 28 декабря 2018

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

Я пробовал много методов, которые описаны в stackoverflow.Но не смог решить мою проблему.

Решения, которые я пробовал:

WebElement element = driver.findElement(By.id("id_of_element"));
((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", element);
Thread.sleep(500);

Ответы [ 3 ]

0 голосов
/ 28 декабря 2018

Вы можете использовать Actions class, предоставляемый Selenium.

public void scrollToElement(WebElement element){
    Actions actions = new Actions(driver);
    actions.moveToElement(element);
    actions.perform();
    WebDriverWait wait = new WebDriverWait(driver, 60);
    wait.until(ExpectedConditions.visibilityOf(element));
}

Здесь я добавил явное ожидание , и оно будет ждать, пока веб-элемент не станет видимым.Максимальное время ожидания составит 60 секунд.Если веб-элемент не будет виден в течение 60 секунд, это вызовет исключение.Вы можете увеличить время ожидания, изменив эту строку.

WebDriverWait wait = new WebDriverWait(driver, 60);

Надеюсь, это поможет.

0 голосов
/ 28 декабря 2018

Вы передаете этот элемент из javascript в java и обратно в javascript.Это плохая идея, к тому времени, когда он совершит ту же поездку, его уже может не быть.

((JavascriptExecutor) driver).executeScript("document.querySelector('#id_of_element').scrollIntoView(true);");

Кроме того, много вещей, которые вам нужно было прокрутить для просмотра (с более старыми селенами), выбольше не делать.

0 голосов
/ 28 декабря 2018

Для прокрутки WebElement на текущей странице в Окно просмотра с использованием Selenium и Java необходимо вызвать WebDriverWait для видимости элемента, расположенного , и вы можете использовать следующее решение:

WebElement element = new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.id("id_of_element")));
((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView();", element)
...