2012-02-25 56 views
10

Tôi đang sử dụng Selenium WebDriver để tự động kiểm tra trình duyệt của mình. Tiêu đề trình duyệt của tôi đang nổi và luôn xuất hiện bất kể cuộn trang trình duyệt.Cuộn bằng Selenium WebDriver với Java

Vì vậy, khi tôi nhấp vào các phần tử nhất định hiện diện bên dưới vùng hiển thị hiện tại của trình duyệt, selenium cố gắng cuộn phần tử đó vào chế độ xem và nhấp vào chúng.

Nhưng vì cuộn tự động vì các phần tử này được cuộn phía sau tiêu đề nổi và khi bất kỳ hành động nào được thực hiện trên chúng, các phần tử trong tiêu đề trang được nhấp vào.

có cách nào giới hạn cuộn mặc định của WebDriver không?

+0

Tôi hiểu rằng bạn muốn kiểm soát cuộn bằng Selenium WebDriver. Có một vấn đề tương tự được thảo luận/giải quyết [ở đây] (http://sqa.stackexchange.com/a/1292/1316), mà tôi hy vọng là hữu ích. – Ziran

+0

Cảm ơn, tôi đã viết một javascript để đáp ứng nhu cầu của tôi –

+0

Bạn có thể nhận được giải pháp ở đây: 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 –

Trả lời

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 phiên bản này biên dịch int y = ((ILocatable) phần tử) .Coordinates.LocationInViewport.Y; ((Trình điều khiển IJavaScriptExecutor)) .ExecuteScript ("cửa sổ.scrollBy (0, "+ y +"); "); } – Aligned

+0

window.scroll thay vì scrollBy đang hoạt động tốt hơn cho tôi. – Aligned

+0

Ngoài ra nếu bạn có ID html, bạn có thể sử dụng sau – EsotericNonsense

4

Nếu bạn muốn di chuyển trên cửa sổ firefox sử dụng selen webdriver, một trong những con đường là sử dụng JavaScript trong mã java, Mã javeScript để di chuyển xuống như sau:

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

Hoàn hảo cho tôi. Cuộn thẳng xuống dưới cùng :) - cho những người muốn có phiên bản JS/thước đo góc 'browser.executeScript (" window.scrollTo (0, Math.max (document.documentElement.scrollHeight, document.body.scrollHeight, document.documentElement.clientHeight)); ");' –

2

Bạn có thể cuộn đến vị trí cần thiết bằng cách sử dụng javascript Bạn cần sử dụng phương thức scrollTo thay vì phương thức scrollBy để nó hoạt động.

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

Sử dụng mã dưới đây để di chuyển lên và cuộn xuống

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

sử dụng đơn giản các .sendKeys(Keys.PAGE_DOWN); khi yếu tố của bạn là có thể nhìn thấy, chỉ cần nhấp vào nó, bởi .click(element).perform(); cho tôi làm việc gì đó như thế này:

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

Cuộn lên trên có thể được thực hiện:

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

Đối với di chuyển xuống:

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

Để di chuyển lên chỉ cần thay thế giá trị của cuộn với (2500, 0).

0

Gần đây tôi có vấn đề này do một đơn Drupal chặn phần tử khi tôi chạy mã này:

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

Sau referencing this page, tôi cập nhật để đặt boolean false sử dụng mã này, và nó hoạt động tuyệt vời:

public void scrollTo(WebElement x) { 
     ((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(false);", x); 
     } 
Các vấn đề liên quan