我无法单击页面上视口外的按钮。我尝试过几种方法,但都不起作用:
-
button.click()
-
Actions.click(button).peform()
-
Actions.moveToElement(button).click().build().peform()
以上所有操作都抛出一个MoveTargetOutOfBoundsException
。
我试着将按钮滚动到视图中,但这些都无济于事:
-
((JavascriptExecutor)driver).executeScript("window.scrollTo(0, document.body.scrollHeight)")
-
((JavascriptExecutor)driver).executeScript("arguments[0].scrollIntoView();", button)
-
driver.findElement(By.tagName("body")).sendKeys(Keys.PAGE_DOWN)
我已经在页面上检查了iframe
s;该页不包含任何内容。需要注意的是,当我添加延迟并手动向下滚动页面时,按钮在视图中会立即被点击,这让我相信这不是按钮的问题,而是页面不想向下滚动的问题。
我无法共享页面,但如果需要,我可以提供页面HTML的片段。
- Java 16
- 硒4
- Chromedriver 99
您可以尝试使用独立于该元素的方法滚动页面,如
((JavascriptExecutor)driver).executeScript("window.scrollTo(0, document.body.scrollHeight)")
每次检查该button
元素的存在性或可见性
只有当满足此条件时,才能使用Seleniumbutton.click()
方法或ActionsActions.moveToElement(button).click().build().peform()
点击该元素
您需要处理以下几件事:
-
button.click()
:理想情况下,要调用元素上的单击,您需要诱导WebDriverWait等待elementToBeClickable((,它会在视口中自动滚动元素。new WebDriverWait(driver, Duration.ofMillis(20)).until(ExpectedConditions.elementToBeClickable(By.cssSelector("elementCssSelector"))).click();
-
new Actions(driver).click(button).perform()
:与上一步相同,您可能希望诱导WebDriverWait等待elementToBeClickable()
,并按如下方式构建和执行:new Actions(driver).click(new WebDriverWait(driver, Duration.ofMillis(20)).until(ExpectedConditions.elementToBeClickable(By.cssSelector("elementCssSelector")))).build().perform()
-
new Actions(driver).moveToElement(button).click().build().perform()
:要将焦点移动到元素,您需要诱导WebDriver等待visibilityOfElementLocated((,如下所示:new Actions(driver).moveToElement(new WebDriverWait(driver, Duration.ofMillis(20)).until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("elementCssSelector")))).click().build().perform()