我想向右滚动到一列。这就是我尝试的:
((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", element);
这适用于垂直滚动,但不适用于水平滚动。
元素.rollIntoView((
方法将调用它的元素滚动到浏览器窗口的Viewport中。
语法
element.scrollIntoView()
element.scrollIntoView(alignToTop)
//布尔参数element.scrollIntoView(scrollIntoViewOptions)
//对象参数
参数
该方法的参数为:
alignToTop
(可选(:是一个布尔值,如果为true,则元素的顶部将与可滚动祖先的可见区域的顶部对齐。这是默认值。如果为false,则元素的底部将与可滚动祖先的可见区域的底部对齐。对应于scrollIntoViewOptions:{block:"end",inline:"最近的"}scrollIntoViewOptions
(可选(:是一个具有以下属性的对象:behavior
(可选(:定义过渡动画。";自动;或";平滑";。默认为";自动">block
(可选(:定义垂直对齐。";"开始""中心"结束";,或";最接近";。默认为";开始">inline
(可选(:定义水平对齐。";"开始""中心"结束";,或";最接近";。默认为";最接近">
此用例
根据您的代码行:
((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", element);
参数true
是指alignToTop
的布尔值。因此出现了问题。
解决方案
要自动执行水平滚动,您需要在以下任一项中传递inline
参数的参数:
start
center
end
nearest
可选
作为替代方案,您可以使用以下任一选项
scrollLeft()
:Element.scrollLeft()
属性获取或设置元素内容从其左边缘滚动的像素数。如果元素的方向是rtl
(从右到左(,则当滚动条位于其最右侧位置(滚动内容的开头(时,scrollLeft
是0
,然后随着滚动到内容的末尾而逐渐变为负值scrollWidth()
:Element.scrollWidth()
只读属性是对元素内容宽度的度量,包括由于溢出而在屏幕上不可见的内容
Outro
你可以在中找到一些相关的详细讨论
- 不同滚动选项之间有什么区别
- Selenium python错误:元素无法滚动到视图中
您可以使用以下选项滚动水平
JavascriptExecutor js = (JavascriptExecutor)driver;
js.executeScript("document.getElementById('giveLocationHorizontal').scrollLeft += 250", "");
除此之外,我认为以下内容也对您有用
//scroll up web page
public void scrollUp(){
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("window.scrollBy(0,-250)", "");
}
//scroll down web page
public void scrollDown(){
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("window.scrollBy(0,250)", "");
}
//scroll Horizontal
public void scrollHorizontal(){
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("window.scrollBy(250,0)", "");
}
如果你有id ,你可以尝试下面的
JavascriptExecutor js = (JavascriptExecutor)driver;
js.executeScript(
"document.getElementById('gvLocationHorizontalRail').scrollLeft += 250", "")
或
jse.executeScript("window.scrollBy(1000,0)", "");
来源:
http://www.softwaretestingstudio.com/scroll-selenium-webdriver-java/
OR通过使用操作
WebElement horizontalbar = driver.findElement(By.id("board") );
Actions action = new Actions(driver);
Actions moveToElement = action.moveToElement( horizontalbar );
for (int i = 0; i < 5; i++) {
moveToElement.sendKeys(Keys.RIGHT).build().perform();
}
来源:
Selenium:使用Actions类的水平滚动
如果你有列的第th个标签,这应该允许你滚动到
JavascriptExecutor jse = (JavascriptExecutor) driver;
jse.executeScript("document.querySelector('table th:your-child').scrollIntoView();");
您可以尝试以下发送密钥之一:
element.sendKeys("n");
element.sendKeys(Keys.SHIFT);
element.sendKeys(Keys.TAB);