Selenium получает атрибут / CSS / свойство - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть сценарий, в котором селену нужно открыть форму входа и сразу после загрузки страницы нажать «Войти», ничего не вводя.Когда ничего не заполнено, поля оба:

  • Окружения выделены красным
  • Изменен цвет имени поля, изменен на красный
  • Строка «Обязательно» появляется нанижняя часть поля

У меня запущен весь тест, поля расположены, но я не знаю, как правильно проверить (эти точки).

Только DOMдля одного поля (для не красной формы) совершенно безобразно:

<div class="form-row" xpath="1">
   <div class="jss98 jss99 primary input outlined-input" input="[object Object]" meta="[object Object]">
      <label class="jss113 jss102 jss107 jss110 jss112" data-shrink="false" for="email">Email</label>
      <div class="jss133 jss120 jss134">
         <fieldset aria-hidden="true" class="jss150 jss127" style="padding-left: 29.25px;">
            <legend class="jss151" style="width: 0.01px;"><span>​</span></legend>
         </fieldset>
         <input aria-invalid="false" class="jss143 jss128" id="email" type="text" value="" style="background-image: url(&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAjZJREFUWAntV7vKIlEMPt5dOy/NID9WIoKKCAsiWIqFFmLra4j2IoKPsL24YKWFD7Ai+ASClY2yNioWgjckfzLrCeN46XSKNXDmJPkyyWdOZnCE+CdfuP3G9RcXvHhRDapFNVUhZYXr1YX1+anmlwUvv3D9xPVu+YEFFRNeqCXKu6tf6i2IALXGMDEbVvlS+EPg/+tAuVwWmUyGR+/tHSgUCiKdThtHgCs/egosFouIRCIiEAjoY9n2+XwikUgIp9PJPq1itVpFLBYTfr9f636o8zs6GAzCeDwGKb1eD1wuF+OYARqNBpzPZzVkuVxCNpu9wuPxOEynU5kCWq0W2Gw2jhkOh1Cr1dgmVmyMRiO+USrNZpNxPD/p5n29XoPb7VZjTCYTTCYTxqRSqVQ4h54AD6HX6xXJZPKmTblcjn35fJ51qWBxkUqlVBM7KEKhkIR41+Zg50VhAofDQSBjPS72+z37tDo7Udntdqopdy1G+qP7CGMC2+1WdLtd8l0JniHb7Xb7hiSet8CjU2Nms5kYDAYcLxVtDunT7nw+Ho8HOp0OYDdgs9lAvV4Hs9nMON4EpVIJ5vO5Oog0M+Fw+ApXFAX6/T4cj0dYrVZQrVavcP0MEJGrALJpammg7mHS53A4nuJ2u/0uridgxYQ3cjqdbnx6B83MM8EOPIMZ4xlgjwHK3VYhj5f4i8UiRKNRzv35S2b4DHwIUAcWBjx5suSCCPyRlgG7WtvQj1P5o4kEfTK//fP8G/4x2UymA12DAAAAAElFTkSuQmCC&quot;); background-repeat: no-repeat; background-attachment: scroll; background-size: 16px 18px; background-position: 98% 50%; cursor: auto;">
      </div>
   </div>
</div>

DOM с "красным":

<div class="form-row" xpath="1">
   <div class="jss98 jss99 primary input outlined-input error " input="[object Object]" meta="[object Object]" aria-describedby="email-helper-text">
      <label class="jss113 jss116 jss105 jss102 jss107 jss110 jss112" data-shrink="false" for="email">Email</label>
      <div class="jss133 jss120 jss139 jss125 jss134">
         <fieldset aria-hidden="true" class="jss150 jss127" style="padding-left: 29.25px;">
            <legend class="jss151" style="width: 0.01px;"><span>​</span></legend>
         </fieldset>
         <input aria-invalid="true" class="jss143 jss128" id="email" type="text" value="" style="background-image: url(&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAmJJREFUWAntV7uKIkEUvbYGM4KID3wEIgjKRLLpKGLgFwiCfslGhkb7IbLgAzE1GhMxWxRRBEEwmEgDERWfW6fXuttq60a2wU6B1qlzb9U5fatsKROJVigUArvd7oeAyePx6Af3qGYymT7F2h8Wi+V7Pp+fmE7iv4Sw81GieusKIzNh4puCJzdaHIagCW1F4KSeQ4O4pPLoPb/3INBGBZ7avgz8fxWIxWIUCoX43Blegbe3NwoGg88zwMoncFUB8Yokj8dDdrv9MpfHVquV/H4/iVcpc1qgKAp5vV6y2WxaWhefreB0OimXy6kGkD0YDKhSqdB2u+XJqVSK4vE4QWS5XKrx0WjEcZ/PR9lslhwOh8p1Oh2q1Wp0OBw4RwvOKpBOp1kcSdivZPLvmxrjRCKhiiOOSmQyGXp5ecFQbRhLcRDRaJTe39//BHW+2cDr6ysFAoGrlEgkwpwWS1I7z+VykdvtliHuw+Ew40vABvb7Pf6hLuMk/rGY02ImBZC8dqv04lpOYjaw2WzUPZcB2WMPZet2u1cmZ7MZTSYTNWU+n9N4PJbp3GvXYPIE2ADG9Xqder2e+kTr9ZqazSa1222eA6FqtUoQwqHCuFgscgWQWC6XaTgcEiqKQ9poNOiegbNfwWq1olKppB6yW6cWVcDHbDarIuzuBBaLhWrqVvwy/6wCMnhLXMbR4wnvtX/F5VxdAzJoRH+2BUYItlotmk6nLGW4gX6/z+IAT9+CLwPPr8DprnZ2MIwaQBsV+DBKUEfnQ8EtFRdFneBDKWhCW8EVGbdUQfxESR6qKhaHBrSgCe3fbLTpPlS70M0AAAAASUVORK5CYII=&quot;); background-repeat: no-repeat; background-attachment: scroll; background-size: 16px 18px; background-position: 98% 50%;">
      </div>
      <p class="jss159 jss163 jss160" id="email-helper-text">Required</p>
   </div>
</div>

Мы можемпосмотрите, что: "class =" jss98 jss99 первичная ошибка ввода-ввода outlined-input "/ aria-descriptionby =" email-helper-text ", введите aria-invalid =" true "и, наконец, был добавлен новый абзац с текстом" Required "

То, что я хотел бы сделать прямо сейчас, - это проверить поле ДО того, как оно было щелкнуто, и проверить, являются ли перечисленные выше элементы пустыми, затем нажмите следующий раз и проверьте, присутствуют ли ранее отсутствующие элементы.

Может ли кто-нибудь объяснить мне, как эти три метода заключены ве меняются?

Я хотел бы взять значение?класса внутри div (class = "jss98 jss99 первичный ввод, выделенный-введенный").Может кто-нибудь сказать мне, как его можно взять?

Пишу на C #

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

Первое, что вы хотели бы сделать, это поместить до и после HTML в механизм сравнения, чтобы увидеть, что изменилось.(Вы можете найти простой онлайн, если у вас его еще нет.) Я вижу три вещи (которые я считаю существенными):

  1. Класс "error" добавлен кexternal DIV
  2. Атрибут «aria-invalid» на INPUT изменяется с false на true
  3. Тег P добавляется с id = "email-helper-text "и содержит" Обязательный "

Тесты до и после будут выглядеть примерно так ... вы делаете .FindElements() (множественное число) и смотрите, равно ли число 0 до и 1после.

Вот несколько примеров кода

Пример 1

By errorClassLocator = By.CssSelector("div.outlined-input.error");

// before
Assert.Zero(Driver.FindElements(errorClassLocator).Count, "Verify that 'error' class is not present");

// after
Assert.NotZero(Driver.FindElements(errorClassLocator).Count, "Verify that 'error' class is present");

Пример 2

By ariaInvalidLocator = By.CssSelector("input#email[aria-invalid='true']");

// before
Assert.Zero(Driver.FindElements(ariaInvalidLocator).Count, "Verify that 'aria-invalid' attribute value of 'true' is not present");

// after
Assert.NotZero(Driver.FindElements(ariaInvalidLocator).Count, "Verify that 'aria-invalid' attribute is true");

ПРИМЕЧАНИЕ. Вы также можете использовать два локатора... ищите aria-invalid = 'false', поскольку раньше вместо 'true' не существует.Другой вариант - найти элемент, а затем получить значение «aria-invalid» и сравнить его с «true» или «false».

Пример 3

By requiredLocator = By.Id("email-helper-text");

// before
Assert.Zero(Driver.FindElements(requiredLocator).Count, "Verify that the 'email-helper-text' P is not present");

// after
Assert.NotZero(Driver.FindElements(requiredLocator).Count, "Verify that the 'email-helper-text' P is present");
Assert.AreEqual("Required", Driver.FindElement(requiredLocator).Text, "Verify that 'Required' text is present");

ПРИМЕЧАНИЕ.Использование .FindElements() имеет решающее значение для предыдущего случая, потому что если вы используете .FindElement(), оно выдаст, если элемент не найден.Это также полезно для случая после, если он не присутствует, как ожидалось.Вместо ElementNotFoundException вы получите несостоявшийся Assert с ясным сообщением о том, что отсутствует.

0 голосов
/ 11 декабря 2018

Вы можете использовать XPath для проверки содержимого атрибута класса следующим образом:

"//div[contains(@class, 'error')]"

Это ничего не должно найти перед отправкой и найти цветной элемент после отправки.

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