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

Публикации mazik7

23 публикаций создано mazik7 (учитываются публикации только с 29 марта 2023)


#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. Ну а в текст исключения передавать необходимые вам параметры.