Автоматизация проверки текста (и его HTML) может оказаться сложной задачей, если вам не нравится язык и структура, которые вы используете. Ограниченное время для обучения и изучения — это отдельная проблема. Одной из моих задач по автоматизации дымового теста для нашего проекта была проверка текста в каждой среде, причем каждая конкретная настройка имела свое приветственное сообщение. И, признаюсь, я не совсем понимал, с чего начать. Я знал, что мне нужно, и знал, где это взять. Но собрать все детали воедино оказалось не так просто, как казалось.
Я начал с необходимости получить доступ к базе данных. А затем поработайте с нашей настройкой, чтобы убедиться, что я могу использовать настройки приложения (которые сообщают платформе, где искать информацию, и работают с настройками конфигурации, чтобы сохранить конфиденциальность информации) для подключения к базе данных во время запуска. Затем я мог бы соединить фрагменты, получить информацию из базы данных и сравнить ее с отображаемой информацией для тестирования.
Вручную это было просто — я должен был догадаться, что это означает, что это будет не так просто, как я надеялся. Просмотреть HTML и убедиться в правильности макета было несложно. Я достаточно понимаю простую HTML-разметку, поэтому это была быстрая проверка правильности слов и продолжение. Я не зря провел этот дымовой тест со многими паузами для ручной проверки. Помимо этого и списка вещей, которые мне нужно было проверить, мне нужно было учиться, исследовать и просить помощи, чтобы сделать эту автоматизацию успешной и применить ее в других тестах.
Как только доступ к базе данных (и правильная строка подключения!) был создан, я смог установить текст страниц в качестве переменной. Это была самая легкая часть: я знал, что здесь делаю, и чувствовал себя успешным, сделав это. Я запустил тест «Драматург» с ожиданием, что текст на странице будет соответствовать по словам, но не компонентам HTML. И я был прав: нужные слова были, но с добавленным HTML тест провалился.
Время исследования! Первая попытка заключалась в использовании Page.ContentAsync() — команды для получения полного HTML-кода страницы, включая заголовки. Это должно позволить мне выполнить поиск и найти подстроку текста, верно? На первый взгляд, это было не так уж и ужасно: у меня был сохранен HTML-код, который я искал, и все, что мне нужно было сделать, это просмотреть все содержимое документа, чтобы найти его. Неэффективно и уж точно не очень хорошая практика! Это должно дать мне нужный результат, и затем его можно будет повторить.
Это не так. Найти подстроку на всей странице быстро было невозможно, и я хотел, чтобы моя автоматизация была быстрой. После нескольких десятков попыток заставить это работать так, как я хотел, и помня правило бизнеса (если вы не можете решить проблему за 45 минут усилий, самое время спросить кого-нибудь другого), я назначил встречу с один из разработчиков. Я знаю, что они заняты и готовят очень необходимое обновление: встреча завершилась с прикрепленной запиской «мы можем перенести ее, если необходимо».
В ожидании встречи я продолжал с этим возиться: одной из проблем при сужении области был класс div – он не был правильно назван, а с Bootstrap вероятность дублирования div с то же имя вызвало у меня проблемы на других страницах. Разговаривая с кем-то, кто был здесь гораздо дольше меня, я узнал, что это ВСЕГДА третий элемент страницы.
Теперь у меня появился новый план его поиска — использовать локатор Nth() и найти правильный div. Мне бы хотелось решить эту проблему, написать сообщение, которое я сейчас печатаю, и перейти к следующему вопросу до встречи. Как многие из вас, возможно, знают и/или подозревают, это хороший повод для возникновения чего-то срочного, и это произошло. Планы копировались со страницы на страницу в органайзере несколько дней, пока не пришло время нам заняться парной разработкой.
Работать с этим разработчиком всегда одно удовольствие: у нас много общего и уважение друг к другу. В качестве бонуса они хорошо преподают! После быстрого обзора цели мы рассмотрели попытки, которые я предпринял для ее решения. Я оставил последний, с ошибками в IDE, в надежде, что он будет полезен. А теперь прогресс!
С помощью отладчика мы убедились, что HTML-код извлекается правильно. Это была одна из областей, которую я не проверил полностью – и, к счастью, это было правильно. Мы согласились, что имя div не очень полезно — в результате недавно проделанной работы был создан другой div с тем же именем, но на другой странице. Это было отмечено, но отложено до тех пор, пока я не дошел до этого момента в тесте.
У них были необходимые навыки работы с NUnit — более простой способ проверить этот раздел — использовать команду AreEqual. Это позволило тесту проверить равенство строк. Драматург был упрям. Ему нужны были локаторы, а не строки – или наоборот – на создание которых просто уходило слишком много времени. И я был рад изучить эту технику – я вижу, что она пригодится в будущем!
После нескольких попыток заставить Nth() работать, мы прибегли к использованию этого странного класса div – предварительно убедившись, что он использовался на странице только один раз. Это дало нам отправную точку — теперь нужно выяснить, как вставить туда HTML (к счастью, это было единственное, что было в этом конкретном div). Еще несколько фальстартов, и я, наконец, отказался от идеи, что ContentAsync() для этого div не будет работать, что привело их к решению, которое я пробовал и отбросил.
InnerHtmlAsync() предоставил нам точное содержимое div! Пространства и все такое. И это стало следующим камнем преткновения – мы не успели на встречу. К счастью, они были готовы дать мне еще несколько минут, главным образом потому, что эту проблему они уже решили раньше. Просто нужен был синтаксис для удаления пробелов: Замените(" ", ""), если вам было интересно. И это позволяло тесту работать до тех пор, пока следующая PauseAsync(), которую я добавил для ручной проверки, не остановила его на мгновение.
Они пошли на обед, а следующий блок времени я провел за подготовкой конспектов. Мне нужно было найти и другие вещи – и теперь я понял, как это сделать.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3