Как прокрутить вниз с помощью Selenium?

На этой странице мне нужно щелкнуть ссылку Политика конфиденциальности (открывается новый диалог), и я должен прокручивать вниз, используя Selenium и Java.

Вот что я пробовал:

WebElement element = driver.findElement(By.xpath("/html/body/div[2]"));
((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", element);

это не работает. Прокручивается фоновая страница вместо активного диалогового окна.


person Jeff    schedule 25.10.2018    source источник


Ответы (3)


Чтобы вызвать click() для ссылки с текстом Политика конфиденциальности, вам просто нужно вызвать WebDriverWait, чтобы нужный элемент стал доступным для клика, затем снова вызовите WebDriverWait, чтобы желаемый элемент стал видимым, а затем прокрутите для просмотра, и вы можете использовать следующее решение:

  • Блок кода:

    import org.openqa.selenium.By;
    import org.openqa.selenium.JavascriptExecutor;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.WebElement;
    import org.openqa.selenium.firefox.FirefoxDriver;
    import org.openqa.selenium.support.ui.ExpectedConditions;
    import org.openqa.selenium.support.ui.WebDriverWait;
    
    public class insly_Privacy_Policy {
    
        public static void main(String[] args) {
    
            System.setProperty("webdriver.gecko.driver", "C:\\Utility\\BrowserDrivers\\geckodriver.exe");
            WebDriver driver=new FirefoxDriver();
            driver.get("https://signup.insly.com/signup");
            new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.linkText("privacy policy"))).click();
            WebElement element = new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated((By.xpath("//div[@id='document-content']//following::div[contains(.,'Revision')]"))));
            ((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", element);
        }
    }
    
  • Снимок браузера:

ревизия

person DebanjanB    schedule 25.10.2018
comment
спасибо за ответ, позвольте мне переварить ваш ответ, и я обновлю свой вопрос. - person Jeff; 25.10.2018
comment
конечно, я добавлю ссылку здесь, чтобы убедиться, что вы видите мой новый вопрос. Заранее спасибо. - person Jeff; 25.10.2018
comment
@DebanjanB у вас есть какое-нибудь решение для прокрутки мобильного браузера? Я пробовал майское решение, но оно не работает. - person Al Imran; 25.10.2018
comment
@AlImran Если вы можете задать определенный вопрос о прокрутке в мобильном браузере в нашем сообществе, участники, конечно, могут вам помочь. - person DebanjanB; 25.10.2018
comment
@KamyarParastesh Я перечитал ваш вопрос и чувствую, что должен помочь вам понять, что если у вас нет точки проверки, бесполезно заставлять Selenium выполнять какие-либо шаги, например. прокрутка и т. д. В вашем вопросе, как вы упомянули о ... нужно нажать на ссылку Политика конфиденциальности (откроется новый диалог), и я должен прокрутить вниз...< /i> который, я считаю, должен был закрыть как слишком широкий, а скорее как ответ. Каким-то образом я остановился на Мне нужно нажать на ссылку Политика конфиденциальности и предположил, что вы хотите нажать на Флажок. Значит ответил. Я обновил свой ответ в соответствии с вашими полными шагами. - person DebanjanB; 25.10.2018

div, который вы хотите прокрутить, имеет уникальный идентификатор, и вам нужно сначала получить ссылку на него:

WebElement element = driver.findElement(By.id('document-content'));

После этого вы можете получить последний дочерний элемент в этом разделе политики конфиденциальности:

List<WebElement> children = element.findElements(By.tagName("div"));
assertTrue(children.size() > 0);
WebElement elementToScrollTo = children.get(children.size()-1);

Теперь вы можете прокрутить до elementToScrollTo.

person Selaron    schedule 25.10.2018
comment
+1, но вы можете упростить код как WebElement element = driver.findElement(By.xpath("//div[@id='document-content']/*[last()]")); ((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", element); - person Andersson; 25.10.2018
comment
@KamyarParastesh, также убедитесь, что вы добавили ожидание появления модального окна WebDriverWait(driver, 5).until(ExpectedConditions.visibilityOfElementLocated(By.id("document-content"))) - person Andersson; 25.10.2018
comment
@Andersson, пожалуйста, найдите этот вопрос stackoverflow.com/questions/52986601/ - person Jeff; 25.10.2018

Вы можете прокрутить до местоположения относительно количества пикселей в плоскости:

JavascriptExecutor jsx = (JavascriptExecutor)driver;
jsx.executeScript("window.scrollBy(0,450)", "");
person Rooski    schedule 25.10.2018