嘿,我有一个关于硒的问题 我有一个很长的表单,我想向下滚动一点以输入数据。 我不希望它一直滚动到显示元素为止。
我使用了以下代码:
WebElement element = driver.findElement(locator);
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("arguments[0].scrollIntoView();", element);
它不起作用,因为硒滚动以匹配,他们的一种方式将滚动到此元素,因此我可以向其输入数据,例如滚动直到元素在屏幕的模组中。 我不知道滚动到视图的目的是什么,如果它是滚动而不是查看 问候
如果您的用例是...向下滚动一点以输入数据...您可以通过多种方式实现此目的:
-
您可以诱导WebDriverWait的
elementToBeClickable()
,该将自动在视口中滚动所需的元素,如下所示:new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(driver.findElement(locator))).sendKeys("Bastian");
-
您也可以将类方法
moveToElement()
与sendKeys()
结合使用Actions
,这也将自动在视口中滚动所需的元素,如下所示:new Actions(driver).moveToElement(driver.findElement(locator)).sendKeys("Bastian").build().perform();
-
您仍然可以使用
scrollIntoView()
方法先滚动元素,然后诱导WebDriverWaitelementToBeClickable()
,如下所示:((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView();", driver.findElement(locator)); new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(driver.findElement(locator))).sendKeys("Bastian");
-
您还可以使用
scrollBy()
方法向下滚动一定数量的xy-coord
(调整(,如下所示,然后找到该元素:((JavascriptExecutor) driver).executeScript("window.scrollBy(0,400)"); new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(driver.findElement(locator))).sendKeys("Bastian");
引用
您可以在以下位置找到一些相关的讨论:
- 如何向上滚动到一个元素并单击硒?
- 使用 Selenium 在 Python 中滚动到页面顶部
- 硒蟒错误:元素无法滚动到视图中
请尝试这个。它对我有用。
public void scrollElementToCenter(WebElement element) {
try {
if (EnvironmentConstants.RUNNING_ON_CHROME) {
((JavascriptExecutor) driver)
.executeScript("arguments[0].scrollIntoView({behavior: "auto", block: "center", inline: "nearest"});", element);
} else {
((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(false);", element);
}
} catch (UnsupportedOperationException exception) {
//LOGGER.error("UnsupportedOperationException occurred : " + exception.getMessage(), exception);
}
}
对于Chrome浏览器,您可以使用它
((JavascriptExecutor) driver)
.executeScript("arguments[0].scrollIntoView({behavior: "auto", block: "center", inline: "nearest"});", element);
这是我创造的,似乎对我有用。
for i in range(5000):
browse = "window.scrollTo(0," + str(i) + ")"
browser.execute_script(browse)
i = i + 400
它几乎滚动缓慢,因此页面上的每个元素都被加载。