Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在具有多个滚动元素的web应用程序中执行windows水平滚动?_Java_Selenium_Scroll_Selenium Chromedriver - Fatal编程技术网

Java 如何在具有多个滚动元素的web应用程序中执行windows水平滚动?

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

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

前置要求: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("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默认滚动条用于垂直和水平方向 卷轴。附上图片

  • 如果在上面的代码段中我替换向左滚动滚动顶部,则垂直滚动 好的

参考下面的链接,但没有帮助

更新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:解决方案

    下面,在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下更新了我的发现。似乎有两个水平容器。我会说单击目标滚动器容器下的任意位置,然后您可以尝试上述解决方案。我想测试滚动我想测试滚动