Java Selenium findelement не распознает элемент, который находится на странице - PullRequest
0 голосов
/ 25 мая 2019

Если я использую инструменты разработчика в Chrome и вставляю свое утверждение By.name, на странице будет показано именно то, что я пытаюсь просмотреть.

Вот два утверждения Java, расположенные рядом друг с другом:

driver.findElement(By.xpath("//input[@name='firstName']")).clear();
driver.findElement(By.xpath("//input[@name='shippingCost']")).click();

Я помещаю эти два рядом друг с другом, чтобы исключить, что драйвер был каким-то образом сломан в той точке кода, откуда они берутся.Первый оператор очищает текстовое поле, на которое ссылаются, но второй возвращает NoSuchElementError.Я также попытался использовать By.name, как уже упоминалось выше, я просто пытаюсь понять, почему вторая каждый раз выдает ошибку.

Страница, с которой я работаю, - это одностраничный веб-сайт EXTJS, поэтому элемент управлениявсегда там.Я хочу использовать .getText (). Length (), чтобы проверить, есть ли сейчас текст в этом поле.

Любая справка о том, почему я не могу щелкнуть или даже просто сослаться на этот элемент управления нана странице, где я могу использовать селекторы xpath или name, чтобы увидеть элемент управления на странице.

--- Редактировать, чтобы добавить эти картинки кода, подходящие для указанных выше xpaths

Извините, это еще одно место, которое не работает, [name = 'shippingTypeGroundDate']

Это местоположение стоимости доставки

И этоэто рабочее имя firstName

Ответы [ 2 ]

0 голосов
/ 27 мая 2019

Добавить явное ожидание загрузки входного текстового поля. Затем попробуйте щелкнуть текстовое поле с исполнителем Javascript. Иногда щелчок веб-драйвера может не работать.

WebElement element = driver.findElement(By.xpath("//input[@name='shippingCost']"));
try {
        if (element.isEnabled() && element.isDisplayed()) {

                ((JavascriptExecutor) driver).executeScript("arguments[0].click();", element);
            } else {
                System.out.println("Unable to click on element");
            }
        } catch (StaleElementReferenceException e) {
            System.out.println("Element is not attached to the page document "+ e.getStackTrace());
        } catch (NoSuchElementException e) {
            System.out.println("Element was not found in DOM "+ e.getStackTrace());
        } catch (Exception e) {
            System.out.println("Unable to click on element "+ e.getStackTrace());
        }
0 голосов
/ 26 мая 2019

Проверьте, есть ли дубликаты элементов в выбранном селекторе.Согласно вашему описанию поле имени работает как положено, и у вас возникли проблемы с полем стоимости доставки.Возможно, на одной странице с выбранным селектором находятся дублированные элементы в неактивном состоянии.

Вы можете получить количество элементов, представленных ниже java code:

List<WebElement> listOfElements =driver.findElements(By.xpath("//input[@name='shippingCost']")); 
System.out.println("Number of elements:" +listOfElements.size());

Если вышеуказанные решения не работают, попробуйте с javascriptexecutor, он выполнит эти действия, даже если этот элемент находится под другим элементом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...