私はブラウザテストを自動化するためにSelenium WebDriverを使用しています。 ブラウザのヘッダーはフローティングで、ブラウザのスクロールに関係なく常に表示されます。
そのため、ブラウザの現在表示されている領域の下にある特定の要素をクリックすると、Seleniumは要素をスクロールして表示し、それらをクリックしようとします。
しかし、自動スクロールが原因で、要素はフローティングヘッダーの後ろにスクロールされ、アクションが実行されると、ページヘッダーの要素がクリックされます。
WebDriverのデフォルトのスクロールを制限する方法はありますか?
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+");");
Selenium Webdriverを使用してFirefoxウィンドウをスクロールする場合、1つの方法は、JavaコードでjavaScriptを使用することです。下にスクロールするjaveScriptコードは次のとおりです。
JavascriptExecutor js = (JavascriptExecutor)driver;
js.executeScript("window.scrollTo(0,Math.max(document.documentElement.scrollHeight," +
"document.body.scrollHeight,document.documentElement.clientHeight));");
上にスクロールすることができます:
private void scrollToTop() {
JavascriptExecutor js = (JavascriptExecutor) webDriver;
js.executeScript("window.scrollTo(0, 0);");
}
要素が表示されたときに.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);
下にスクロールする場合:
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);");
上にスクロールするには、scrollの値を(2500、0)に置き換えます。
Javascriptを使用して必要な場所にスクロールできます。それを機能させるには、scrollByメソッドではなくscrollToメソッドを使用する必要があります。
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) + ");");
}
上にスクロールおよび下にスクロールするには、以下のコードを使用します
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);
}
このコードを実行したときにDrupalメニューが要素をブロックしているため、最近この問題が発生しました:
public void scrollTo(WebElement x) {
((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", x);
}
このページを参照 の後、このコードを使用してブール値をfalseに設定するように更新しました。
public void scrollTo(WebElement x) {
((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(false);", x);
}