web-dev-qa-db-fra.com

Défenseur à l'aide de Selenium WebDriver avec Java

J'utilise Selenium WebDriver pour automatiser les tests de mon navigateur. L’en-tête de mon navigateur est flottant et est toujours présent indépendamment du défilement du navigateur

Ainsi, lorsque je clique sur certains éléments présents sous la zone visible du navigateur, Selenium essaie de faire défiler l'élément en vue et de cliquer dessus. 

Mais en raison du défilement automatique en tant que tel, les éléments défilent derrière l'en-tête flottant et lorsqu'une action est effectuée sur eux, les éléments de l'en-tête de la page sont cliqués.

existe-t-il un moyen de limiter le défilement par défaut du WebDriver ?

10
Rogers Jefrey L
    Locatable hoverItem = (Locatable) driver.findElement(By.xpath("//li[text()='Reklama w Google']"));
    int y = hoverItem.getCoordinates().getLocationOnScreen().getY();
    ((JavascriptExecutor)driver).executeScript("window.scrollBy(0,"+y+");");
5
TomaszB

Si vous souhaitez faire défiler la fenêtre firefox à l’aide de Selenium Webdriver, l’un des moyens consiste à utiliser javaScript dans le code Java. Le code javeScript à faire défiler est le suivant:

JavascriptExecutor js = (JavascriptExecutor)driver;
                    js.executeScript("window.scrollTo(0,Math.max(document.documentElement.scrollHeight," +
                    "document.body.scrollHeight,document.documentElement.clientHeight));");
4
Ankit Pandey

Utilisez simplement le .sendKeys(Keys.PAGE_DOWN); Lorsque votre élément était visible, cliquez simplement dessus, par .click(element).perform(); Pour moi, fonctionne comme ceci:

clicker = new Actions(driver);
    clicker.sendKeys(Keys.PAGE_DOWN);
    Thread.sleep(1000);
    clicker.click(button).perform();     
    Thread.sleep(1000);
2
Artemy

Vous pouvez faire défiler jusqu'à l'emplacement nécessaire à l'aide de javascript. Pour que cela fonctionne, vous devez utiliser la méthode scrollTo plutôt que la méthode scrollBy.

public void scrollToElement(By by) {
    Locatable element = (Locatable) Selenium.findElement(by);
    Point p= element.getCoordinates().getLocationOnScreen();
    JavascriptExecutor js = (JavascriptExecutor) Selenium;  
    js.executeScript("window.scrollTo(" + p.getX() + "," + (p.getY()+150) + ");");
}
2
EsotericNonsense

Faire défiler vers le haut peut être fait:

private void scrollToTop() {
    JavascriptExecutor js = (JavascriptExecutor) webDriver;
    js.executeScript("window.scrollTo(0, 0);");
}
1
Jonathan L

Pour faire défiler vers le bas:

System.setProperty("webdriver.chrome.driver",
                   "/home/shreetesh/chromedriver");
WebDriver driver = new ChromeDriver(); 
String url = "https://en.wikipedia.org/wiki/Main_Page";
driver.get(url);
JavascriptExecutor js = (JavascriptExecutor)driver;
js.executeScript("scroll(0, 25000);");

Pour faire défiler vers le haut, il suffit de remplacer la valeur de scroll par (2500, 0).

1
BazingaRtshe

Utilisez le code ci-dessous pour faire défiler vers le haut et vers le bas 

Actions dragger = new Actions(driver);

WebElement draggablePartOfScrollbar = driver.findElement(By.xpath("<Scroll bar Element >"));

// drag downwards

int numberOfPixelsToDragTheScrollbarDown = 50;

for (int i=10 ; i<500 ; i=i+numberOfPixelsToDragTheScrollbarDown) {
    try {
        // this causes a gradual drag of the scroll bar, 10 units at a time
        dragger.moveToElement(draggablePartOfScrollbar).clickAndHold().moveByOffset(0,numberOfPixelsToDragTheScrollbarDown).release().perform();
        Thread.sleep(1000L);
    } catch(Exception e1){}
} 

// now drag opposite way (downwards)
numberOfPixelsToDragTheScrollbarDown = -50;
for (int i=500;i>10;i=i+numberOfPixelsToDragTheScrollbarDown){
    // this causes a gradual drag of the scroll bar, -10 units at a time
    dragger.moveToElement(draggablePartOfScrollbar).clickAndHold().moveByOffset(0,numberOfPixelsToDragTheScrollbarDown).release().perform();
    Thread.sleep(1000L);
}
1
Maddy

J'ai récemment eu ce problème en raison d'un menu Drupal bloquant l'élément lorsque j'ai exécuté ce code:

public void scrollTo(WebElement x) {
        ((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", x);
        }

Après référençant cette page , je me suis mis à jour pour définir le booléen sur false en utilisant ce code, et cela fonctionne très bien:

public void scrollTo(WebElement x) {
        ((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(false);", x);
        }
0
bjones01001101