@LaFable

Почему Selenium находит элемент, которого нет?

Добрый день!
Недавно начал работать с Selenium.
Возникла интересная ситуация, возможно кто-то сможет объяснить как это происходит и как этого избежать.

На сайте выводится ФИО пользователя
5d526ae879bbe892607745.gif
В настройках профиля есть возможность скрыть ФИО. Элемент пропадает из DOM, не просто проставляется стиль для элемента, что он скрыт, а именно пропадает.
5d526b630839e612714819.gif

В тесте необходимо проверить, что элемента действительно нет.
А теперь самое интересное. Ниже написан метод, который проверяет наличие элемента двумя разными способами.
В первом случае при помощи FindsBy он пишет, что элемент не равен NULL, а во втором случае пишет, что равен (соответственно второй случай верный). Вопрос почему первый случай возвращает не NULL, и что с этим делать)

internal void IsHiddenUsername()
        {
            if (UserName != null)
            {
                //
            }

            if (Username() != null)
            {
                //
            }
        }

        [FindsBy(How = How.ClassName, Using = "account-widget__username")]
        internal IWebElement UserName;

        private IWebElement Username()
        {
            try
            {
                IWebElement element = driver.FindElement(By.ClassName("account-widget__username"));
                return element;
            }
            catch 
            {
                return null;
            }
        }


Вот что возвращается в первом if (это не сам элемент, а что-то другое):
5d526cfea6269390280926.png

При этом естественно при попытке вернуть например текст UserName.Text вываливается NoSuchElementException
  • Вопрос задан
  • 48 просмотров
Пригласить эксперта
Ответы на вопрос 1
@ScriptKiddo
1. Устанавливаете Xpath Helper
2. Ищете элементы по запросу
//*[@class='account-widget__username']
3. Придумываете другой Xpath, который бы явно указывал на нужный элемент, типа
//div[@class='account-widget']//div[@class='account-widget__username']
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы