Java 如何在具有多个滚动元素的web应用程序中执行windows水平滚动?
用例:执行水平滚动直到找到元素 前置要求:Selenium-Java 3.141/chrome 下面是我的几个示例片段Java 如何在具有多个滚动元素的web应用程序中执行windows水平滚动?,java,selenium,scroll,selenium-chromedriver,Java,Selenium,Scroll,Selenium Chromedriver,用例:执行水平滚动直到找到元素 前置要求:Selenium-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
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)
预期结果:执行水平窗口滚动,直到显示元素
实际结果:不会出现滚动,但也不会引发异常
注:
- 页面同时具有水平和垂直滚动条
- 两个滚动元素具有相同的类
- (我认为)Windows默认滚动条用于垂直和水平方向 卷轴。附上图片
- 如果在上面的代码段中我替换向左滚动到滚动顶部,则垂直滚动 好的
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:解决方案
下面,在SeleniumJava中实现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 );
请使用
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 );
您需要测试滚动还是需要元素?对于第二种情况,您可以向驱动程序添加
--headless
参数。如果不够,请添加分辨率高的窗口大小
参数 您需要测试滚动还是需要元素?对于第二种情况,您可以向驱动程序添加--headless
参数。如果不够,请添加分辨率高的窗口大小
参数 您需要选择一个焦点,然后只有它才会被滚动。
例如
你需要选择一个焦点,然后只有它会被滚动。 例如
谢谢我试过了,但没有向左滚动。没有抛出错误。谢谢,但它没有向左滚动。对于同一个元素,scrollTop工作正常,并且两个滚动都在同一个iframe中。我不知道为什么它工作正常。。。你可以试试这个…只需向左滚动,它将不会寻找元素。。。executeScript(“window.scrollBy(-2000,0)”;我已经在Update2下更新了我的发现。似乎有两个水平容器。我会说单击目标滚动器容器下的任意位置,然后您可以尝试上述解决方案。谢谢。我试过了,但没有向左滚动。没有抛出错误。谢谢,但它没有向左滚动。对于同一个元素,scrollTop工作正常,并且两个滚动都在同一个iframe中。我不知道为什么它工作正常。。。你可以试试这个…只需向左滚动,它将不会寻找元素。。。executeScript(“window.scrollBy(-2000,0)”;我已经在Update2下更新了我的发现。似乎有两个水平容器。我会说单击目标滚动器容器下的任意位置,然后您可以尝试上述解决方案。我想测试滚动我想测试滚动