scrollIntoView()不适用于水平滚动(Selenium)



我想向右滚动到一列。这就是我尝试的:

((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(从右到左(,则当滚动条位于其最右侧位置(滚动内容的开头(时,scrollLeft0,然后随着滚动到内容的末尾而逐渐变为负值
  • 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);

相关内容

  • 没有找到相关文章

最新更新