Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 单击复选框“使用Selenium webdriver不工作”,即使复选框已显示_Java_Selenium_Selenium Webdriver_Click - Fatal编程技术网

Java 单击复选框“使用Selenium webdriver不工作”,即使复选框已显示

Java 单击复选框“使用Selenium webdriver不工作”,即使复选框已显示,java,selenium,selenium-webdriver,click,Java,Selenium,Selenium Webdriver,Click,使用SeleniumWebDriver,我尝试单击复选框,但无法这样做,即使显示了元素 下面是我的代码: JavascriptExecutor executor = (JavascriptExecutor) driver; executor.executeScript("arguments[0].scrollIntoView(true);", element1); WebElement= 新的WebDriverWait(webDriver,1000).unt

使用SeleniumWebDriver,我尝试单击复选框,但无法这样做,即使显示了元素

下面是我的代码:

    JavascriptExecutor executor = (JavascriptExecutor) driver;
    executor.executeScript("arguments[0].scrollIntoView(true);", element1);
WebElement=
新的WebDriverWait(webDriver,1000).until(ExpectedConditions.presenceOfElementLocated(By.xpath(prop.getProperty(object)));
元素。isDisplayed();//返回true
元素。getAttribute(“类型”);//返回复选框
元素。isSelected();//返回false
元素。单击();
元素。isSelected();//仍然返回false
元素已显示,但我仍然无法选中复选框。 原因可能是什么?我哪里出错了?

您可以尝试移动到复选框,然后单击:

Actions actions = new Actions(driver);
actions.moveToElement(element).click().build().perform();
或者,通过JavaScript进行单击:


但是,请确保您理解您必须这样做的原因:

我用与您相同的方式尝试了它,只是在C#中。我可以点击复选框,看到它在屏幕上改变了状态。但是,当我试图读取复选框的选中状态时,出现了一个异常:
stale element reference:element未附加到页面文档


如果我使用页面工厂获取WebElement,则不会发生这种情况。所以也许你应该试试Selenium的PageFactory模式。无论如何,它更干净。

有几种处理方法,请参见以下内容:

  • 将action类用于单击:

    正如方法文档所说

  • 在方法链的末尾调用perform()以实际执行操作

    使用Actions类实现单击的一般方法如下:

    actionsObj.moveToElement(element1).click().build().perform()
    
  • 如果Actions类失败,有时原因可能是您收到以下异常:

    ElementNotInteractiableException[object HtmlPanelElement]没有大小和位置

  • 这可能意味着两件事:

    a。元素未正确呈现:解决方案是使用隐式/显式等待

    • 隐式等待:

          JavascriptExecutor executor = (JavascriptExecutor) driver;
          executor.executeScript("arguments[0].scrollIntoView(true);", element1);
      
      driver.manage().timeouts().implicitlyWait(50,TimeUnit.SECONDS)

    • 显式等待:

          JavascriptExecutor executor = (JavascriptExecutor) driver;
          executor.executeScript("arguments[0].scrollIntoView(true);", element1);
      
      WebDriverWait wait=新的WebDriverWait(驱动程序,20); element1=wait.until(ExpectedConditions.elementtobelickable(By.className(“fa-stack-1x”))

    b元素已渲染,但它不在屏幕的可见部分:解决方案只是滚动到元素。基于Selenium的版本,它可以以不同的方式处理,但我将提供一个适用于所有版本的解决方案:

        JavascriptExecutor executor = (JavascriptExecutor) driver;
        executor.executeScript("arguments[0].scrollIntoView(true);", element1);
    
  • 假设所有这些都失败了,那么另一种方法是再次使用Javascript executor,如下所示: executor.executeScript(“参数[0]。单击();”,元素1)
    一个原因可能是,它没有启用。您是否已尝试
    元素。isEnabled()
    它已启用。element.isEnabled()返回true