我遇到问题,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}}
另一种解决方案是强行点击该元素,即使它没有在屏幕上显示,但我还没有找到该方面的任何信息......
答案 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...