Не удается найти элемент — Автоматизация веб-сайта в разных локализациях с помощью selenium webdriver

#java #selenium #xpath #pageobjects

#java #selenium #xpath #pageobjects

Вопрос:

Я пытаюсь автоматизировать веб-сайт, который имеет разные системы показателей. Приложение поддерживает как американскую метрическую систему, так и британскую метрическую систему. Например: если я открываю приложение с американского сервера, я вижу текстовые поля в футах и дюймах, и если я открываю то же приложение с другого сервера, я вижу текстовые поля в сантиметрах.

Я написал свой код так, что сначала он проверяет, присутствует ли элемент текстового поля с футами и дюймами, если он присутствует, то он продолжает и вводит значения в эти текстовые поля, иначе, если футов и дюймов нет, тогда введите значения в текстовое поле Сантиметры.

 /*
 *
 * This block is for the values in US version
 *
 */
@FindBy(xpath = ".//*[@id='profile_height_large_value']")
WebElement CurrentHeightinFeet;

@FindBy(xpath = ".//*[@id='profile_height_small_value']")
WebElement CurrentHeightinInches;

/*
 * This block is for the values in British version
 *
 */

@FindBy(xpath = ".//*[@id='profile_height_display_value']")
WebElement CurrentHeightinCM;
  

И мой код для проверки, есть ли он в любой версии, приведен ниже.

 public void userFitnessDetails() {
    CurrentWeight.sendKeys("70");

    if (CurrentHeightinFeet.isDisplayed()) {
        CurrentHeightinFeet.clear();
        CurrentHeightinFeet.sendKeys("5");
        CurrentHeightinInches.clear();
        CurrentHeightinInches.sendKeys("10");
    }

    CurrentHeightinCM.clear();
    CurrentHeightinCM.sendKeys("170");
}
  

Если я выполняю приведенный выше код, я получаю сообщение об ошибке —
СБОЙ: регистрация
org.openqa.selenium.Исключение NoSuchElementException: не удается найти элемент:

 {"method":"xpath","selector":".//*[@id='profile_height_large_value']"}
  

Может ли кто-нибудь помочь мне исправить это?

Спасибо

Ответ №1:

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

Вы столкнетесь с проблемами с isDisplayed() методом. Он используется, чтобы выяснить, не виден ли элемент, присутствующий на странице, или наоборот, из-за настройки отображения атрибута style. Здесь вы упомянули, что в зависимости от расположения сервера соответствующие html-элементы присутствуют или нет. Если элемент недоступен, вы увидите исключение.

Вы можете использовать более безопасную driver.findElements() проверку условий вместо isDiplayed() , которая возвращает список, и вы можете проверить размер, чтобы определить доступность.

Комментарии:

1. Я изменил свой код в соответствии с вашим предложением, однако я столкнулся с проблемой при проверке состояния.

2. @findBy(xpath = «.//*[@id=’profile_height_display_value’]»)) Веб-элемент CurrentHeightinCM; @FindAll(@findBy(id = «profile_goal_weight_display_value»)) Целевой вес веб-элемента; Также при проверке состояния я использую if(CurrentHeightinFeet.size() > 0 amp;amp; CurrentHeightinInches.size() > 0 ){ CurrentHeightinFeet.clear(); CurrentHeightinFeet.SendKeys(«5»); CurrentHeightinInches.clear(); CurrentHeightinInches.SendKeys(«10″); } » Метод SendKeys(строка) не определено для типа List<WebElement>»

3. Вы не можете вызвать SendKeys в списке, который содержит WebElements. Итак, когда размер списка больше 0, то ваше условие выполнено. Элемент, который вы ищете, необходимо извлечь из списка. Используйте метод get(0) в списке, чтобы получить WebElement. А затем используйте метод SendKeys.