无法单击视口外的按钮



我无法单击页面上视口外的按钮。我尝试过几种方法,但都不起作用:

  1. button.click()

  2. Actions.click(button).peform()

  3. Actions.moveToElement(button).click().build().peform()

以上所有操作都抛出一个MoveTargetOutOfBoundsException

我试着将按钮滚动到视图中,但这些都无济于事:

  1. ((JavascriptExecutor)driver).executeScript("window.scrollTo(0, document.body.scrollHeight)")

  2. ((JavascriptExecutor)driver).executeScript("arguments[0].scrollIntoView();", button)

  3. driver.findElement(By.tagName("body")).sendKeys(Keys.PAGE_DOWN)

我已经在页面上检查了iframes;该页不包含任何内容。需要注意的是,当我添加延迟并手动向下滚动页面时,按钮在视图中会立即被点击,这让我相信这不是按钮的问题,而是页面不想向下滚动的问题。

我无法共享页面,但如果需要,我可以提供页面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()
    

相关内容

  • 没有找到相关文章

最新更新