Перейти к содержимому

Публикации Noksa

117 публикаций создано Noksa (учитываются публикации только с 05 июня 2023)



#167805 Автоматизация тестирования мобильных игр

Отправлено автор: Noksa 16 августа 2018 - 12:55 в Автоматизированное тестирование

Я конечно игры никогда не тестировал, но по-моему ни один автотест не протестирует игру так, как это сделает руками человек)




#167772 Найти элемент на странице и проверить его дочерние элементы, при нужно

Отправлено автор: 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().. может я что то не так делаю.. 

 

Ну если не нужно, тогда кликайте по первому.

 

А проверяйте все, например, в цикле.




#167768 ChromeDriver перестал видеть элементы

Отправлено автор: Noksa 15 августа 2018 - 13:08 в Начинающему тестировщику

Так а в чем вопрос-то?

Ни логов, ни локаторов, ни вопроса... ни-че-го.




#167767 Найти элемент на странице и проверить его дочерние элементы, при нужно

Отправлено автор: 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());



#167748 Цикл (selenium+c#)

Отправлено автор: Noksa 15 августа 2018 - 04:54 в Selenium - Functional Testing

Значит у вас там не инт в атрибуте "value"




#167715 Не могу понять как сделать проверку с list

Отправлено автор: Noksa 13 августа 2018 - 12:12 в Автоматизированное тестирование

Наверное имелось в виду, что кукумбер в неумелых руках просто сам по себе замедлит разработку, ибо лишние слои, абстракции, че к чему и тд




#167703 Не могу понять как сделать проверку с list

Отправлено автор: Noksa 13 августа 2018 - 09:39 в Автоматизированное тестирование

Вот я тоже не могу понять. 

Если это единственный человек в команде тестирования - и он не имеет опыта автоматизации - зачем он этим занимается?

 

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




#167697 Цикл (selenium+c#)

Отправлено автор: Noksa 13 августа 2018 - 05:36 в Selenium - Functional Testing

pa = Browser.FindElement(By.LinkText("Собрать выручку!")); // эта строка будет каждый раз находить один и тот же элемент

сюда программа не доходит. Все равно в  переменную х не пишется спан

 

 

Что значит программа не доходит? Логи, ошибки?

Гадать на кофейной гуще не хочется.

 

И я не понял, вы хотите в переменную спан записать, или его значение?




#167683 Цикл (selenium+c#)

Отправлено автор: 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()); 



#167671 Selenium java не всегда срабатывает findElements

Отправлено автор: 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.




#167665 Selenium java не всегда срабатывает findElements

Отправлено автор: Noksa 09 августа 2018 - 09:58 в Selenium - Functional Testing

Да даже если это тест. 

Если в каком-то тесте есть sleep, значит он есть и в других.

 

Страшно представить, сколько времени тупо в никуда уходит от таких решений.




#167664 Как уменьшить количество вызовов классов?

Отправлено автор: Noksa 09 августа 2018 - 09:52 в Selenium - Functional Testing

Все эти последовательные наследования рано или поздно до добра не доведут.

А так, делайте, конечно, как знаете.




#167661 Как уменьшить количество вызовов классов?

Отправлено автор: 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 - Для собак

Что тут не так?
Корм - общее для всех.

Сухой - общее для некоторых.

Для собак - частное.

 

 

Если Корм это базовый класс - совсем не факт, что это что-то общее для всех.

 

Каким-то кормом можно кормить, например, рыб, но нельзя таким же кормить лошадей.

 

Если у вас будет разновидность кормов для собак огромная - в вашем случае придётся городить кучу классов. 

Это очень неудобно.

 

 

Я бы использовал Корм как интерфейс. Собаки могут кушать? Могут. Лошади могут? Могут. Рыбы могут? Могут.

 

Ну а далее можно воспользоваться декоратором, например...




#167642 Selenium Webdriver Java. Цикл If

Отправлено автор: Noksa 07 августа 2018 - 17:50 в Selenium - Functional Testing

If это не цикл, это условный оператор.



#167593 Прочитать текст из "Disabled" Input form

Отправлено автор: Noksa 05 августа 2018 - 11:21 в Selenium - Functional Testing

Contains.



#167509 Оптимизация теста проверки элементов на странице

Отправлено автор: 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}' отсутствует.");
                }
            });
        }



#167460 Оптимизация теста проверки элементов на странице

Отправлено автор: Noksa 31 июля 2018 - 13:17 в Автоматизированное тестирование

Всё зависит от языка, который вы используете.

Я могу привести пример на C#.




#167439 Тестирование API при помощи Ruby+selenium+cucumber

Отправлено автор: Noksa 31 июля 2018 - 05:06 в Автоматизированное тестирование

Интересно, как вы будете описывать в Gherkin тяжелые запросы?




#167391 Оптимизация теста проверки элементов на странице

Отправлено автор: Noksa 27 июля 2018 - 16:19 в Автоматизированное тестирование

Ну достаточно просто сделать метод, который принимает на вход List<T>, внутри которого над всеми элементами выполняем какое-то действие. 

 

Будет что-то типа такого:

И пользователь (проверяет наличие элементов) из таблицы
|Элемент|
|Логин  |
|Пароль |



#167362 Помогите написать методы для переключения между окнами браузера

Отправлено автор: 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());



#167287 Поиск элемента с помощью xpath

Отправлено автор: Noksa 19 июля 2018 - 07:39 в Автоматизированное тестирование

А ещё лучше - просить разработчиков добавлять ID элементам. 
Тогда ваши локаторы всегда будут самыми лучшими, и короткими :)




#167285 Поиск элемента с помощью xpath

Отправлено автор: 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")

Просто хотя бы потому, что текст может поменяться, либо поменяться язык, и локаторы сломаются. 

 

Так что привязываться к тексту стоит только в самом крайнем случае.




#167248 Selenium IDE и вставка из буфера обмена в строку

Отправлено автор: Noksa 17 июля 2018 - 04:50 в Selenium - Functional Testing

Зачем вообще использовать буфер обмена в тестах?

В чем смысл?

Вы хотите протестировать, что в ОС буфер обмена работает? 




#167169 Как описать страницу page object ?

Отправлено автор: Noksa 13 июля 2018 - 10:50 в Автоматизированное тестирование

Вам нужно использовать композицию. 

 

Конечно, при условии, что всё это открывается на этой же странице. 




#167157 Как описать страницу page object ?

Отправлено автор: Noksa 13 июля 2018 - 08:15 в Автоматизированное тестирование

3d6b8f197811be22dcd8a6aef6a00157.jpg