Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Проверка на наличия в элементе текста


(MevMIx) #1

Доброго всем дня!!!
Подскажите как проверить есть ли текст в элементе?
C# используя Assert
и хотелось бы чтоб тест не свалился если возникает ошибка
Спасиьбо


Как определить <div> … </div> пустой или с дополнительными элементами?
(YobiByte) #2

Товарищ, ваш вопрос - не вопрос, а не пойми что. Хотите точный ответ - пишите больше подробностей, напрзимер, что за элемент, что из работающего с C# вы используете? У меня есть подозрение, что Selenium какой-то версии.

На Assert-ах проверяется то, что “железно” должно быть. Если возникает ОШИБКА, то - свалиться просто должно, ибо - ошибка. Если это - хтмльная страница, то - сначала проверяйте, что страница полностью загрузилась, потом - ищите соответствие содержание элементов их ожидаемым значениям.

Чтобы не свалилось и можно было продолжать, используйте, например, ифы с выводом результата в лог. Или трай-кетч используйте, если неймётся.

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

Моё предложение: ввести поля с ОБЯЗАТЕЛЬНЫМ ЗАПОЛНЕНИЕМ.
Список полей (textarea) таков:

  1. Вопрос;
  2. Используемая OS на клиенте;
  3. Используемая OS на сервере (if exists);
  4. Используемая технология или продукт (например, Selenium или TestComplete) и их версии;
  5. Используемый язык программирования;
  6. Целевой браузер(ы), если используются;
  7. Комментарии, если “пейсатель” считает нужным добавить что-то важное, но не входящее в иные поля.

Надеюсь, меня услышат, а всем - профит по времени и пользе при поиске и прочтении только интересующего материала на сайте.


(Andrey Kim) #3

Не в курсе как это сделано в C# , но в JAVA и Python есть Expected conditions.

Там есть метод text_to_be_present_in_element_value(locator, text).
Можно сделать с ним ожидание и будет вам профит


(Eiler) #4
Assert.That(element.Text, Is.StringContaining(expected));

(MevMIx) #5

Спасибо!!!
А товарищу yobibyte хочется сказать одно. Сразу видно тестер со стажем, утоните то, уточните это.
Большинство вопросов видел посвящено Selenium WebDriver. Может я и ошибся.
Но после таких обычно на форумах и не хочется спрашивать, которым написать пол
страницы текста не лень, чем просто дать нормальный ответ.
И не строить из себя мегамозг(тут уж простите не сдержался)
Проще надо смотреть на вещи. Форумы для этого и надо.
но и Вам огромное спасибо. Впредь буду писать

VS2013, Nunit 2.6.3, Selenium WD 2.41 C#
Элемент формы регистрации, тестовое поле


(Werewolfas) #6

Если нужно ожидание появления элемента, можно использовать один из этих Expected conditions (переписаны из Java под C#)

    /// <summary>
    /// An expectation for checking if the given text is present in the specified
    /// element.
    /// </summary>
    /// <param name="locator">used to find the element</param>
    /// <param name="text">Expected text</param>
    /// <returns><see langword="true"/> If element contains text; otherwise, <see langword="false"/>.</returns>
    public static Func<IWebDriver, bool> TextToBePresentInElement(By locator, string text)
    {
        return (driver) =>
        {
            try
            {
                string elementText = driver.FindElement(locator).Text;
                return elementText.Contains(text);
            }
            catch (StaleElementReferenceException)
            {
                return false;
            }
        };
    }

    /// <summary>
    /// An expectation for checking if the given text is present in the specified
    /// elements value attribute.
    /// </summary>
    /// <param name="locator">used to find the element</param>
    /// <param name="text">Expected text</param>
    /// <returns><see langword="true"/> If element value contains text; otherwise, <see langword="false"/>.</returns>
    public static Func<IWebDriver, bool?> TextToBePresentInElementValue(By locator, string text)
    {
        return (driver) =>
            {
                try
                {
                    var elementText = driver.FindElement(locator).GetAttribute("value");
                    return elementText != null && elementText.Contains(text);
                }
                catch (StaleElementReferenceException)
                {
                    return null;
                }
            };
    }

Если нужен просто Assert то думаю сработает данный вариант:

                try
                {
                    Assert.That(element.Text, Is.StringContaining(expected));
                }
                catch (AssertionException)
                {
                    // Записываем в лог если нет текста
                }

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

Обязательная форма для заполнения - странное занятие, так как здесь не только пишут в поисках решения проблемы, но и делятся информация. Что в таких случаях заполнять в данную форму?