【问题标题】:How to scroll to an element in java如何滚动到java中的元素
【发布时间】:2021-10-01 21:21:31
【问题描述】:

我有一个关于滚动到某个元素的问题。我在下面有这段代码,我可以在其中过滤出如何根据元素名称单击元素:

public class LandingPage extends BasePage {

  public LandingPage(WebDriver webDriver) {
    super(webDriver);
  }

  By cardBody = By.className("card-body");

  public void clickCard(String cardName) {
    List<WebElement> elements = webDriver.findElements(cardBody);
    click(
        elements.stream()
            .filter(element -> element.getText().equalsIgnoreCase(cardName))
            .collect(Collectors.toList())
            .get(0));
  }
}

我想做类似的事情,但不是点击一个元素,而是滚动到该元素。有谁知道怎么做?

【问题讨论】:

标签: java selenium


【解决方案1】:

对于true,它将元素滚动到顶部,对于false,它将元素滚动到底部。在下面的代码中,我滚动到列表的最后一个元素。

代码

  JavascriptExecutor javascriptExecutor = (JavascriptExecutor) driver;
  List<WebElement> optionList = driver.findElements(By.xpath("xPath to list of elements"));
  int lastElement = (optionList.size() - 1);
  javascriptExecutor.executeScript("arguments[0].scrollIntoView(false);",optionList.get(lastElement));

如果您想滚动到特定元素,则可以传递元素 id。

javascriptExecutor.executeScript("arguments[0].scrollIntoView(false);",optionList.get(3));

【讨论】:

    【解决方案2】:

    要滚动到 Java-Selenium 绑定中的特定元素,我们使用JavascriptExecutor,如下所示。

    ((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", ele)
    

    这里的ele 是一个WebElement,你想要scrollIntoview

    由于您有一个网络元素列表,在您的情况下为elements,您可能可以使用elements.get(0)elements.get(1)

    或者最好的方法是遍历列表并在循环中添加JavascriptExecutor

    类似:

    for(WebElement ele : elements){
      ((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", ele)
      // do some stuff with ele. 
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-18
      • 2010-10-04
      • 1970-01-01
      • 2019-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多