我已经在Selenium 1(又名Selenium RC)中编写了以下代码,以便使用Java进行页面滚动:
selenium.getEval("scrollBy(0, 250)");
Selenium 2(WebDriver)中的等效代码是什么?
我已经在Selenium 1(又名Selenium RC)中编写了以下代码,以便使用Java进行页面滚动:
selenium.getEval("scrollBy(0, 250)");
Selenium 2(WebDriver)中的等效代码是什么?
Answers:
场景/测试步骤:
1.打开浏览器并导航到TestURL
2.向下滚动一些像素并向上滚动
对于向下滚动:
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);");
滚动到页面底部:
场景/测试步骤:
1.打开浏览器并导航到TestURL
2.滚动到页面底部
方法1:通过使用JavaScriptExecutor
jse.executeScript("window.scrollTo(0, document.body.scrollHeight)");
方法2:按Ctrl + End
driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL, Keys.END);
方法3:通过使用Java Robot类
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_END);
robot.keyRelease(KeyEvent.VK_END);
robot.keyRelease(KeyEvent.VK_CONTROL);
scroll(0,-250)
滚动到页面底部:
JavascriptExecutor js = ((JavascriptExecutor) driver);
js.executeScript("window.scrollTo(0, document.body.scrollHeight)");
在Selenium Webdriver中有很多向上和向下滚动的方法,我总是使用Java Script来完成同样的操作。
以下是我向上或向下滚动时始终适用的代码
// This will scroll page 400 pixel vertical
((JavascriptExecutor)driver).executeScript("scroll(0,400)");
您可以从此处获取完整的代码硒中的滚动页面
如果要滚动查找某个元素,则下面的代码将为您工作。
je.executeScript("arguments[0].scrollIntoView(true);",element);
您将在此处获得完整文档特定元素的滚动
这可能不是对您的问题的确切答案(就WebDriver而言),但是我发现该java.awt
库比更加稳定selenium.Keys
。因此,使用前者的向下翻页操作将是:
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_PAGE_DOWN);
robot.keyRelease(KeyEvent.VK_PAGE_DOWN);
尝试这个
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);
}
我不想使用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();
您也可以轻松地将此方法扩展为用于上下滚动任何元素的扩展方法。
Javascript执行器始终可以完美完成工作:
((JavascriptExecutor) driver).executeScript("scroll(0,300)");
其中(0,300)
是水平和垂直距离分别。根据您的要求放置距离。
如果您是一个完美主义者,并且希望获得想要向上滚动的确切距离,请使用MeasureIt这个工具。这是一个出色的Firefox附加组件。
感谢Ripon Al Wasim的回答。我做了一些改进。由于网络问题,我重试了3次,直到出现中断循环。
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
1.要将页面滚动到底部,请使用window.scrollTo(0,document.body.scrollHeight)作为参数
//导航到底部的代码
WebDriver driver = new ChromeDriver();
JavascriptExecutor jsExecuter = (JavascriptExecutor)driver;
jsExecuter.executeScript(window.scrollTo(0,document.body.scrollHeight));
2.要将页面滚动到顶部,请使用window.scrollTo(0,document.body.scrollTop)作为参数
//导航到顶部的代码
WebDriver driver = new ChromeDriver();
JavascriptExecutor jsExecuter = (JavascriptExecutor)driver;
jsExecuter.executeScript(window.scrollTo(0,document.body.scrollTop));
3.要将页面滚动到“左”,请使用window.scrollTo(0,document.body.scrollLeft)作为参数
//向左导航的代码
WebDriver driver = new ChromeDriver();
JavascriptExecutor jsExecuter = (JavascriptExecutor)driver;
jsExecuter.executeScript(window.scrollTo(0,document.body.scrollLeft));
4.滚动到某点窗口.scrollTo(0,500)作为参数
//导航到特定点的代码,例如500作为此处的值传递
WebDriver driver = new ChromeDriver();
JavascriptExecutor jsExecuter = (JavascriptExecutor)driver;
jsExecuter.executeScript(window.scrollTo(0,500));
要直接在浏览器中检查导航,请在浏览器中打开开发人员工具,然后导航至控制台。在控制台窗口上执行命令.scrollTo(0,400)
如果要垂直滚动页面以执行某些操作,则可以使用以下JavaScript进行操作。 (((JavascriptExecutor)driver).executeScript(“ window.scrollTo(0,document.body.scrollHeight)”));;
Where ‘JavascriptExecutor’ is an interface, which helps executing JavaScript through Selenium WebDriver. You can use the following code to import.
导入org.openqa.selenium.JavascriptExecutor;
2.如果要滚动到特定元素,则需要使用以下JavaScript。
WebElement元素= driver.findElement(By.xpath(“ // input [@ id ='email']””));((JavascriptExecutor)driver).executeScript(“ arguments [0] .scrollIntoView();”,元素) ;
其中“元素”是您要滚动的定位器。
3.如果要在特定坐标处滚动,请使用以下JavaScript。
(((JavascriptExecutor)driver).executeScript(“ window.scrollBy(200,300)”);; 其中“ 200,300”是坐标。
4.如果要垂直向上滚动,可以使用以下JavaScript。 (((JavascriptExecutor)驱动程序).executeScript(“ window.scrollTo(document.body.scrollHeight,0)”));
如果要沿正确的方向水平滚动,请使用以下JavaScript。 (((JavascriptExecutor)driver).executeScript(“ window.scrollBy(2000,0)”);;
如果要向左水平滚动,请使用以下JavaScript。 (((JavascriptExecutor)driver).executeScript(“ window.scrollBy(-2000,0)”));