页面滚动中硒的webdriver向上或向下用java
我已经使用Java编写的硒1(又名硒RC)的页面滚动下面的代码(硒2):页面滚动中硒的webdriver向上或向下用java
selenium.getEval("scrollBy(0, 250)");
什么是等价代码Selenium 2(WebDriver)?
对于向下滚动:
WebDriver driver = new FirefoxDriver();
JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("window.scrollBy(0,250)", "");
或者,你可以做如下:
jse.executeScript("scroll(0, 250);");
对于向上滚动:
jse.executeScript("window.scrollBy(0,-250)", "");
OR,
jse.executeScript("scroll(0, -250);");
试试这个
Actions dragger = new Actions(driver);
WebElement draggablePartOfScrollbar = driver.findElement(By.xpath("//*[@id='jobreslist_outercontainer']/div/div[2]/div"));
// 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);
}
我其实很喜欢这个,因为它会滚动用户的方式 – KthProg
这可能不是您的问题的确切答案(根据WebDriver),但我发现java.awt
库比selenium.Keys
更稳定。 所以,使用前一个页面向下的动作将是:
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_PAGE_DOWN);
robot.keyRelease(KeyEvent.VK_PAGE_DOWN);
有很多方法和向上滚动在硒的webdriver下来,我一直使用Java脚本做同样的。
下面是如果我要向上或向下滚动
// This will scroll page 400 pixel vertical
((JavascriptExecutor)driver).executeScript("scroll(0,400)");
你可以从这里Scroll Page in Selenium
得到充分的代码。如果你想为一个单元,然后下面滚动,它总是对我的作品的代码一段代码将为你工作。
je.executeScript("arguments[0].scrollIntoView(true);",element);
你会得到完整的doc这里Scroll for specific Element
这工作,如果我不得不向下滚动。我怎样才能向上滚动页面? –
代码的第一个代码段只滚动页面,而不是元素本身,我该怎么做? –
滚动到页面的底部:
JavascriptExecutor js = ((JavascriptExecutor) driver);
js.executeScript("window.scrollTo(0, document.body.scrollHeight)");
只是提及,它是向下滚动 – Tarun
您应该添加滚动到页面,选择使用Selenium.executeScript("window.scrollBy(0,450)", "")
所有元素。
如果您有一个大的列表,请在执行过程中多次添加滚动。请注意,滚动只能转到页面中的某个点,例如(0,450)。
JavascriptExecutor jse = ((JavascriptExecutor) driver);
jse.executeScript("window.scrollTo(0, document.body.scrollHeight)");
此代码适用于我。作为我正在测试的页面,在我们向下滚动时加载。
的Javascript执行一直做这项工作完美:
((JavascriptExecutor) driver).executeScript("scroll(0,300)");
其中(0,300)
分别为水平和垂直距离。按照您的要求放置您的距离。
如果您是完美主义者,想要获得您想要在第一次尝试时滚动的确切距离,请使用此工具,MeasureIt。这是一个非常棒的Firefox附加组件。
我不想使用JavaScript,或者任何外部库,所以这是我的解决方案(C#):
IWebElement body = Driver.FindElement(By.TagName("body"));
IAction scrollDown = new Actions(Driver)
.MoveToElement(body, body.Size.Width - 10, 15) // position mouse over scrollbar
.ClickAndHold()
.MoveByOffset(0, 50) // scroll down
.Release()
.Build();
scrollDown.Perform();
你也可以很容易地使这是一个扩展方法或任何元素上下滚动。
此代码将无法在无头浏览器上工作 – raffamaiden
@raffamaiden把头放在您的浏览器大声笑......我不知道为什么有人想测试浏览器,他们的用户aren实际上不会使用 – KthProg
你是对的。但OP没有说明它正在测试一个应用程序。您也可以将Selenium用于其他目的(例如网页浏览)。 – raffamaiden
JavascriptExecutor js = ((JavascriptExecutor) driver);
向下滚动:
js.executeScript("window.scrollTo(0, document.body.scrollHeight);");
向上滚动:
js.executeScript("window.scrollTo(0, -document.body.scrollHeight);");
感谢里彭铝瓦西姆的答案。我做了一些改进。由于网络问题,我重试三次直到断开循环。
driver.get(url)
# Get scroll height
last_height = driver.execute_script("return document.body.scrollHeight")
try_times = 0
while True:
# Scroll down to bottom
driver.execute_script("window.scrollBy(0,2000)")
# Wait to load page
time.sleep(scroll_delay)
# Calculate new scroll height and compare with last scroll height
new_height = driver.execute_script("return document.body.scrollHeight")
if last_height == new_height:
try_times += 1
if try_times > 3:
try_times = 0
break
last_height = new_height
上述代码用于向下滚动。向上滚动:jse.executeScript(“scroll(250,0)”);只有值会反转 –
否 - 它将滚动到右侧。向上滚动将滚动(0,-250)' – Stephen
谢谢斯蒂芬。滚动(250,0)和滚动(0,-250)都适用于向上滚动。 –