С прошлой недели я застрял в проблеме, которую не могу решить. У меня есть проект для ушей, содержащий проект 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">
да, это когда я запускаю его со старым проектом, с которого я начал, он отлично работает с тем же локатором
Должна быть разница между старым и новым
Обычно, если элемент не виден, он должен генерировать исключение NoSuchElementException или ElementNotVisibleException, а не WebDriverException.
@AndreiSuvorkov нет изменений в файле класса, он остается прежним, но не может заставить его работать в новом проекте
Хорошо, перепишите эту часть кода с нуля
Можете ли вы поделиться HTML для этого //div[@class='form-control browse__browse-name-display___2s17-']/following-sibling::input[@type='file']]
@AndreiSuvorkov: Вы видите form-control browse__browse-name-display___2s17-, это выглядит довольно нестабильно. Может пора сменить локатор :)
@cruisepandey, поэтому я предлагаю переписать этот блок кода с нуля и правильно его протестировать.
@AndreiSuvorkov: Не нужно менять весь метод тестирования. Может быть, локаторы очень нестабильны и могут вызвать проблемы в будущем?
@cruisepandey согласен
Я изменил свой код, и мой пост оказался исключением из-за тайм-аута, но элемент существует
@HamzaTorjmen: Я думаю, вам не повредит просто показать немного HTML.




Я нашел решение.
Я не знаю, нормально ли это с селеном, но по умолчанию ввод, тип которого - файл, не может быть отображен, хотя он отображается в веб-браузере. Метод isEnabled() возвращает true, а isDisplayed() возвращает false, поэтому подождите, пока будет ждать , и в конце будет выброшено исключение тайм-аута, и самое забавное, что даже для селена он не отображается, вы можете отправлять ключи на входе, что не является логикой.
Ошибка говорит о том, что этот элемент не отображается. Вы уверены, что этот элемент виден на странице?