提问者:小点点

如何滚动到右侧的一个元素是显示在DOM只有在滚动后?(Java硒)


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

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

尝试了下面的代码…

WebElement scrollElement=driver. findElement(By.xpath("some_xpath"));列表元素=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而不是滚动时,代码有效。


共2个答案

匿名用户

while ( !element(yourElement).isPresent()) {
        js.executeScript("arguments[0].scrollLeft += 1000;", grid);
    }

在代码之前,您将网格定义为要滚动的WebElement

您也可以尝试像素(1000)数以查看它滚动的程度。是的,命令参数[0]. scrollLet是向右滚动。

匿名用户

如果"selenium首先尝试在DOM中搜索目标元素,else脚本失败"-然后将java脚本执行器保留在“IF”语句中,而不是当。喜欢:如果(元素不可见)执行java脚本执行器