如何向右滚动到滚动后才显示在DOM中的元素? (Java 硒)

问题描述 投票:0回答:2

使用 Java selenium...我必须滚动到页面最右侧的元素,

但问题是这个元素只有在滚动之后才会出现在 DOM 中。

尝试了以下代码...

WebElement scrollElement = driver.findElement(By.xpath("some_xpath"));
List elements=driver.findElements(By.xpath("some_xpath"));

    for(WebElement el:elements)
    {
        System.out.println(el.getText());                   
        if(!el.getText().equalsIgnoreCase("element to be clicked") )
        {
            ((JavascriptExecutor)driver).executeScript("arguments[0].scrollLeft += 1000;", scrollElement);
            Thread.sleep(5000);
            elements=driver.findElements(By.xpath("some xpath"));
            Thread.sleep(5000);
        }
        else
        {
            el.click();
            Thread.sleep(5000);
            break;
        }
    
    }   

上面代码的问题是......它在第一个循环中获取所有表头,滚动发生后,表头列表被更新(这就是我再次为元素赋值的原因)但仍然出现陈旧元素异常.

场景:想象一个有 26 列 A 到 Z 的表...

我想访问“T”栏,

在第一个视图中...A 到 E 列显示并存在于 DOM 中

然后滚动 E 到 J 列后显示并出现在 DOM 中

我也再次重新分配了元素,

这样它就可以在滚动后获取元素列表...

但仍然出现陈旧元素异常...

更新: 当我使用 TAB 而不是滚动时,代码有效..

java selenium-webdriver scroll
2个回答
1
投票
while ( !element(yourElement).isPresent()) {
        js.executeScript("arguments[0].scrollLeft += 1000;", grid);
    }

在代码之前,您将网格定义为

WebElement
滚动位置

您也可以尝试使用像素(1000)数,看看它滚动了多少。是的,命令

arguments[0].scrollLeft
是向右滚动。


1
投票

如果“selenium 首先尝试在 DOM 中搜索目标元素,否则脚本失败” - 那么将 java 脚本执行器保留在 'IF' 语句中,而不是 while 中。 喜欢: 如果(该元素不可见) 执行java脚本执行器

© www.soinside.com 2019 - 2024. All rights reserved.