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

Публикации DennisM

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



#149316 Что дает использование PageFactory?

Отправлено автор: DennisM 11 марта 2016 - 20:33 в Selenium - Functional Testing

По опыту оно приносит больше вреда чем пользы. На соседнем проекте использовали это. Потом посмотрели на наш автомейшн и забили на PageFactory.
PageObject надо использовать, PageFactory нет..



#149295 Чтение Cucumber feature file из TFS

Отправлено автор: DennisM 10 марта 2016 - 19:47 в Автоматизированное тестирование

Ого, сколько мы знаем;)

Нормальный боевой набор. :)




#149297 Чтение Cucumber feature file из TFS

Отправлено автор: DennisM 10 марта 2016 - 20:16 в Автоматизированное тестирование

То есть, у вас есть TFS в котором хранятся тест-кейсы, которые вы хотите выполнять некоторой внешней системой, которая никак не интегрируется с TFS напрямую и дирижировать всем этим поставите дженкинс....

 

Во! сами объяснили. Прямой интеграции нет, соответственно нужна выгрузка и выполнение. Выполнение не проблема. Выгрузка - надо копать API конкретных систем TFS и Jira. в Jira точно есть все что нужно, а вот в TFS - гуглите, читайте доки, ищите API. Курите msdn. 

Вот нашлось с ходу, то есть API есть.

https://msdn.microso...(v=vs.120).aspx

 

ЗЫ: тесты все-таки выполняют или исполняют, не извлекают.

 

ЗЗЫ: жутко интересно, какая фраза на английском на русский у вас перевелась как извлечение теста? 

Вот шаг между TFS и кукумбером вызывал затруднения. 
Если курить мануалы, то и форум не нужен. ;) Думал у кого-то был такой опыт.
Бум курить...
 
Мой родной язык русский. Я сам оригинально из РБ. :)
Наши тут вроде так по русски и говорят друг-другу "извлечь" - execute.  хм... Не задумывался...
Хотя в данном контексте их надо выколупать из TFS...



#149294 Чтение Cucumber feature file из TFS

Отправлено автор: DennisM 10 марта 2016 - 19:46 в Автоматизированное тестирование

 

 

Выйдите из своего контекста, войдите в положение людей ни разу в вашем контексте не бывших и спросите еще раз.

Эээ...
Мне обьяснить что такое Selenium Webdriver, https://en.wikipedia...enium_WebDriver
Что такое Cucumber BDD    https://en.wikipedia...mber_(software)
Что такое Jenkins, https://en.wikipedia...kins_(software)
Что такое TFS (Team Foundation Server), https://en.wikipedia...undation_Server
Что такое Maven, https://en.wikipedia...ki/Apache_Maven
И потом задавать вопрос? :)

 

 

Только давайте без нервов :)  Оригинальный вопрос действительно сформулирован непонятно.

 

 

Есть TFS. Там тесткейс написан в формате Gherkin.
Возможно-ли как-то его читать c TFS и извлекать селениум тесты с кукумбером?
То же самое может быть и с Jira. 
 
Это чтобы мануалы писали тесты прямо в TFS или Jira. Автомейшн читал оттуда по расписанию и запускал.



#149299 Чтение Cucumber feature file из TFS

Отправлено автор: DennisM 10 марта 2016 - 20:29 в Автоматизированное тестирование

Вот нашлось с ходу, то есть API есть.

https://msdn.microso...(v=vs.120).aspx

 

Этот вариант не прокатит. Фреймворк написан на Java.




#149285 Чтение Cucumber feature file из TFS

Отправлено автор: DennisM 10 марта 2016 - 14:39 в Автоматизированное тестирование

Выйдите из своего контекста, войдите в положение людей ни разу в вашем контексте не бывших и спросите еще раз.

Эээ...
Мне обьяснить что такое Selenium Webdriver, https://en.wikipedia...enium_WebDriver
Что такое Cucumber BDD    https://en.wikipedia...mber_(software)
Что такое Jenkins, https://en.wikipedia...kins_(software)
Что такое TFS (Team Foundation Server), https://en.wikipedia...undation_Server
Что такое Maven, https://en.wikipedia...ki/Apache_Maven
И потом задавать вопрос? :)



#149254 Чтение Cucumber feature file из TFS

Отправлено автор: DennisM 09 марта 2016 - 19:15 в Автоматизированное тестирование

Можно-ли читать тест-кейс из TFS из извлекать его через Cucumber так же как из .feature файла?

Например тест кейс записан в gherkin формате:

 

Given ...

When ...

Then ...

 

Во время билда, перед извлечением тестов взять TFS тест кейс, записать в локальную директорию и извлечь с помощью Cucumber?




#148950 Помогите новичку!

Отправлено автор: DennisM 29 февраля 2016 - 14:34 в Selenium - Functional Testing

//button/div/span[text() = 'Войти' or text() = 'Войтi' or text()='ENTER']

 

по вкусу добавь еще "or text()='bla-bla-Language'"  :)

 

проверил страницу. Там уже новые слова.

 

//button/div/span[text() = 'Войти' or text() = 'Увійти' or text()='Log In']

 

и страница кривая. Эти кнопки ХЗ где и не видны... Но XPath работает. ;)




#150050 Поиск элемента, если в class содержится несколько слов, разделенных пр

Отправлено автор: DennisM 04 апреля 2016 - 14:26 в Selenium - Functional Testing

//div[@class='headline']//h1

//div[contains(@class,'headline')]//h1[contains(@class,'title')]

//div[contains(@class,'product-card')]//h1[contains(@class,'title')]

И т.д.... :)




#148722 Ошибка в Selenium WebDriver

Отправлено автор: DennisM 19 февраля 2016 - 16:30 в Selenium - Functional Testing

Поддерживаю про XPath.

такое дело: "//table/tbody/tr[1]/td[3]//table/tbody/tr/td[5]"  самое ужасное что можно придумать.

Вбей это в Firepath и оцени сколько элементов нашлось.

 

или проверь в коде типа:

int elements = driver.findElements(By.xpath("//table/tbody/tr[1]/td[3]//table/tbody/tr[1]/td[5]")).size();

если более 1, то кури мануал по Xpath, или давай сюда хтмл страницы.




#152310 Не скроллится экран при попытке клика на элемент

Отправлено автор: DennisM 29 июня 2016 - 15:39 в Selenium - Functional Testing

Были такие грабли. Скроллится отлично этим:

 

import org.openqa.selenium.interactions.Actions;

 

***

 

Actions mouse = new Actions(driver);

mouse.moveToElement(driver.findElement(element_locator)).build().perform();  




#151551 Не находится элемент для события click().

Отправлено автор: DennisM 27 мая 2016 - 16:08 в Selenium - Functional Testing

 

Код:

 

            waitmis.Until(ExpectedConditions.ElementExists(By.XPath("//html/body/div[1]/div[1]/ul/li[1]/ul/li[2]/a")));
            var search = Driver.FindElement(By.XPath("//html/body/div[1]/div[1]/ul/li[1]/ul/li[2]/a"));
 

 

 

За такие XPath нужно линейкой по пальцам бить!




#151679 Локатор для кнопки попапа с динамическим ID

Отправлено автор: DennisM 02 июня 2016 - 13:36 в Selenium - Functional Testing

Вот что лень делает с тестировщиками... ID еще подавай с голубой каемочкой. Девелоперам без вас хватает мозготр!@%а. ;)




#150431 Локатор для кнопки попапа с динамическим ID

Отправлено автор: DennisM 14 апреля 2016 - 13:47 в Selenium - Functional Testing

 

 

Нефиг тут бюрократию ворошить. Хуже будет!
 
Вот несколько примеров:
 

//div[contains(@id, 'popup') AND @class="buttons"]/button[text()='OK']

//div[@class="buttons"]/button[text()='OK']

//div[@class="buttons"]/button[1]

 

Спасибо за примеры! По всем 3-м к сожалению находится ещё 3-5 вариантов, соответственно локатор ссылается не на то что нужно. Пока честно говоря не знаю что делать, т.к. сроки есть, а разумным решением видится действительно продавливание разработчиков в сторону статичных id

 

я не вижу кода всей страницы. Можно было бы сочинить что-нибудь точнее.




#150429 Локатор для кнопки попапа с динамическим ID

Отправлено автор: DennisM 14 апреля 2016 - 13:38 в Selenium - Functional Testing

 

Нефиг тут бюрократию ворошить. Хуже будет!

Окей, продолжаем увлекательный забег по граблям :)

 

У меня на проекте нет вообще id и всё работает норм. Те кто требуют id или неопытные или ленивые... ;)




#150432 Локатор для кнопки попапа с динамическим ID

Отправлено автор: DennisM 14 апреля 2016 - 13:52 в Selenium - Functional Testing

Вполне может быть что у тебя в коде несколько окон и на данный момент теста только одно видимое. Добавляем условие contains(@style, 'display: block')

 

//div[contains(@id, 'popup') AND contains(@style, 'display: block')]//div[@class="buttons"]/button[text()='OK']




#150427 Локатор для кнопки попапа с динамическим ID

Отправлено автор: DennisM 14 апреля 2016 - 13:16 в Selenium - Functional Testing

Нефиг тут бюрократию ворошить. Хуже будет!
 
Вот несколько примеров:
 

//div[contains(@id, 'popup') AND @class="buttons"]/button[text()='OK']

//div[@class="buttons"]/button[text()='OK']

//div[@class="buttons"]/button[1]




#148289 Какой максимум тестов можно кинуть в Selenium GRID в параллели?

Отправлено автор: DennisM 02 февраля 2016 - 17:06 в Selenium - Functional Testing

Заметил в отчете что фейлятся тесты которые уже прошли. Грид выполнил тест на одной ноде и бросил на второй? О_о
 
Test Name                   Duration         Age
........ 
.......
Test6_StackMenu[3]     2 min 2 sec    1
Test6_StackMenu[3]     0 ms               1
Test6_StackMenu[0]     7 min 19 sec   1

 

Test6_StackMenu[0]     0 ms                1

......

.....




#148254 Какой максимум тестов можно кинуть в Selenium GRID в параллели?

Отправлено автор: DennisM 01 февраля 2016 - 18:06 в Selenium - Functional Testing

Интерестно  то, что если запустить всё на одну Ноду, то тесты проходят нормально. Похоже Грид не может аккуратно раскидать тесты на 2 ноды.
Для ограничения нагрузки на Грид, делал так же ограничение в   POM.XML. Не помогло...
Вижу решение только в уменьшении нагрузки (делать больше Джабс на Jenkins с меньшим количеством тестов в каждом) или раннить только на одной ноде. Но тогда теряется смысл Грида - раскидать тесты в параллели для уменьшения времени.
 
<build>
<plugins>
 
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<configuration>
 
<includes>
<include>**/StackChecking.java</include>
</includes>
 
<parallel>all</parallel>
<threadCount>15</threadCount>
<argLine>-Xmx512m -XX:MaxPermSize=256m</argLine>
</configuration>
</plugin>
 
</plugins>
</build>



#148286 Какой максимум тестов можно кинуть в Selenium GRID в параллели?

Отправлено автор: DennisM 02 февраля 2016 - 14:03 в Selenium - Functional Testing

 

<threadCount>15</threadCount>

Судя по конфигурации, у вас по 10 браузеров разного типа, т.е. 15 потоков это на 5 больше, чем может выделить хаб, при условии, если вы используете стандартный паттерн WebDriverFactory.

Т.е. вам нужно делать количество потоков не больше, чем указано здесь:

-browser "browserName=chrome, maxInstances=10

 

Даже если там вот так: 
 
<parallel>all</parallel>
<useUnlimitedThreads>true</useUnlimitedThreads>
<parallelOptimized>true</parallelOptimized>
 
Результат тот же. На одной ноде всё ОК, на одновременно 2 начинает падать в случайном порядке.
 
Иногда в логе просто это:
Stacktrace java.lang.NullPointerException

 

С одной нодой этот тест проходит.




#148291 Какой максимум тестов можно кинуть в Selenium GRID в параллели?

Отправлено автор: DennisM 02 февраля 2016 - 21:47 в Selenium - Functional Testing

Да.... Похоже JUnit (Parameterized) не работает коректно с Selenium Grid...




#148198 Какой максимум тестов можно кинуть в Selenium GRID в параллели?

Отправлено автор: DennisM 29 января 2016 - 16:01 в Selenium - Functional Testing

Есть Datadriven тесты и их много. Один сет на 200 второй на 500 тестов. При запуске 200 и более в параллели Grid медленно умирает. На нодах появляются браузеры и никакого движения внутри.  При запуске ~150 в параллели вроде всё работает но много тестов валятся не начавшись. Лимит на 2 нодах по 10 браузеров, т.е. 130 в ожидании сразу висят.

 

Error Message

Error forwarding the new session Error forwarding the request Read timed out
Command duration or timeout: 1110.85 seconds
Build info: version: '2.49.0', revision: '365eeb44deba2067b1761c8862ef21d55250e063', time: '2016-01-13 11:57:39'
System info: host: 'Jenkins', ip: '192.168.3.220', os.name: 'Windows 8.1', os.arch: 'x86', os.version: '6.3', java.version: '1.8.0_65'
Driver info: org.openqa.selenium.remote.RemoteWebDriver

 

Stacktrace

org.openqa.selenium.WebDriverException:
Error forwarding the new session Error forwarding the request Read timed out
Command duration or timeout: 1110.85 seconds
Build info: version: '2.49.0', revision: '365eeb44deba2067b1761c8862ef21d55250e063', time: '2016-01-13 11:57:39'
System info: host: 'Jenkins', ip: '192.168.3.220', os.name: 'Windows 8.1', os.arch: 'x86', os.version: '6.3', java.version: '1.8.0_65'
Driver info: org.openqa.selenium.remote.RemoteWebDriver
    at com.expion.test.Test.AllServers.Test1(AllServers.java:297)
Caused by: org.openqa.grid.common.exception.GridException: Error forwarding the new session Error forwarding the request Read timed out

 

 

Конфигурация:

 

Java + Selenium 2.50.0 (WebDriver) + JUnit(Parameterized) + Maven(POM Parallel) -> Jenkins :)

 

Grid Hub:

java -jar c:\Jenkins\SeleniumGrid\selenium-server-standalone-2.50.0.jar -port 4444 -role hub -nodeTimeout 1000 -browserTimeout 10000

 

Grid Node:

java -Dwebdriver.chrome.driver=c:\Jenkins\SeleniumGrid\chromedriver.exe -Dwebdriver.ie.driver=c:\Jenkins\SeleniumGrid\IEDriverServer.exe -jar c:\Jenkins\SeleniumGrid\selenium-server-standalone-2.50.0.jar -role node -hub http://192.168.3.220...4/grid/register -port 5555 -maxSession 10 -browser "browserName=firefox, version=exp_auto_1, maxInstances=10" -browser "browserName=iexplore, maxInstances=10" -browser "browserName=chrome, maxInstances=10"




#148255 Какой максимум тестов можно кинуть в Selenium GRID в параллели?

Отправлено автор: DennisM 01 февраля 2016 - 18:11 в Selenium - Functional Testing

Машины мощщщные? где тесты запускаете?

Максимум 5-6 потоков надо ставить.

Все виртуалки. По 8 CPU дано каждой. С 10 браузерами в параллели нагрузка 70-80%




#149169 Как найти то чего нет?

Отправлено автор: DennisM 04 марта 2016 - 14:34 в Автоматизированное тестирование

Можно написать что-нибудь свое...
 
public boolean CheckForNotElement(By by, String FailText) throws Exception
{
 driver.manage().timeouts().implicitlyWait(1, TimeUnit.SECONDS);
 if (!driver.findElement(by).isDisplayed()){
   System.out.println(FailText);
   driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
return false;
} else
{
 driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
 return true;
}
}



#152374 Как записать действия без использования плагина рекордера?

Отправлено автор: DennisM 01 июля 2016 - 17:50 в Selenium - Functional Testing

Без рекордера только на бумажку шариковой ручкой (карандашом если для дебага).