等待可见性时出现WebDriverException

时间:2018-08-02 11:27:01

标签: java selenium

自上周以来,我陷入了无法解决的问题。 我有一个包含EJB项目和WAR项目的耳朵项目,该项目以前运行良好。 当我第一次执行项目时,我得到登录页面,进行身份验证并获得我的主页。 但是,当我想输入输入内容时,我告诉他等到该元素可见之后,它会抛出WebDriverEception:

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)

这里的问题是我有一个带有相同文件的旧项目,并且当我通过主类执行该项目时,它可以正常工作,但是当我想使用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());
    }
}

修改我的代码后,它似乎是超时异常,但问题是该元素存在并返回其tagName并显示该元素已启用

public boolean waitVisibilityOfElement(WebElement element) {
    try {
        System.out.println("Waiting visibility of element : " + element.getTagName());
        if (element.isEnabled())
            System.out.println("Element " + element.getTagName() + " is enabled");
        else
            System.out.println("Element " + element.getTagName() + " is not enabled");
        fluentWait.until(ExpectedConditions.visibilityOf(element));
        return true;
    } catch (TimeoutException e) {
        System.out.println("Time out for visibility");
        return false;
    } catch (ElementNotVisibleException v) {
        System.out.println("Element Not Visible");
        return false;
    } catch (NoSuchElementException u) {
        System.out.println("Element does not exist");
        return false;
    }
}

public void sendKeyOnElement(WebElement element, String string) {
    try {
        if (waitVisibilityOfElement(element)) {
            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">

1 个答案:

答案 0 :(得分:0)

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