Java 等待可见性时WebDriverException

Java 等待可见性时WebDriverException,java,selenium,Java,Selenium,从上周开始,我陷入了一个无法解决的问题。 我有一个ear项目,其中包含一个EJB项目和一个WAR项目,它们以前工作得很好。 当我第一次执行我的项目时,我得到了登录页面、身份验证和主页。 但当我想写一个输入时,我告诉他等到元素可见,但它抛出一个WebDriveReceivement: Can't send keys to the element com.sun.proxy.$Proxy23 Expected condition failed: waiting for visibility of [

从上周开始,我陷入了一个无法解决的问题。 我有一个ear项目,其中包含一个EJB项目和一个WAR项目,它们以前工作得很好。 当我第一次执行我的项目时,我得到了登录页面、身份验证和主页。 但当我想写一个输入时,我告诉他等到元素可见,但它抛出一个WebDriveReceivement:

Can't send keys to the element com.sun.proxy.$Proxy23 Expected condition failed: waiting for visibility of [[ChromeDriver: chrome on XP (508d2b6115709e937cfa289fdb0a438b)] -> xpath: //div[@class='form-control browse__browse-name-display___2s17-']/following-sibling::input[@type='file']] (tried for 20 second(s) with 500 milliseconds interval)
这里的问题是,我有一个具有相同文件的旧项目,当我通过main类执行它时,它工作得很好,但是当我想用Junit运行它时,我得到了这个异常。 这是我的代码:

public void sendKeyOnElement(WebElement element, String string) {
    try {
        if (new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOf(element)) != null) {
            System.out.println("d5allll");
                if (element.getText().equals(""))
                    element.sendKeys(string);
                else {
                    System.out.println("d5al louta");
                    element.clear();
                    element.sendKeys(string);
                }
        } else {
            System.out.println("Can't send keys element not visible ");
        }
    } catch (ElementNotVisibleException v) {
        System.out.println("Element Not Visible");
    } catch (WebDriverException e) {
        System.out.println("Can't send keys to the element " + element.getClass().getName() + " " + e.getMessage());
    }
}
修改代码后,似乎出现超时异常,但问题是该元素存在并返回其标记名,并显示该元素已启用

我无法显示我的Html,因为它是机密的,但我只能显示div和input元素:

<div class="form-control browse__browse-name-display___2s17-">  </div>
<input type="file" style="display:none">

我找到了解决方案。
我不知道selenium是否正常,但默认情况下,其类型为file的输入无法显示,尽管它显示在Web浏览器中,方法
isEnabled()
返回true,而
isDisplayed()
返回false,因此等待将等待,最后将抛出超时异常,最有趣的是,即使对于selenium,它也不会显示。您可以在输入中发送非逻辑的键。

错误显示,该元素不可见。您确定该元素在页面上可见吗?是的,当我使用一个旧项目运行它时,我开始使用,它可以与相同的定位器配合使用。旧的和新的定位器之间应该有区别。正常情况下,如果元素不可见,那么它应该抛出NosTouchElementException或ElementNotVisibleException,而不是WebDriverException@AndreiSuvorkov:无需更改整个测试方法。可能是定位器高度不稳定,将来可能会导致问题?
<div class="form-control browse__browse-name-display___2s17-">  </div>
<input type="file" style="display:none">