用例:执行水平滚动直到找到元素

先决条件:硒-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默认滚动条用于垂直和水平方向
卷轴。图片已附上。 java - 如何在具有多个滚动元素的Web应用程序中水平执行Windows滚动?-LMLPHP
如果我将上述代码段中的scrollLeft替换为scrollTop,则滚动垂直发生
精细


参考以下链接,但无济于事

how to scroll scrollbar horizontally which is inside a window using java

更新2:

请找到随附的图片以获取详细的dom。

java - 如何在具有多个滚动元素的Web应用程序中水平执行Windows滚动?-LMLPHP

通知:


有两个水平滚动容器。这会引起麻烦吗?
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 );

10-05 20:51
查看更多