2012-02-25 83 views
10

我使用Selenium WebDriver自動執行瀏覽器測試。 我的瀏覽器標題是浮動的,並且始終存在,與瀏覽器滾動無關。使用Selenium WebDriver與Java滾動

因此,當我點擊瀏覽器當前可見區域下面的某些元素時,硒會嘗試將元素滾動到視圖中並單擊它們。

但是由於自動滾動,元素在浮動標題後面滾動,當對它們執行任何操作時,頁面標題中的元素將被點擊。

有沒有什麼辦法來限制WebDriver默認滾動條

+0

我知道你想用Selenium WebDriver控制滾動。有一個類似的問題討論/解決[這裏](http://sqa.stackexchange.com/a/1292/1316),我希望這是有用的。 – Ziran 2012-02-26 12:48:59

+0

謝謝,我寫了一個JavaScript套件我的需要 – 2012-03-11 03:20:12

+0

您可以在這裏得到解決方案:http://stackoverflow.com/questions/12293158/page-scroll-up-or-down-in-webdriver-selenium-2-using -java OR,http://stackoverflow.com/questions/11554370/vertical-scroll-down-and-scroll-up-in-webdriver-with-java – 2014-04-04 05:21:43

回答

5
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+");"); 
+0

//編譯這個的C#4.5版本 int y =((ILocatable)element).Coordinates.LocationInViewport.Y; ((IJavaScriptExecutor)驅動程序).ExecuteScript(「窗口。scrollBy(0,「+ y +」);「); } – Aligned 2013-11-05 18:05:26

+0

window.scroll而不是scrollBy對我來說效果更好 – Aligned 2013-11-08 17:46:48

+0

同樣如果你有一個html ID,你可以使用下面的 – EsotericNonsense 2014-06-25 21:15:19

4

如果你想使用硒webdriver的Firefox窗口上滾動,方式之一就是在Java代碼中使用JavaScript中,javeScript代碼向下滾動如下:

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

適合我直接滾動到下:) - 對於那些想要一個JS /量角器版本'browser.executeScript(「window.scrollTo(0,Math.max(document.documentElement.scrollHeight,document.body.scrollHeight, document.documentElement.clientHeight));「);' – 2014-03-13 12:00:30

2

您可以使用JavaScript滾動到必要位置您需要使用scrollTo方法而不是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) + ");"); 
} 
1

使用下面的代碼向上滾動和向下滾動

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); 
} 
2

簡單使用 .sendKeys(Keys.PAGE_DOWN); 當你的元素是可見的,只要按一下就可以了,通過.click(element).perform(); 工作對我來說是這樣的:

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

滾動到頂部可以完成:

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

對於向下滾動:

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

要向上滾動只是代替滾動的值(2500,0)。

0

最近,我有這個問題,因爲一個Drupal菜單阻塞元素,當我跑這個代碼:

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

referencing this page後,我更新了使用此代碼的布爾值設置爲false,而它的偉大工程:

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