【问题标题】:Element Not Interactable / Element not clickable元素不可交互/元素不可点击
【发布时间】:2021-07-08 00:57:48
【问题描述】:

我尝试使用显式等待、ExpectedConditions.elementToBeClickable 和 waitForVisibleElement,但最终超时并等待元素可点击。

我还尝试获取不同的定位器(不同的 div)。这是我的代码(以及我尝试过的代码)

public void setSystemInformationSection() throws Exception {

        scrollPageDownBy800();
        
        //wait.until(ExpectedConditions.elementToBeClickable(INVERTERMANUFACTURERDRPDWN));
        //click(INVERTERMANUFACTURERDRPDWN, "INVERTERMANUFACTURERDRPDWN;");
        
        
        //click(INVERTERMANUFACTURERDRPDWN, "INVERTERMANUFACTURERDRPDWN;");
        //waitForVisibleElement(driver, SMACORE1OPTION); click(SMACORE1OPTION,"SMACORE1OPTION");
                

        Boolean wait = new WebDriverWait(driver,20).until(ExpectedConditions.invisibilityOfElementLocated(By.xpath("//*[@id=\"SMA - Core1\"]")));
        jse.executeScript("arguments[0].click()", INVERTERMANUFACTURERDRPDWN);
        //waitForVisibleElement(driver, SMACORE1OPTION);
        jse.executeScript("arguments[0].click()", SMACORE1OPTION);
}
        

我尝试过的其他下拉菜单在最后一个 sn-p 代码(未注释掉的那些)上运行良好

我用不同的下拉菜单尝试了这个,效果很好

    public void setCommercialDealType() throws Exception {
        Boolean wait = new WebDriverWait(driver, 20).until(ExpectedConditions.invisibilityOfElementLocated(By.xpath("/html/body/app-root/ng-component/commercial-create-account/main/section[2]/opportunity-information/form/div[2]/div[1]/sp-dropdown/div/div/div[2]/ul/li[2]")));
        jse.executeScript("arguments[0].click()", COMMERCIALDEALTYPEDROPDOWN);
        waitForVisibleElement(driver, COMMERCIALHELIXPPA);
        jse.executeScript("arguments[0].click()", COMMERCIALHELIXPPA);
    }

当我尝试检查 isEnabled 或 isDisplayed 时,它给出了 TimeOut 错误。我被卡住了。

【问题讨论】:

  • 您能否分享您尝试自动化的页面的 url,或者您可以在上面的问题中添加您尝试自动化的页面部分的 HTML 代码。

标签: java selenium selenium-webdriver selenium-chromedriver cucumber


【解决方案1】:

有时某个元素对您来说是可见或可点击的,但 div 或 span(或其他元素)会从 Selenium 的角度隐藏它。 为了克服这个问题:

  1. 首先通过 ID、xpath 或 Css 表达式找到一个元素。
  2. 尝试使用 Selenium 移动到元素(关注它),然后单击它。
  3. 如果第 2 步失败 - 只需执行 element.click
  4. 如果第 3 步失败 - 使用 javaScript 进行硬单击:

代码示例:

 public void clickLastFoundElement() {        
    try {
        Actions builder = new Actions(browser);
        builder.moveToElement(lastFoundElement).click().build().perform();
    } catch (ElementNotInteractableException x1) {
        try {
            lastFoundElement.click();
        }
        catch (Exception x2) {
            hardClickElement();
        }
    }
}

private void hardClickElement() {
    JavascriptExecutor executor = (JavascriptExecutor) browser;
    executor.executeScript("arguments[0].click();", lastFoundElement);      
}

【讨论】:

  • 我确实做到了,数字 4 通过了测试,但实际上,它并没有点击任何东西。
  • 所以该元素不是真正可点击的,它被禁用了。
  • 它是可点击的。我在测试时发现了一些东西,当我在上面的页面中选择一个选项时,下拉菜单变得不可点击。但是当我将其保留为默认选项时,它会单击该元素。也许xpath会移动?我真的迷路了。
  • 不要等待元素不可见,等待它存在或可点击。如果某些事情失败 - 将其包装在 try 和 catch 块中。在 catch 块中尝试再次找到元素,它可能页面发生了很大变化,并且 DOM 也随之发生了变化......
  • 我发现了问题。 2 个元素具有相同的 xpath。添加'[2]'不起作用,有什么提示吗?
猜你喜欢
  • 1970-01-01
  • 2021-09-22
  • 2021-10-20
  • 2021-08-02
  • 2021-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多