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

Автоматизатор мобильных приложений
онлайн, начало 11 августа
Тестирование безопасности
онлайн, начало 11 августа
Тестирование мобильных приложений
онлайн, начало 11 августа
Автоматизация тестирования REST API на Python
онлайн, начало 11 августа

Публикации mazik7

23 публикаций создано mazik7 (учитываются публикации только с 05 августа 2020)


#146900 Ожидание изменения текста в элементе

Отправлено автор: mazik7 07 декабря 2015 - 06:04 в Selenium - Functional Testing

 

 

Попробуйте сделать ожидание на существование элемента с конкретным текстом или значением.
Например - ждем ссылку с текстом Save. Для этого просто пишем соответствующий локатор (Как написал все, заметил что Petrov.Sergey это и предлагает :smile:):

WebDriverWait waitLinkSave = new WebDriverWait(driver, TimeSpan.FromSeconds(30));//Ждем 30 секунд, например
waitLinkSave.Until(ExpectedConditions.ElementExists(By.XPath(//a[contains(text(), 'Save')])));//Указываем что ждем ссылку с текстом "Save"

Хотите прикол? Вы ищете по ключевому слову contains(...)

Строка "10568" содержит строку "1".

То есть "10568".contains("1") = true

В Вашем примере ссылка с текстом "Save text" будет найдена (ожидание сработает), но это будет совершенно не тот элемент, который нужен.

 

Топикстартеру нужно точное совпадение.

Contains можно и не использовать. Я же просто пример привел ибо не нам же додумывать все за топикстартера и ему, и только ему известны все условия =)
И пример же банальный. Можно к примеру прописать путь типа "//div[@id='NuzhniyDiv']//a[contains(text(),'1')]" и счастье будет ближе.

 

Ну а с точным совпадением еще проще - если уж текст и известен к тому же "//div[@id='NuzhniyDiv']//a[text()=10568')]".

 

mazik7, так не сработает

Ужасно :cray: 
Но все же если вы ждете конкретного значения элемента, то нужно плясать как раз в сторону ожидания именно этого конкретного значения. А иначе StaleReferenceException будет преследовать в ночных кошмарах.

 

 

6. Не тест столько длится, а поиск

И вот именно поэтому нужно переписывать. Правда не тест - а поиск. И я так понимаю по истечении 40 секунд он просто вылетает по исключению?

 

Кстати времени много прошло - проблему решили? 




#146671 Ожидание изменения текста в элементе

Отправлено автор: mazik7 01 декабря 2015 - 09:33 в Selenium - Functional Testing

Попробуйте сделать ожидание на существование элемента с конкретным текстом или значением.
Например - ждем ссылку с текстом Save. Для этого просто пишем соответствующий локатор (Как написал все, заметил что Petrov.Sergey это и предлагает :smile:):

WebDriverWait waitLinkSave = new WebDriverWait(driver, TimeSpan.FromSeconds(30));//Ждем 30 секунд, например
waitLinkSave.Until(ExpectedConditions.ElementExists(By.XPath(//a[contains(text(), 'Save')])));//Указываем что ждем ссылку с текстом "Save"



#144671 Как найти элемент в таблице

Отправлено автор: mazik7 30 сентября 2015 - 08:45 в Selenium - Functional Testing

Привет.
Я подумал что первую задачку можно решить так(C#):


//Метод для определения существования элемента
public static bool IsElementPresent(IWebDriver driver, By by)
        {
            WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(5));
            try
            {
                wait.Until(ExpectedConditions.ElementExists(by));
                wait.IgnoreExceptionTypes(typeof(NoSuchElementException));
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }
//-------------------------Тестируемый кусок-------------------------
string expCountryName = "Russia";
string expDocName = "Doc";
//Проверка существования строки с именем expCountryName
By countryTr = By.XPath(string.Format("//tr[td[contains(text, '{0}')]]", expCountryName));
By docTd = By.XPath(string.Format("//tr[td[contains(text, '{0}')]]/td[2][contains(text(), {1})]", expCountryName, expDocName));
//Если элемент существует, проверить существование документа
if(IsElementPresent(driver, countryTr))
    {
    if(IsElementPresent(driver, docTd))
        throw new Exception("DocName "+ expDocName +" tr does not exist");
    }
else
    throw new Exception("CountryName "+ expCountryName +" tr does not exist");

Вторую задачку я не понял так что не взялся за нее (С состояниями).




#143989 Chrome open page in new window instead of new Tab

Отправлено автор: mazik7 10 сентября 2015 - 02:57 в Selenium - Functional Testing

Собсно между вкладкой и окном разница не большая - и к вкладке и к окну можно обратиться с помощью экземпляра драйвера. Вопрос в другом: какие действия вам необходимо совершить с данной вкладкой или окном?
Работать с окнами можно через handles, и, если вы знаете какой handle к какому окну принадлежит, то можно спокойно этими окнами управлять.

Вот пример из проекта: идет работа на почтовом клиенте, был произведен клик по ссылке и открылась новая вкладка, однако driver работает со старой.

Наши действия: получаем handle текущей вкладки, в списке handle'ов ищем отличную от текущей, закрываем текущую и переключаемся на новую.

string currentWindowHandle = driver.CurrentWindowHandle;
string targetWindowHandle = "";
foreach (string handle in driver.WindowHandles)
{
     if (handle != currentWindowHandle)
     targetWindowHandle = handle;
}
driver.Close();
driver.SwitchTo().Window(targetWindowHandle);

Надеюсь пример поможет.

Если нужно работать со старой вкладкой и нужно чтобы она была видна, попробуйте горячими клавишами переключиться на нее)




#140766 Вопросы и тестовые задания на собеседовании по Selenium

Отправлено автор: mazik7 17 апреля 2015 - 06:18 в Selenium - Functional Testing

 

 

Ну вот программирую на яве автоматизацию с вебдрайвером уже года полтора, и ни разу мне алгоритмы сортировки не пригодились. Может подскажете, где я их могу применить? А то вдруг я чего-то важное упускаю.

Можно проверяя сортировку на портале использовать свою сортировку с блэкджеком и профурсетками.

Вот за такое, надо бить по рукам, больно. Почти все языки имеют в наличии достаточно быструю, хорошо проверенную реализацию алгоритмов сортировки.

Писать при этом свою реализацию, бесполезная трата времени и ресурсов проекта, за исключением небольшого количества случаев.

 

Вырвали же предложение из контекста) Я сказал что "Можно", но отметил существование других способов.
 

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

 

 когда вы принимаете на работу специалистов по Selenium -- расскажите, как вы их оцениваете на собеседовании? какие каверзные вопросы задаёте, по которым можно отсеять людей, которые "не в теме"? какие тестовые задания предлагаете выполнить?

...
- отсортировать массив и т.д.; алгоритмы сортировки, примеры
...

Думаю именно с этой целью и производилась проверка.




#140737 Вопросы и тестовые задания на собеседовании по Selenium

Отправлено автор: mazik7 16 апреля 2015 - 01:38 в Selenium - Functional Testing

Ну вот программирую на яве автоматизацию с вебдрайвером уже года полтора, и ни разу мне алгоритмы сортировки не пригодились. Может подскажете, где я их могу применить? А то вдруг я чего-то важное упускаю.

Можно проверяя сортировку на портале использовать свою сортировку с блэкджеком и профурсетками.
Хотя для проверки есть способы и проще)




#140637 Selenium - проверка удаления элемента

Отправлено автор: mazik7 11 апреля 2015 - 04:02 в Selenium - Functional Testing

а почему бы не проверять через driver.findElements(...).size()? Если размер равен нулю - нет элемента. Если не равен, то проверяем отображается ли.

Проверка элемента через size чревата долгим ожиданием в случае если этот самый размер коллекции равен нулю. На сколько я понимаю в селениум есть таймаут на действие, так вот - если size > 0, то действие пройдет гораздо быстрее, иначе попытки поиска будут продолжаться в течении всего таймаута.




#140389 Не видит элементов на странице

Отправлено автор: mazik7 06 апреля 2015 - 07:48 в Selenium - Functional Testing

StackTrace выложите пожалуйста) Иначе ничем не поможем)




#139602 Сравнение значений

Отправлено автор: mazik7 28 февраля 2015 - 07:59 в Selenium - Functional Testing

Задача следующая: 
1. Вы грузите файл с именем <name>.

2. По окончании загрузки открывается форма.
Необходимо проверить, что в форме, в поле "Наименование" введено <name>.

 

Если это так, то просто заведите строковую переменную, куда вы будете присваивать имя файла. И сравнитe его с @value поля.

Для получения @value используйте GetAttribute.
driver.FindElement(By.XPath("//td[@id='videoItems']/table/tbody/tr[3]/td/input")).GetAttribute("value");

Метод GetAttribute вернет значение аттрибута value - строки введенной в input.

В противном случае, нужно больше пояснений.




#139583 Как вытащить значение селектора?

Отправлено автор: mazik7 27 февраля 2015 - 07:15 в Selenium - Functional Testing

То есть в вашем случае исключение ожидаемо, и вы хотите вытащить селектор? Вообще вроде как дефолтный Exception выкидывает эту информацию. Но - если хочется "я сам", то сделайте какую-нибудь обертку.

string xPath = "//*[@type='text']";
            try
            {
                UIDriver.driver.FindElement(By.XPath(xPath)).GetAttribute("textContent");
            }
            catch (NotFoundException)
            {
                
            }

Ну и в теле catch передавайте значение xPath куда хотите =)
Не факт кстати, что NotFoundException. 

Ах да, и пример шарповый приведен.




#139557 Как вытащить значение селектора?

Отправлено автор: mazik7 26 февраля 2015 - 02:33 в Selenium - Functional Testing

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

Не пробовали инспектировать элемент в браузере.
Так как это input - подозреваю, что необходимый лежит в теге @value. А значит достать текст можно с помощью метода getAttribute("value");

 

А значение по которому идентифицируется объект вы ведь и указываете, в конце концов)




#139393 Оптимальный способ получения значений из элементов

Отправлено автор: mazik7 20 февраля 2015 - 05:00 в Selenium - Functional Testing

Решение можно найти всегда.
Если вам необходимо получить значение всех селектов, то мне кажется нужно идти простым и напрашивающимся способом - то есть получить из каждой клетки. Узнал количество строк, запустил цикл и присвоил их в какую-нибудь коллекцию. Главное, что ничего не пропустишь. Как по мне распарсивание всего HTML-куска таблицы более трудозатратный способ.
Ну а что касается получение значения Selected option, то для надежности всегда можно посмотреть в каком аттрибуте хранится этот самый option. + ко всему обычно выбранный option имеет какой-то дополнительный аттрибут, с помощью XPath или CssSelector его не трудно будет выбрать. Да и класс Select вроде как позволяет получить это самое значение.




#138621 Exception при запуске Хрома - Chrome failed to start: exited normally

Отправлено автор: mazik7 28 января 2015 - 16:17 в Selenium - Functional Testing

В хэштегах написал же)




#138601 Exception при запуске Хрома - Chrome failed to start: exited normally

Отправлено автор: mazik7 28 января 2015 - 03:59 в Selenium - Functional Testing

Добрый день, господа автоматизаторы.

Недавно - где-то 10 дней назад в тестах Chrome при запуске стал выдавать неприятный Exception.

ChromeOptions options = new ChromeOptions();
options.AddArgument("start-maximized");
driver = new ChromeDriver(m_path_chrome, options, TimeSpan.FromSeconds(120));//Таймаут конечно лютый, но был установлен во времена чудачеств нашего сисадмина.

Слетает не всегда - 8 слетов на 120 запусков. На разных ОС Win8,8.1(x64,x86),Win7(x64).

Если кто сталкивался с такой проблемой и решил ее, то подскажите - буду рад помощи :)

 

Ах да, ну и StackTrace:

StackTrace:    at OpenQA.Selenium.Remote.RemoteWebDriver.UnpackAndThrowOnError(Response errorResponse) in c:\Projects\webdriver\dotnet\src\webdriver\Remote\RemoteWebDriver.cs:line 1126
   at OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters) in c:\Projects\webdriver\dotnet\src\webdriver\Remote\RemoteWebDriver.cs:line 920
   at OpenQA.Selenium.Remote.RemoteWebDriver.StartSession(ICapabilities desiredCapabilities) in c:\Projects\webdriver\dotnet\src\webdriver\Remote\RemoteWebDriver.cs:line 888
   at OpenQA.Selenium.Remote.RemoteWebDriver..ctor(ICommandExecutor commandExecutor, ICapabilities desiredCapabilities) in c:\Projects\webdriver\dotnet\src\webdriver\Remote\RemoteWebDriver.cs:line 89
 



#138424 Помогите составить xPath

Отправлено автор: mazik7 21 января 2015 - 05:26 в Selenium - Functional Testing

 

getDriver().findElements(By.xpath("//*[contains(@id,'MainContent_ucTradeLotInfoList')]")).size();

и на какой её вопрос вы ответили?

 

Я так понимаю что он решил ваш вопрос с получением количества) findElements - получает коллекцию элементов, а size(видимо) - возвращает их количество. Так как я использую C# то у меня вместо "size" количество возвращает "Count".




#138169 Помогите понять причину флоатинг "Unable to locate element" Ex

Отправлено автор: mazik7 10 января 2015 - 09:31 в Selenium - Functional Testing

Поиграйте с таймаутами) Для меня это вообще одно из любимейших занятий =D




#138168 Парсер. Поиск по фрагменту HTML кода.

Отправлено автор: mazik7 10 января 2015 - 09:28 в Selenium - Functional Testing

Не знаю как на счет IDE, но в Webdriver получить такую коллекцию возможно.Только скорее всего, решение задачи будет более простым). Необходимо идти совсем от другого. Нужно сначала найти блок, в котором содержится список блоков с песнями. А потом уже искать более точный путь для ссылки. Путь этот должен повторяться поэтому если не использовать уникальных идентификаторов - можно получить всю коллекцию с помощью FindElements и работать уже с этой коллекцией)




#138167 Клик по динамической ссылке

Отправлено автор: mazik7 10 января 2015 - 09:22 в Selenium - Functional Testing

Если это слайдер наподобии пагинатора, то обычно текущий слайд имеет уникальный класс. В случае с пагинатором достаточно идетифицировать блок в котором находится список страниц, найти текущюю и плясать от нее) Если это не так, то кусок кода в студию - будем разминать голову после выходных)




#137676 Время ожидания WebDriwer

Отправлено автор: mazik7 16 декабря 2014 - 02:14 в Selenium - Functional Testing

driver.Timeouts().ImplicityWait(TimeSpan.FromSeconds(time))// time - double

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

Webdriver wait - несколько сложенее в использовании. С его помощью можно дожидаться появления элемента в DOM.

Webdriver wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
wait.Until(ExpectedConditions.ElementExists(By.XPath(xPath))); //xPath - string.

- Здесь driver в течении 10 секунд будет ждать появления элемента, по истечении - exception.

Until в С# позволяет кроме ExpectedConditions использовать лямбда-выражения. А вот по ним я ничего пояснить не смогу)) Ибо не освоил (Уж больно синтаксис не привычен)




#137506 Не вводятся данные в поле

Отправлено автор: mazik7 10 декабря 2014 - 11:26 в Selenium - Functional Testing

Тест не падает, но данные не вводятся

Это означает что sendKeys принимает не тот объект который вы ожидаете.

Вы можете передать его кнопке, select'y, да и в тег <html> в конце концов.

 

Короче - проверьте селектор)




#137417 класс товара на странице каталога

Отправлено автор: mazik7 09 декабря 2014 - 02:09 в Selenium - Functional Testing

Мне кажется с этим не должно быть проблем.

В данной ситуации вся коллекция книг. Хранится в ul[@id='goods-table']. 

Чтобы получить количество всех книг получаешь число элементов:

int countOfBooks = driver.FindElements(By.XPath("//ul[@id='goods-table']/li")).Count;

А дальше по нисходящей(Восходящей), в цикле, проверяешь каждый элемент. Выбираешь путь до div[@id='item-type-card__cost'] и получаешь аттрибут textContent из тега <strike> в диве.

С помощью методов работы с текстом убираешь из тега ".руб" и пробелы и преобразуешь все это дело в int.

Ну а int уже сравниваешь с предыдущим.

 

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

 

Думаю в вашей ситуации отличий от данного магазина быть не должно. Хотя возможно разметка будет более сложная.




#137392 Как авторизоваться под двумя пользователями сразу?

Отправлено автор: mazik7 08 декабря 2014 - 13:00 в Selenium - Functional Testing

это было рассмотрено, но, ИМХО, слегка неудобно.

нет ли возможности авторизовать пользователей в разных окнах и переключаться по ним? например, сделать одно окно приватным?

Как написал BabyRoot, то в голову приходит именно идея с двумя экземплярами драйвера.

IWebDriver buyerdriver = new ChromeDriver();
IWebDriver sellerdriver = new ChromeDriver();

Ну а дальше я думаю понятно. С одним браузером я не пробовал, так как не было необходимости. А вот с IE в связке с остальными трудностей не было. Хотя их и не должно быть наверное. Сам junior, чего уж тут)




#137358 Неполное логирование эксепшинов (ReportNG; драйвер: GoogleChrome)

Отправлено автор: mazik7 08 декабря 2014 - 06:48 в Selenium - Functional Testing

Ясно( да одна из самых последних версий хромдрайвера. А что есть разница какая?

Можно сделать обертку и возбуждать свое исключение (с блэкджеком of course). Не знаю подойдет ли это к вашей задаче, но мы из-за неинформативности exception'a в хроме сделали именно так.

К примеру написать свой метод в котором завернуть FindElement в try. Ну а в текст исключения передавать необходимые вам параметры.





Яндекс.Метрика
Реклама на портале