scrollIntoView() 不适用于水平滚动(Selenium)
scrollIntoView() not working for horizontal scroll (Selenium)
我想向右滚动到一列。
这是我试过的:
((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", element);
这适用于垂直滚动,但不适用于水平滚动。
如果你有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/
或通过使用操作
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();
}
来源:
如果您有列的第 th 个标签,这应该允许您滚动到它
JavascriptExecutor jse = (JavascriptExecutor) driver;
jse.executeScript("document.querySelector('table th:your-child').scrollIntoView();");
您可以使用以下选项水平滚动
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)", "");
}
Element.scrollIntoView()
浏览器 Element.scrollIntoView() method scrolls the element on which it's called into the Viewport window.
语法
element.scrollIntoView()
element.scrollIntoView(alignToTop)
// 布尔参数
element.scrollIntoView(scrollIntoViewOptions)
// 对象参数
参数
此方法的参数是:
alignToTop
(可选):是一个布尔值,如果为真,元素的顶部将对齐到可滚动祖先可见区域的顶部。这是默认值。如果为 false,元素的底部将与可滚动祖先可见区域的底部对齐。对应于 scrollIntoViewOptions: {block: "end", inline: "nearest"}.
scrollIntoViewOptions
(可选):是一个具有以下属性的对象:
behavior
(可选):定义过渡动画。 "auto" 或 "smooth" 之一。默认为 "auto".
block
(可选):定义垂直对齐方式。 "start"、"center"、"end" 或 "nearest" 之一。默认为 "start".
inline
(可选):定义水平对齐方式。 "start"、"center"、"end" 或 "nearest" 之一。默认为 "nearest".
这个用例
根据你的代码行:
((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", element);
参数true
指的是alignToTop
的布尔值。因此问题。
解决方案
要使水平滚动自动化,您需要为inline
参数传递下列参数之一:
- start
- centre
- end
- nearest
备选
作为替代方案,您可以使用以下任一选项
scrollLeft()
:Element.scrollLeft()
property gets or sets the number of pixels that an element's content is scrolled from its left edge. If the element's direction是rtl
(从右到左),那么scrollLeft
就是0
当滚动条位于最右边的位置时(在滚动内容的开头),然后当您滚动到内容的末尾时滚动条越来越负。
scrollWidth()
: Element.scrollWidth()
只读 属性 是对元素内容宽度的度量,包括由于溢出而在屏幕上不可见的内容。
结尾
您可以在以下位置找到一些相关的详细讨论:
您可以尝试以下发送键之一:
element.sendKeys("\n");
element.sendKeys(Keys.SHIFT);
element.sendKeys(Keys.TAB);
我想向右滚动到一列。 这是我试过的:
((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", element);
这适用于垂直滚动,但不适用于水平滚动。
如果你有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/
或通过使用操作
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();
}
来源:
如果您有列的第 th 个标签,这应该允许您滚动到它
JavascriptExecutor jse = (JavascriptExecutor) driver;
jse.executeScript("document.querySelector('table th:your-child').scrollIntoView();");
您可以使用以下选项水平滚动
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)", "");
}
Element.scrollIntoView()
浏览器Element.scrollIntoView() method scrolls the element on which it's called into the Viewport window.
语法
element.scrollIntoView()
element.scrollIntoView(alignToTop)
// 布尔参数element.scrollIntoView(scrollIntoViewOptions)
// 对象参数
参数
此方法的参数是:
alignToTop
(可选):是一个布尔值,如果为真,元素的顶部将对齐到可滚动祖先可见区域的顶部。这是默认值。如果为 false,元素的底部将与可滚动祖先可见区域的底部对齐。对应于 scrollIntoViewOptions: {block: "end", inline: "nearest"}.scrollIntoViewOptions
(可选):是一个具有以下属性的对象:behavior
(可选):定义过渡动画。 "auto" 或 "smooth" 之一。默认为 "auto".block
(可选):定义垂直对齐方式。 "start"、"center"、"end" 或 "nearest" 之一。默认为 "start".inline
(可选):定义水平对齐方式。 "start"、"center"、"end" 或 "nearest" 之一。默认为 "nearest".
这个用例
根据你的代码行:
((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", element);
参数true
指的是alignToTop
的布尔值。因此问题。
解决方案
要使水平滚动自动化,您需要为inline
参数传递下列参数之一:
- start
- centre
- end
- nearest
备选
作为替代方案,您可以使用以下任一选项
scrollLeft()
:Element.scrollLeft()
property gets or sets the number of pixels that an element's content is scrolled from its left edge. If the element's direction是rtl
(从右到左),那么scrollLeft
就是0
当滚动条位于最右边的位置时(在滚动内容的开头),然后当您滚动到内容的末尾时滚动条越来越负。scrollWidth()
:Element.scrollWidth()
只读 属性 是对元素内容宽度的度量,包括由于溢出而在屏幕上不可见的内容。
结尾
您可以在以下位置找到一些相关的详细讨论:
您可以尝试以下发送键之一:
element.sendKeys("\n");
element.sendKeys(Keys.SHIFT);
element.sendKeys(Keys.TAB);