WebDriverException в ожидании видимости

С прошлой недели я застрял в проблеме, которую не могу решить. У меня есть проект для ушей, содержащий проект 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">

Ошибка говорит о том, что этот элемент не отображается. Вы уверены, что этот элемент виден на странице?

Andrei Suvorkov 02.08.2018 13:33

да, это когда я запускаю его со старым проектом, с которого я начал, он отлично работает с тем же локатором

Hamza Torjmen 02.08.2018 13:35

Должна быть разница между старым и новым

Andrei Suvorkov 02.08.2018 13:36

Обычно, если элемент не виден, он должен генерировать исключение NoSuchElementException или ElementNotVisibleException, а не WebDriverException.

Hamza Torjmen 02.08.2018 13:36

@AndreiSuvorkov нет изменений в файле класса, он остается прежним, но не может заставить его работать в новом проекте

Hamza Torjmen 02.08.2018 13:38

Хорошо, перепишите эту часть кода с нуля

Andrei Suvorkov 02.08.2018 13:39

Можете ли вы поделиться HTML для этого //div[@class='form-control browse__browse-name-display___2s17-']/following-sibling::inp‌​ut[@type='file']]

cruisepandey 02.08.2018 13:40

@AndreiSuvorkov: Вы видите form-control browse__browse-name-display___2s17-, это выглядит довольно нестабильно. Может пора сменить локатор :)

cruisepandey 02.08.2018 13:41

@cruisepandey, поэтому я предлагаю переписать этот блок кода с нуля и правильно его протестировать.

Andrei Suvorkov 02.08.2018 13:43

@AndreiSuvorkov: Не нужно менять весь метод тестирования. Может быть, локаторы очень нестабильны и могут вызвать проблемы в будущем?

cruisepandey 02.08.2018 13:44

@cruisepandey согласен

Andrei Suvorkov 02.08.2018 13:45

Я изменил свой код, и мой пост оказался исключением из-за тайм-аута, но элемент существует

Hamza Torjmen 02.08.2018 16:25

@HamzaTorjmen: Я думаю, вам не повредит просто показать немного HTML.

cruisepandey 02.08.2018 17:20
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
13
94
1

Ответы 1

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

Другие вопросы по теме