用例:执行水平滚动直到找到元素
先决条件:硒-Java 3.141 / chrome
以下是我的一些示例代码片段
JavascriptExecutor jse = (JavascriptExecutor) driver; //create jse object and with this object, execute js
jse.executeScript("arguments[0].scrollLeft += 250",driver.findElement(By.className("wux-scroller")));
jse.executeScript("window.scrollBy(500,0)");
jse.executeScript("scroll(500, 0)");
jse.executeScript("window.scrollTo(500,0)");
jse.executeScript("arguments[0].scrollIntoView();",el);
jse.executeScript("arguments[0].scrollLeft = arguments[1];",driver.findElement(By.className("wux-scroller")), j)
预期结果:要执行水平窗口滚动,直到显示该元素
实际结果:不会发生滚动,但也不会引发异常
注意:
页面具有水平和垂直滚动条
两个滚动元素具有相同的类
<div class="wux-scroller wux-ui-is-rendered" >
(我认为)Windows默认滚动条用于垂直和水平方向
卷轴。图片已附上。
如果我将上述代码段中的scrollLeft替换为scrollTop,则滚动垂直发生
精细
参考以下链接,但无济于事
how to scroll scrollbar horizontally which is inside a window using java
更新2:
请找到随附的图片以获取详细的dom。
通知:
有两个水平滚动容器。这会引起麻烦吗?
gridengine容器是“ wux-scroller”的占位符,一旦用户手动滚动它便被激活
//尝试了以下代码段,但没有用。
JavascriptExecutor jse = (JavascriptExecutor) driver;
jse.executeScript("window.scrollBy(-2000,0)");
jse.executeScript("arguments[0].scrollLeft = arguments[1];",driver.findElement(By.className("wux-layouts-gridengine-scroller-container")), 500);
jse.executeScript("arguments[0].scrollLeft = arguments[1];",driver.findElement(By.className("wux-scroller")), 500);
更新3:解决方案
下面在Selenium Java中实现python的实现有助于在我的应用程序中执行水平滚动
jse.executeScript("document.getElementsByClassName('wux-scroller wux-ui-is-rendered')[0].scrollLeft += 650");
jse.executeScript("document.getElementsByClassName('wux-scroller wux-ui-is-rendered')[0].scrollTo(350,0)");
最佳答案
请使用Javascript
尝试以下代码,但基于不同的属性
WebElement element = driver.findElement(By.className("wux-scroller"));
WebDriverWait wait = new WebDriverWait(driver, 30);
wait.until(ExpectedConditions.visibilityOf(element));
JavascriptExecutor jse = (JavascriptExecutor) driver;
jse.executeScript("arguments[0].scrollIntoView({behavior: \"auto\", block: \"center\", inline: \"nearest\"});", element);
要么
jse.executeScript("arguments[0].scrollLeft = arguments[0].offsetWidth", element );