自上周以来,我陷入了无法解决的问题。 我有一个包含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">
答案 0 :(得分:0)
我找到了解决方案。
我不知道硒是否正常,但是默认情况下,尽管它的类型为file的输入显示在Web浏览器中,但方法isEnabled()
返回true,而isDisplayed()
返回false,所以等待直到等待,最后将抛出Timeout Exception,最有趣的是,即使硒不显示,您也可以在非逻辑的输入中发送键。