scrollIntoView函数可以保存它的位置吗?

时间:2017-08-24 05:52:43

标签: javascript java selenium-webdriver

我遇到问题,scrollIntoView在执行硒webElement.click()后重置.click()。当我在自定义滚动条上使用它时,它会正确执行操作,然后在点击element = driver.findElement(By.xpath("//div[@id='iLegenda']/ul/li[4]/i")); ((JavascriptExecutor)driver).executeScript("arguments[0].scrollIntoView(true);", element); Thread.sleep(500); driver.findElement(By.xpath("//div[@id='iLegenda']/ul/li[4]/i")).click(); //this line resets the position of the affected scrollbar 后滚动回顶部。

{{1}}

另一种解决方案是强行点击该元素,即使它没有在屏幕上显示,但我还没有找到该方面的任何信息......

1 个答案:

答案 0 :(得分:0)

这不是你可以控制的。这与点击正在做的事情有关。如果是我,我会将.scrollIntoView()代码放入一个函数中,以便更容易调用,例如。

public void scrollIntoView(WebElement e)
{
    ((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", e);
}

并将其称为

element = driver.findElement(By.xpath("//div[@id='iLegenda']/ul/li[4]/i"));
scrollIntoView(element);

另外,Thread.Sleep()是一种不好的做法。 (你可以谷歌了解原因)。你不应该在这里等待,但如果你这样做,它应该像

WebDriverWait wait = new WebDriverWait(driver, 2);
WebElement element = driver.findElement(locator);
wait.until(ExpectedConditions.elementToBeClickable(element)).click();

我一直使用Java和Selenium,在点击元素之前我从未必须滚动。你尝试过像

这样简单的事吗?
driver.findElement(By.xpath("//div[@id='iLegenda']/ul/li[4]/i")).click();

没有滚动而没有等待?它应该工作。

另外,如果要重复单击相同的元素,则应该执行类似

的操作
By locator = By.xpath("//div[@id='iLegenda']/ul/li[4]/i");
driver.findElement(locator).click();
// do something
driver.findElement(locator).click();
// ... and so on...