我在Selenium 1(a.k.a Selenium RC)中编写了以下代码,用于使用java进行页面滚动:
selenium.getEval("scrollBy(0, 250)");
Selenium 2(WebDriver)中的等效代码是什么?
答案 0 :(得分:93)
向下滚动:
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 :(得分:37)
滚动到页面底部:
JavascriptExecutor js = ((JavascriptExecutor) driver);
js.executeScript("window.scrollTo(0, document.body.scrollHeight)");
答案 2 :(得分:12)
在Selenium Webdriver中有很多方法可以向上和向下滚动我总是使用Java Script来做同样的事情。
如果我想向上或向下滚动
,下面的代码总是对我有用$('select[name=mem_type]').change(function(){
var tmp = this.value;
$('.form-row').hide();
if(tmp=="SKATER" || tmp=="HOCKEY" || tmp=="HOCKEYA") {
$('.member-type').show();
} else if(tmp=="BUILD") {
$('.bs-member-type').show();
} else if(tmp=="ARENA") {
$('.arena-member-type').show();
} else if(tmp=="PRO") {
$('.pro-member-type').show();
}
});
获取完整代码
如果你想滚动一个元素,那么下面一段代码将适合你。
// This will scroll page 400 pixel vertical
((JavascriptExecutor)driver).executeScript("scroll(0,400)");
您将在此处获得完整的文档Scroll for specific Element
答案 3 :(得分:10)
这可能不是您问题的准确答案(就WebDriver而言),但我发现java.awt
库比selenium.Keys
更稳定。
因此,使用前者的向下翻页操作将是:
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_PAGE_DOWN);
robot.keyRelease(KeyEvent.VK_PAGE_DOWN);
答案 4 :(得分:3)
JavascriptExecutor js = ((JavascriptExecutor) driver);
向下滚动:
js.executeScript("window.scrollTo(0, document.body.scrollHeight);");
向上滚动:
js.executeScript("window.scrollTo(0, -document.body.scrollHeight);");
答案 5 :(得分:1)
我不想使用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();
您还可以轻松地将其作为向上或向下滚动任何元素的扩展方法。
答案 6 :(得分:0)
试试这个
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);
}
答案 7 :(得分:0)
您应该向页面添加滚动条,以使用Selenium.executeScript("window.scrollBy(0,450)", "")
选择所有元素。
如果您有一个大型列表,请在执行过程中多次添加滚动。请注意,滚动仅转到页面中的某个点,例如(0,450)。
答案 8 :(得分:0)
JavascriptExecutor jse = ((JavascriptExecutor) driver);
jse.executeScript("window.scrollTo(0, document.body.scrollHeight)");
此代码适用于我。作为我测试的页面,我们向下滚动时加载。
答案 9 :(得分:0)
Javascript执行程序总能完美地完成工作:
((JavascriptExecutor) driver).executeScript("scroll(0,300)");
其中(0,300)
分别是水平和垂直距离。根据您的要求设置距离。
如果您是一个完美主义者,并希望在第一次尝试时向上滚动,请使用此工具MeasureIt。它是一个出色的firefox附加组件。
答案 10 :(得分:0)
感谢Ripon Al Wasim的回答。我做了一些改进。由于网络问题,我重试三次直到中断循环。
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
答案 11 :(得分:0)
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。滚动到特定点 window.scrollTo(0,500)作为参数
//代码以导航到特定点,例如这里将500作为值传递
WebDriver driver = new ChromeDriver();
JavascriptExecutor jsExecuter = (JavascriptExecutor)driver;
jsExecuter.executeScript(window.scrollTo(0,500));
要直接在浏览器中检查导航,请在浏览器中打开开发人员工具,然后导航到控制台。 在控制台窗口上执行命令.scrollTo(0,400)
答案 12 :(得分:0)
JavascriptExecutor最好向下滚动网页
window.scrollTo
JavascriptExecutor中的函数可以做到这一点
JavascriptExecutor js = ((JavascriptExecutor) driver);
js.executeScript("window.scrollTo(0,100");
以上代码将向下滚动100 y个坐标
答案 13 :(得分:0)
JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("window.scrollBy(0,250)");
答案 14 :(得分:0)
我们可以滚动到特定元素:
const element = await driver.findElement(...)
await driver.executeScript("arguments[0].scrollIntoView(true);", element)
await driver.sleep(500);
答案 15 :(得分:-1)
如果要垂直滚动页面以执行某些操作,可以使用以下JavaScript进行操作。 (((JavascriptExecutor)驱动程序).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();”,element);
“元素”是您要滚动的定位符。
3。如果要在特定坐标处滚动,请使用以下JavaScript。
((JavascriptExecutor)驱动程序)。executeScript(“ window.scrollBy(200,300)”);
其中“ 200,300”是坐标。
4。如果要垂直向上滚动,可以使用以下JavaScript。 (((JavascriptExecutor) driver).executeScript(“ window.scrollTo(document.body.scrollHeight,0)”);
如果要在正确的方向上水平滚动,请使用以下JavaScript。 (((JavascriptExecutor)driver).executeScript(“ window.scrollBy(2000,0)”);
如果要在左侧水平滚动,请使用以下JavaScript。 (((JavascriptExecutor)driver).executeScript(“ window.scrollBy(-2000,0)”);