Я конечно игры никогда не тестировал, но по-моему ни один автотест не протестирует игру так, как это сделает руками человек)
- Форум тестировщиков
- → Публикации Noksa
117 публикаций создано Noksa (учитываются публикации только с 05 июня 2023)
Отправлено автор: Noksa 16 августа 2018 - 12:55 в Автоматизированное тестирование
Я конечно игры никогда не тестировал, но по-моему ни один автотест не протестирует игру так, как это сделает руками человек)
Отправлено автор: Noksa 15 августа 2018 - 15:50 в Автоматизированное тестирование
А что мы объявляем с помощью var elements ? просто это видимо JS, для java это стринговая переменная или WebElement? ..
Я привёл пример с C#, но на Java эта переменная с типом List<WebElement> (если мне не изменяет память).
Вопрос по выражению: *[contains(text(), 'Вiд')] and descendant::*[contains(text(), 'грн.')]]")), для чего скобка после текста? ( 'Вiд'), 'грн.'))
Ну как зачем - это закрывающая скобка contains. Текст, который ищем - находится между ' '.
В гугле можно поискать - xpath text contains.
После проверки мне не нужно кликать каждый элемент - достаточно одного, но проверить нужно все.. и ideшка не разрешает ToList().. может я что то не так делаю..
Ну если не нужно, тогда кликайте по первому.
А проверяйте все, например, в цикле.
Отправлено автор: Noksa 15 августа 2018 - 13:08 в Начинающему тестировщику
Так а в чем вопрос-то?
Ни логов, ни локаторов, ни вопроса... ни-че-го.
Отправлено автор: Noksa 15 августа 2018 - 12:58 в Автоматизированное тестирование
Ищите все элементы:
var elements = driver.FindElements(By.XPath("li[class='history-list__item history-item-out-request history-item-incoming' and descendant::*[contains(text(), 'Вiд')] and descendant::*[contains(text(), 'грн.')]]"))
Есть так же более короткий вариант:
var elements = driver.FindElements(By.XPath("li[class='history-list__item history-item-out-request history-item-incoming' and .//*[contains(text(), 'Вiд')] and .//*[contains(text(), 'грн.')]]"))
Но вообще у вас локатор с классом - ужасный.
Далее
elements.ToList().ForEach(w => w.Click());
Отправлено автор: Noksa 15 августа 2018 - 04:54 в Selenium - Functional Testing
Значит у вас там не инт в атрибуте "value"
Отправлено автор: Noksa 13 августа 2018 - 12:12 в Автоматизированное тестирование
Наверное имелось в виду, что кукумбер в неумелых руках просто сам по себе замедлит разработку, ибо лишние слои, абстракции, че к чему и тд
Отправлено автор: Noksa 13 августа 2018 - 09:39 в Автоматизированное тестирование
Вот я тоже не могу понять.
Если это единственный человек в команде тестирования - и он не имеет опыта автоматизации - зачем он этим занимается?
Не, ну если начальство хочет научить сотрудника - это хорошо. Только тогда оно должно быть готово к тому, что он будет не то что замедлять процесс, а просто кидать якорь.
Отправлено автор: Noksa 13 августа 2018 - 05:36 в Selenium - Functional Testing
pa = Browser.FindElement(By.LinkText("Собрать выручку!")); // эта строка будет каждый раз находить один и тот же элемент
сюда программа не доходит. Все равно в переменную х не пишется спан
Что значит программа не доходит? Логи, ошибки?
Гадать на кофейной гуще не хочется.
И я не понял, вы хотите в переменную спан записать, или его значение?
Отправлено автор: Noksa 10 августа 2018 - 04:53 в Selenium - Functional Testing
GetAttribute(string attr) - возвращает не элемент, а стринг.
Только ваш цикл всё равно не будет работать в таком виде, потому что в нём вы будете всегда находить один и тот же элемент.
var x = Browser.FindElement(By.XPath("//span[@class='tdn link nshd bl cntr m5 small']")).GetAttribute("value"); int.TryParse(x, out var intX); if (intX == 0) throw new Exception($"Алярм!!! Спан не распарсился! Парсили значение \"{x}\""); for (var ppp = 0; ppp < intX; ppp++) { pa = Browser.FindElement(By.LinkText("Собрать выручку!")); // эта строка будет каждый раз находить один и тот же элемент pa.Click(); }
Проще сделать так, без лишних велосипедов. При необходимости допилить локатор.
var elements = Browser.FindElements(By.LinkText("Собрать выручку!")).ToList(); elements.ForEach(w => w.Click());
Отправлено автор: Noksa 09 августа 2018 - 11:05 в Selenium - Functional Testing
Уважаемые опытные тестировщики, вы постановку задачи топикстартера вообще прочитали? :)
Суть моей программы в том, что она должна каждые две секунды обновлять страницу сайта и и парсить с нее одну строку.
В таком случае надо писать по-другому, а не использовать thread.sleep напрямую.
В C# я бы реализовал это так. Здесь мы точно пойдём на следующую итерацию после двух секунд после загрузки страницы, а не после всех действий на ней.
var sw = new Stopwatch(); DriverManager.Driver.Navigate().GoToUrl("http://url.ru"); while (true) { sw.Start(); var number = DriverManager.Driver.FindElements(By.TagName("b")); var str = number[2].Text; Console.WriteLine(string.IsNullOrEmpty(str) ? "Error" : str); sw.Wait().Until(_ => _.Elapsed.TotalSeconds >= 2); sw.Stop(); sw.Reset(); DriverManager.Driver.Navigate().Refresh(); }
В Java есть что-то похожее. И да, вместо Thread.Sleep тогда уж использовали бы TimeUnit.
Отправлено автор: Noksa 09 августа 2018 - 09:58 в Selenium - Functional Testing
Да даже если это тест.
Если в каком-то тесте есть sleep, значит он есть и в других.
Страшно представить, сколько времени тупо в никуда уходит от таких решений.
Отправлено автор: Noksa 09 августа 2018 - 09:52 в Selenium - Functional Testing
Все эти последовательные наследования рано или поздно до добра не доведут.
А так, делайте, конечно, как знаете.
Отправлено автор: Noksa 09 августа 2018 - 04:51 в Selenium - Functional Testing
Тогда есть класс А. B extends A и С extends A.
А как у автора:
class A
class B extends A
class C extends B, что странно. По крайней мере классы А и B можно объединить
Почему странно?
class A - Корм
class B extends A - Сухой
class C extends B - Для собак
Что тут не так?
Корм - общее для всех.Сухой - общее для некоторых.
Для собак - частное.
Если Корм это базовый класс - совсем не факт, что это что-то общее для всех.
Каким-то кормом можно кормить, например, рыб, но нельзя таким же кормить лошадей.
Если у вас будет разновидность кормов для собак огромная - в вашем случае придётся городить кучу классов.
Это очень неудобно.
Я бы использовал Корм как интерфейс. Собаки могут кушать? Могут. Лошади могут? Могут. Рыбы могут? Могут.
Ну а далее можно воспользоваться декоратором, например...
Отправлено автор: Noksa 07 августа 2018 - 17:50 в Selenium - Functional Testing
Отправлено автор: Noksa 05 августа 2018 - 11:21 в Selenium - Functional Testing
Отправлено автор: Noksa 01 августа 2018 - 10:53 в Автоматизированное тестирование
Всё зависит от языка, который вы используете.
Я могу привести пример на C#.
Можно пример ?
Закрутился.
Вообще, я юзал в Java данный фреймворк (естественно придётся допиливать его обильно, я бы даже сказал перепиливать, но это приходит со временем) - https://github.com/sbtqa/page-factory
Очень упрощает написание шагов.
Ну а так, на C# написал подобный фреймворк, у меня это выглядело так:
Сценарий: Проверка наличия элементов Когда открывается страница "Главная" Тогда пользователь (проверяет наличие элемента) из списка | Название элемента | | Войти | | Контактная информация | | Навигация |
Метод:
[ActionTitle("проверяет наличие элемента")] public virtual void CheckElementExists(List<object> elementTitles) { Assert.Multiple(() => { foreach (var elementTitle in elementTitles) { var element = GetElementByTitle(elementTitle.ToString()) as IWebElement; var result = element.Wait().Until(_ => _.Exists()); if (result) AllureSteps.AddSingleStep($"Проверено наличие элемента '{elementTitle}'."); else AllureSteps.AddSingleStep($"Элемент '{elementTitle}' отсутствует.", Status.failed); Assert.IsTrue(result, $"Элемент '{elementTitle}' отсутствует."); } }); }
Отправлено автор: Noksa 31 июля 2018 - 13:17 в Автоматизированное тестирование
Всё зависит от языка, который вы используете.
Я могу привести пример на C#.
Отправлено автор: Noksa 31 июля 2018 - 05:06 в Автоматизированное тестирование
Интересно, как вы будете описывать в Gherkin тяжелые запросы?
Отправлено автор: Noksa 27 июля 2018 - 16:19 в Автоматизированное тестирование
Ну достаточно просто сделать метод, который принимает на вход List<T>, внутри которого над всеми элементами выполняем какое-то действие.
Будет что-то типа такого:
И пользователь (проверяет наличие элементов) из таблицы |Элемент| |Логин | |Пароль |
Отправлено автор: Noksa 26 июля 2018 - 08:43 в Автоматизированное тестирование
Я использую для переключения на новое окно такой метод:
public static void SwitchToNewWindow<T>(this T page, Action<T> action) where T : BasePage { var handlesBefore = DriverManager.Driver.WindowHandles.Count; action.Invoke(page); DriverManager.Driver.Wait() .Until(() => handlesBefore != DriverManager.Driver.WindowHandles.Count); if (handlesBefore == DriverManager.Driver.WindowHandles.Count) throw new NullReferenceException( "Количество открытых окон в браузере не изменилось. Новое окно не открылось."); DriverManager.Driver.SwitchTo().Window(DriverManager.Driver.WindowHandles.Last()); }
Соответственно работает как-то так:
Pages.GetPage<ReturnsPage>().SwitchToNewWindow(_ => _.TransferSelectedToCourier());
Отправлено автор: Noksa 19 июля 2018 - 07:39 в Автоматизированное тестирование
А ещё лучше - просить разработчиков добавлять ID элементам.
Тогда ваши локаторы всегда будут самыми лучшими, и короткими :)
Отправлено автор: Noksa 19 июля 2018 - 05:41 в Автоматизированное тестирование
compose = driver.find_element(By.XPATH, "//span[@class = 'mail-ComposeButton-Text' and text() = 'Написать']") compose = driver.find_element(By.XPATH, "//span[@class = 'mail-ComposeButton-Text' and contains(text(), 'Написать')]")
Данные локаторы более подвержены поломке, нежели чем
compose = driver.find_element(By.CSS_SELECTOR, ".mail-ComposeButton-Text")
Просто хотя бы потому, что текст может поменяться, либо поменяться язык, и локаторы сломаются.
Так что привязываться к тексту стоит только в самом крайнем случае.
Отправлено автор: Noksa 17 июля 2018 - 04:50 в Selenium - Functional Testing
Зачем вообще использовать буфер обмена в тестах?
В чем смысл?
Вы хотите протестировать, что в ОС буфер обмена работает?
Отправлено автор: Noksa 13 июля 2018 - 10:50 в Автоматизированное тестирование
Вам нужно использовать композицию.
Конечно, при условии, что всё это открывается на этой же странице.
Отправлено автор: Noksa 13 июля 2018 - 08:15 в Автоматизированное тестирование
Community Forum Software by IP.Board Русификация от IBResource
Лицензия зарегистрирована на: Software-Testing.Ru