Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Mantis - открытие картинок



Software-Testing.Ru - портал тестировщиков  

Новые темы форума тестировщиков


Mantis - открытие картинок
2014-10-22 11:41

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



Бесплатный вебинар с рассказом про конференцию разработчиков высоконаг
2014-10-22 12:28

Бесплатный вебинар с рассказом про конференцию разработчиков высоконагруженных систем HighLoad++

Мы расскажем обо всём: программе, ключевых докладчиках, изменениях в формате, работе с экспертами, спонсорах, подарках - обо всём, что ждёт вас на мероприятии. Также ответим на все вопросы по докладам, расписанию и организации!

Подобный вебинар проводится впервые!

Такое вложение, как покупка дорого билета на двухдневную конференцию, требует обдумывания и ответов на множество вопросов. Мы готовы эти ответы предоставить!

da079dda-fc45-4a7f-b630-70bb9af8df10.jpg

В ближайшую среду (это СЕГОДНЯ), 22 октября, в 19:00 по Московскому времени состоится бесплатный вебинар, где все темы HighLoad++ будут полностью раскрыты.

* Мы подробно рассмотрим программу конференции, Программный комитет опишет ключевые доклады и расскажет о программе в целом;
* Мы расскажем об учебном треке, зачем его ввели и что в него войдёт;
* Эксперты и консультации у экспертов - как этим пользоваться и почему это самая крутая идея за последние несколько лет;
* Мы расскажем, почему в этом году мы изменили схему работы со спонсорами и к чему это привело;
* Западные докладчики, влияют ли на нас санкции и кого мы пригласили в этом году;
* И ответим на любые организационные вопросы;
* И вообще все, что вы хотели спросить, но не спрашивали, потому что такой опции просто не было. Теперь — есть!

Мы ответим на все вопросы о том, что вас ждёт в конце октября на крупнейшей IT-конференции Европы.

Регистрация и доступ

Регистрация бесплатна, но обязательна. Это мы делаем исключительно потому, что не всякий сервис вебинаров в России выдержит наш трафик. Надо знать, сколько нас будет :)

Ссылка на комнату с вебинаром

До встречи на вебинаре!



отловить нажатие кнопки
2014-10-22 19:00

добрый день

есть вопрос:
можно ли отловить определенное нажатие кнопки через силениум, например если я запускаю браузер и нажимаю определенную кнопку на сайте то должно состояться определенная действие (например силениум пропускает тесты на етой странице)

 

спасибо



Как проверить на соответствие URL страницы
2014-10-22 22:22

Здравствуйте! ОЧень нужна помощь! Никак не могу понять, как сделать так, чтобы при открытии веб-страницы ее URL адрес можно было проверить на совпадение?

Т.е. например открыли мы какую-нибудь страницу вакансии на сайте hh.ru, затем нам нужно сравнить, является ли данный URL страницей вакансии, т.е. он должен иметь такой адрес: http://spb.hh.ru/vacancy/

Использую selenium webdriver и библиотеку JUnit.

Я предполагаю, что нужно как-то скопировать адрес этой вакансии и проверить его assertом, но я не знаю как скопировать. Помогите пожалуйста!

Всем большое спасибо за ответы!



Тестирование защищенности веб-приложений, начало 28 ноября
2014-10-23 10:44

Онлайн-тренинг (4 занятия) с домашней работой

Начало: 28 ноября

Тестирование веб-приложений интересно тем, что оно требует наиболее широкого владения различными видами тестирования. Одно из ключевых мест занимает тестирование защищенности (security testing) или проверка отсутствия известных уязвимостей.

Почему тестирование защищенности имеет такое большое значение именно для веб-приложений?

  1. Веб-приложения ориентированы на массовое использование, поэтому сбои в работе, вызванные действиями злоумышленника, могут оказать негативное воздействие на большое количество ни в чём неповинных пользователей.
  2. Веб-приложения могут хранить конфиденциальную информацию, утечка этих данных может иметь очень серьёзные последствия.
  3. Доступ к веб-приложению имеет множество “недоверенных” пользователей, при этом владельцы или разработчики приложения как правило не могут контролировать или ограничивать их действия.
  4. Обмен информацией между браузером и сервером происходит по открытым каналам с использованием открытых протоколов, поэтому сложно контролировать данные, передаваемые клиентами.
  5. Разработка веб-приложений не всегда ведётся с должным вниманием к обеспечению защищенности и надёжности, потому что рынок в первую очередь требует “быстро”!

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

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

Подробная программа и условия участия


Читать дальше

Школа успешных тестировщиков, начало 10 ноября
2014-10-23 10:45

Онлайн-тренинг, 6 занятий, тренер Наталья Руколь

Вы работаете в тестировании, хотите развиваться и достигать новых высот? Хотите заполнить пробелы в знаниях, получить структурированное представление обо всех аспектах тестирования и получить ключ к успешному построению карьеры? Мы создали для вас шестинедельный онлайн-курс с домашними заданиями – школу успешных тестировщиков! Благодаря Школе Вы сможете:

  • Построить успешную карьеру и быстро достигнуть желаемых целей
  • Получить широкий кругозор в сфере тестирования
  • Стать признанным профессионалом в своей области
  • Узнать возможные пути развития и инструкции по ним
  • Решать на работе более интеллектуальные и творческие задачи
  • Стать востребованным на рынке специалистом
  • Получить полезные профессиональные связи и просто познакомиться с массой позитивных людей.

Для достижения вышеперечисленных целей, мы структурировали и понятно и интересно «упаковали» материал. Но помимо материала, потребуются ваши активное участие, выполнение небольших домашних заданий и стремление к самосовершенствованию. Поэтому, в группу приглашаются активные, позитивные и целеустремлённые! Мы дадим вам всю необходимую информацию и конкретные простые инструкции для достижения новых высот, при этом постараемся сделать процесс и задачи максимально интересными!

Подробная программа и условия участия


Читать дальше

Test Complete и утечки памяти
2014-10-23 14:11

Всем привет!

Занимаюсь автоматизацией одного приложения, написанного на WPF. Столкнулся с жуткими утечками памяти, за 4 часа около 2х гигов. Кто-нибудь сталкивался с таким поведением? Можно ли с этим как-то бороться? Или это специфика тест комплита при работе с WPF приложениями?

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

TC 10

Win7

 



Онлайн-интенсив для начинающих тестировщиков, начало 24 ноября
2014-10-27 10:58

Теперь кроме описанного ниже недельного формата, доступен трехнедельный формат интенсива.

Минимум теории, максимум практики!

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

Легко? Нет!

Эффективно? Очень!

Курс создан ради того, чтобы переворачивать мышление. Занятия каждый день дают идеальный эффект погружения в тестирование на реальном проекте.

Уже дважды наши ученики устраивались на работу в середине курса, благодаря первым 3 урокам! Присоединяйся к ним!

ВАЖНО!

Онлайн-интенсив хорош тем, что всего за неделю мы отрабатываем основные навыки, которые нужны тестировщику. При этом на целую неделю вы становитесь тестировщиком реального проекта, а не абстрактного карандаша. Каждое домашнее задание основано «на реальных событиях»!

Каждый день в течение недели у вас будет:

  • 15-25 минут теории (видеозапись)

  • 3-4 часа практики (домашние задания)

НО!

Это будет неделя интенсивной работы. Придется поднапрячься, но оно того стоит! Правила жесткие – не получил приемлемую оценку спустя сутки после выкладки ДЗ, вылетел с курса. Поблажек не будет.

Подробности...


Читать дальше

Школа тест-менеджеров, начало 1 декабря и пример первого занятия
2014-10-27 10:59

Онлайн-тренинг, 8 занятий, начало 1 декабря

Тренер: Наталья Руколь.

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

Школа Тест-Менеджеров – двухмесячный глубокий курс, проходящий в онлайн-формате. Каждую неделю мы рассматриваем новую тему, после чего вы выполняете по ней домашнее задание. Все задания применяются на практике, поэтому, если в данный момент вы ещё не руководите командой, прохождение тренинга будет не очень эффективным и не рекомендуется.

Чем данный формат обучения отличается от стандартных тренингов и семинаров?

Как всем известно, теория не очень хорошо уживается в нашем сознании без опыта, практики. Для выработки новых навыков и умений требуется время, опыт. Именно поэтому широкую распространённость во всех сферах образования получили тренинги, позволяющие отработать полученный материал на практике, во время образовательного процесса.

Но на тренингах обычно не хватает времени для практики, и условия для практики слишком искусственные.

Поэтому мы создаём новый формат обучения: школа.

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

Всё это время Вас по почте поддерживает тренер, проверяя домашнюю работу и помогая решить сложившиеся в процессе использования сложности.
В результате:

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

Подробная программа и условия участия


Читать дальше

Школа Тест-Аналитика, онлайн, 16 занятий, начало 1 декабря
2014-10-27 10:59

Тренер: Наталья Руколь

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

  • как нам протестировать эту фичу?
  • за что взяться в этом продукте?
  • что важно тестировать именно в этой итерации?
  • как нам успеть проверить всё самое важное?

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

Подробная программа и условия участия


Читать дальше

Очные тренинги по тестированию ПО на февраль 2015 года
2014-10-27 11:16

Иногда компании жалуются, что им сложно сформировать план обучения на год , потому-что в нашем расписании представлены тренинги только на два-три месяца вперед.

Но формировать план обучения на год в формате онлайн-тренингов просто. Обычно мы знаем в какие месяцы будем запускать тот или иной онлайн-тренинг, а так как тренинги длинные -- от трех недель до двух месяцев, то точные даты роли не играют. Если вам необходимо сформировать план обучения на следующий год, просто напишите на trainings@software-testing.ru, сообщите сколько участников на какие тренинги вам хотелось бы отправить в следующем году и мы предоставим примерное расписание тренингов на год.

С очными тренингами сложнее, здесь важно знать точные даты, поэтому сейчас мы заранее публикуем расписание очных тренингов по тестированию ПО на февраль 2015 года. Ниже полный список, планируйте заранее и записывайтесь:

Как искать и находить баги?
5-6 февраля 2015 года, Москва Selenium 2.0 + Java: быстрый старт
12 февраля 2015 года, Москва Тестирование производительности: JMeter
13 февраля 2015 года, Москва Тестирование методом свободного поиска (exploratory testing)
19 февраля 2015 года, Санкт-Петербург Тест-дизайн от А до Я
20 февраля 2015 года, Санкт-Петербург Автоматизация функционального тестирования
21 февраля 2015 года, Санкт-Петербург

А для крупных компаний, которым нужно обучить много сотрудников предлагаем корпоративное обучение. В этом случае компания может выбирать подходящие даты и темы.


Читать дальше

Инструменты для тестирования производительности
2014-10-27 12:34

Привет всем.

 

Давайте соберём все возможные тулы, для тестирования производительности в одном месте.

 

Напишите, пожалуйста, какие инструменты (приложения, тулы) вы юзаете для тестирования производительности и их преимущества на ваш взгляд?

 

В своей практике я использую, jmeter, visual studio, loadrunner.



Jmeter и HTTP запросы
2014-10-27 17:42

Всем доброго здравия.

 

Есть вопрос ко всем. Буде рад, если поможете.

 

 

В общем необходимо протестировать API. На сервере есть запросы как post/get.

 

При использовании HTTP запроса авторизации, в ответе приходит информация которая не сильно то и важна. Но есть информация, которая в Response headers нужна для использования в следующих запросах. А именно cookie. 

Информация которая нужна:

Set-Cookie: user_token=dc63f1dbab12fcb3b1f57b057d1eddc8; expires=Mon, 27-Oct-2014 15:33:48 GMT; Max-Age=3600; path=/

 

Пытался использовать HTTP Cookie Manager, но так и не смог вытащить cookie.

 

Подскажите как использовать cookie в следующих запросах HTTP. Если есть какие то другие предложения, буду рад.

 



FailedToInitializeTestData при запуске теста
2014-10-28 12:09

Добрый день.Пытаюсь разобраться как подтягивать данные из csv-файла для заполнения поп-апа регистрации. В чем может быть проблема ? При запуске теста выдает ошибку инициализации:

net.thucydides.core.csv.FailedToInitializeTestData: No properties or public fields matching the data columns were found or could be assigned for the class project.SiteTesting.pages.SiteTestusing test data: {PASSWORD=qwer1234, CONFIRMPASSWORD=qwer1234, EMAIL=test@test.com}

Datadoc выглядит так

EMAIL,PASSWORD,CONFIRMPASSWORD 
test@test.com, qwer1234, qwer1234 
test1@test.com, pass12, pass13 
test2@test.com, #@#@#, ****

тестовый класс

import net.thucydides.core.annotations.Managed;
import net.thucydides.core.annotations.ManagedPages;
import net.thucydides.core.annotations.Steps;
import net.thucydides.core.pages.PageObject;
import net.thucydides.core.pages.Pages;
import net.thucydides.junit.annotations.UseTestDataFrom;
import net.thucydides.junit.runners.ThucydidesParameterizedRunner;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.openqa.selenium.WebDriver;

@RunWith(ThucydidesParameterizedRunner.class)
@UseTestDataFrom("D:/WorkS/SiteTesting/src/main/java/project/SiteTesting/pages/Datadoc.csv")
public class SiteTest extends PageObject {

	@Managed
	public WebDriver driver;

	@ManagedPages(defaultUrl = "blabla.com")
	public Pages pages;

	@Steps
	public RegistrationPopupPage popupPage;

	@Test
	public void testSite() {
		popupPage.startBrowser();
		popupPage.openRegistrationPopup();
		popupPage.setEmail();
		popupPage.setPassword();
		popupPage.setConfirmPassword();
	}
}

степы

public class RegistrationPopupPage extends ScenarioSteps {

AllElementsOfRegistrationPopup popup;

private String email;
private String password;
private String confirmpassword;

public RegistrationPopupPage(final Pages pages) {
	super(pages);
}
@Step
public void startBrowser() {
	final RegistrationPopup loginPage = getPages().get(RegistrationPopup.class);
	loginPage.open();
}
@Step
public void openRegistrationPopup() {
	popup.clickRegistrationButton();
}
@Step
public void setEmail() {
	popup.setEmail(email);
}
@Step
public void setPassword() {
	popup.setPassword(password);
}
@Step
public void setConfirmPassword() {
	popup.setConfirmPassword(confirmpassword);
}
}

элементы поп-апа

public class AllElementsOfRegistrationPopup extends PageObject {

private String email;
private String password;
private String confirmpassword;

@FindBy(css = "span.left")
private WebElement REG_BUTTON;

@FindBy(id = "email")
public WebElement emailField;

@FindBy(id = "Password_first")
private WebElement passwordFirstField;

@FindBy(id = "Password_second")
private WebElement passwordSecondField;

public void clickRegistrationButton() {
	element(REG_BUTTON).click();
}

public void setEmail(final String email) {
	element(emailField).sendKeys(email);
	this.email = email;
}

public void setPassword(final String password) {
	element(passwordFirstField).sendKeys(password);
	this.password = password;
}

public void setConfirmPassword(final String confirmpassword) {
	element(passwordSecondField).sendKeys(confirmpassword);
	this.confirmpassword = confirmpassword;
}
}


Установка selenium для java
2014-10-28 16:58

Привет!

 

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

 

По ссылке http://selenium-release.storage.googleapis.com/index.html?path=2.44/

 

Спасибо.



QA на первой сборке есть или нет?
2014-10-28 22:04

Интересуют ваши мысли.
Недавно был спор: есть ли QA на первой сборке? или же там только тестирование и QC?



Jmeter и TCP Sampler
2014-10-29 09:56

Есть сервер который необходимо проверить. При отправке запросов на сервер используются запросы, которые делятся на заголовок и тело. Первые 9 байт отводятся под заголовок: версия протокола, идентификатор, длинна.

 

OFFSET LEN(BYTES) DESCRIPTION
00 1 Protocol vertion
01 4 Packet identifier (uniq, random)
05 4 Data length
09 / Data

 

Для общения с сервером используются бинарные данные. Для этого использую org.apache.jmeter.protocol.tcp.sampler.BinaryTCPClientImpl.

 

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

 

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

 

Как решить такую головоломку? Если мой подход не верен, то предлагайте свои варианты.



Передача options в capabilities Chrome - WebDriverFactory
2014-10-29 11:16

Добрый день коллеги. Использую проект из архетипа Алексея Баранцева
удобный архетип

Возникла у меня следующая проблема. При запуске Хрома, вверху браузера висит информационное сообщение - 

You are using an unsupported command-line flag: --ignore-certifcate-errors. Stability and security will suffer.

И вроде не велика печаль, но тесты падают иногда из-за того, что проскроллив вниз страницы - некоторые элементы скрываются за этой надписью. Решение находится быстро:

System.setProperty("webdriver.chrome.driver","<<your chrome path>>");
// To remove message "You are using an unsupported command-line flag: --ignore-certificate-errors.
// Stability and security will suffer."
// Add an argument 'test-type'
DesiredCapabilities capabilities = DesiredCapabilities.chrome();
ChromeOptions options = new ChromeOptions();
options.addArguments("test-type");
capabilities.setCapability("chrome.binary","<<your chrome path>>");
capabilities.setCapability(ChromeOptions.CAPABILITY, options);

driver = new ChromeDriver(capabilities);

Но просто определять имя capabilities и его значего в архетипе несложно, а вот можно ли туда передать как то аргументы options? Может кто то сталкивался с такой оказией?



Книга critical testing processes на английском
2014-10-29 18:22

Добрый день, друзья :)

Будьте так добры, скинуть книгу critical testing processes на английском. Мои поиски были безуспешны. 

 

Буду очень благодарен! :)

 

romkje@i.ua



не могу подключиться к серверу через ssh и spring
2014-10-30 11:23

Привет,

может кто знает, не могу подключиться к серверу, через ssh

через путти все работает.

SEVERE: Cannot connect to q1@srv01
com.jcraft.jsch.JSchException: Auth cancel
    at com.jcraft.jsch.Session.connect(Session.java:490)
    at com.jcraft.jsch.Session.connect(Session.java:162)
    at com.db.selenium.SSH.init(SSH.java:28)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1612)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1553)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1483)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1391)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1132)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:607)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
    at com.db.selenium.StartSelenium.main(StartSelenium.java:26)

property file:

 

ssh.url=srv01 ssh.port=22 ssh.username=q1

ssh.password=q1

 

 

main.xml file :

 

 

<bean name="ssh" class="com.db.selenium.SSH" init-method="init">             <property name="remotePlaybackPath" value="${ssh.playback.path}"/>             <property name="session" ref="sshSession"/>

</bean>

 

 

java class

private void init() {
        log.debug("StrictHostKeyChecking = " + JSch.getConfig("StrictHostKeyChecking"));
        try {
            session.connect(); //exception
        } catch (JSchException e) {
            String msg = "Cannot connect to " + session.getUserName() + "@" + session.getHost();
            log.fatal(msg, e);
            throw new RuntimeException(msg, e);
        }
        if (remotePlaybackPath == null || remotePlaybackPath.length() == 0) {
            String msg = "Empty recording path";
            log.fatal(msg);
            throw new RuntimeException(msg);
        } else if (remotePlaybackPath.charAt(remotePlaybackPath.length() - 1) != '/') {
            remotePlaybackPath += '/';
        }
    }

Может кто знает в чем проблема?

Спасибо.

 



Как в Selenium IDE сделать команду с возможность &#34;ИЛИ&#34;
2014-10-30 15:17

Добрый день! На первый взгляд, все очень просто. Мне нужно проверить, что бы на страницы был текст  "А"  или  "Б". Как это можно сделать с помощью verefyText или другой иной команды? 

Заранее благодарен!

 



Teamcity + Maven + WebDriver + Java: падают тесты
2014-10-30 21:11

Добрый вечер. 

Автоматизацией давно не занималась, да снова пришлось вспомнить былое. 

 

Есть:

- автотесты на java в одном репозитарии гита,

- проект на PHP в другом репозитарии гита,

- установленный на машине #1 Teamcity 8.1.5 (build 30240),

- на машине #2 установлены: агент тимсити, ubuntu 12.04, jdk 1.7, maven 3, Xvfb, google chrome и firefox последних стабильных версий. 

 

Тесты локально на windows-машине запускаются, гоняются, выдают отчет в surefire. 

На удаленной машине сначала htmlunitdriver отрабатывает нормально, но как только вызывается хром/фф драйвер - падают с разными ошибками. Часть победила, эти не поддаются, к сожалению. 

 

Часть 1. Chrome

[18:45:35][com.project:tests] Tests run: 246, Failures: 2, Errors: 0, Skipped: 243, Time elapsed: 383.296 sec <<< FAILURE! - in TestSuite
[18:45:35][com.project:tests] beforeMethod(com.blamper.tests.UserPageTests)  Time elapsed: 62.175 sec  <<< FAILURE!
[18:45:35][com.project:tests] org.openqa.selenium.WebDriverException: chrome not reachable
[18:45:35][com.project:tests]   (Driver info: chromedriver=2.12.301324 (de8ab311bc9374d0ade71f7c167bad61848c7c48),platform=Linux 2.6.32-22-pve x86) (WARNING: The server did not provide any stacktrace information)
[18:45:35][com.project:tests] Command duration or timeout: 60.63 seconds
[18:45:35][com.project:tests] Build info: version: '2.43.1', revision: '5163bceef1bc36d43f3dc0b83c88998168a363a0', time: '2014-09-10 09:43:55'
[18:45:35][com.project:tests] System info: host: 'host', ip: '10.10.10.100', os.name: 'Linux', os.arch: 'i386', os.version: '2.6.32-22-pve', java.version: '1.7.0_67'
[18:45:35][com.project:tests] Driver info: org.openqa.selenium.chrome.ChromeDriver
[18:45:35][com.project:tests] 	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
[18:45:35][com.project:tests] 	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
[18:45:35][com.project:tests] 	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
[18:45:35][com.project:tests] 	at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
[18:45:35][com.project:tests] 	at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:204)
[18:45:35][com.project:tests] 	at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:156)
[18:45:35][com.project:tests] 	at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:599)
[18:45:35][com.project:tests] 	at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:240)
[18:45:35][com.project:tests] 	at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:126)
[18:45:35][com.project:tests] 	at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:139)
[18:45:35][com.project:tests] 	at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:171)
[18:45:35][com.project:tests] 	at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:139)
[18:45:35][com.project:tests] 	at com.blamper.framework.browser.Browser.chromeSSL(Browser.java:89)
[18:45:35][com.project:tests] 	at com.blamper.framework.browser.Browser.getSystemDriver(Browser.java:74)
[18:45:35][com.project:tests] 	at com.blamper.framework.browser.Browser.<init>(Browser.java:43)
[18:45:35][com.project:tests] 	at com.blamper.framework.testcase.TestCase.beforeMethod(TestCase.java:46)
[18:45:35][com.project:tests] 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[18:45:35][com.project:tests] 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
[18:45:35][com.project:tests] 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[18:45:35][com.project:tests] 	at java.lang.reflect.Method.invoke(Method.java:606)
[18:45:35][com.project:tests] 	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
[18:45:35][com.project:tests] 	at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:543)
[18:45:35][com.project:tests] 	at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:212)
[18:45:35][com.project:tests] 	at org.testng.internal.Invoker.invokeMethod(Invoker.java:631)
[18:45:35][com.project:tests] 	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
[18:45:35][com.project:tests] 	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
[18:45:35][com.project:tests] 	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
[18:45:35][com.project:tests] 	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
[18:45:35][com.project:tests] 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
[18:45:35][com.project:tests] 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
[18:45:35][com.project:tests] 	at java.lang.Thread.run(Thread.java:745)
[18:45:35][com.project:tests] Results :
[18:45:35][com.project:tests] 
[18:45:35][com.project:tests] Failed tests: 
[18:45:35][com.project:tests]   UserPageTests>TestCase.beforeMethod:46 ? WebDriver chrome not reachable
[18:45:35][com.project:tests]   (Dri...
[18:45:35][com.project:tests]   UserPageTests>TestCase.beforeMethod:46 ? WebDriver chrome not reachable
[18:45:35][com.project:tests]   (Dri...
[18:45:35][com.project:tests] 
[18:45:35][com.project:tests] Tests run: 246, Failures: 2, Errors: 0, Skipped: 243
[18:45:35][com.project:tests] 
[18:45:35]
[com.project:tests] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.17:test (default-test) on project tests: There are test failures.

Please refer to /root/agent/work/3d76af50ed39a1c0/target/surefire-reports for the individual test results.

Часть 2. Firefox

[18:18:30][com.project:tests] java.net.MalformedURLException: no protocol:
[18:18:30][com.project:tests] 2014-10-29 14:18:30 INFO  [pool-2-thread-1] Logger - Running @Test checkLoadTime
[18:18:30][com.project:tests] 	at java.net.URL.<init>(URL.java:585)
[18:18:30][com.project:tests] 	at java.net.URL.<init>(URL.java:482)
[18:18:30][com.project:tests] 	at java.net.URL.<init>(URL.java:431)
[18:18:30][com.project:tests] 	at com.project.framework.tools.Downloader.getRaw(Downloader.java:16)
[18:18:30][com.project:tests] 	at com.project.tests.MainPageTests.checkLoadTime(MainPageTests.java:66)
[18:18:30][com.project:tests] 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[18:18:30][com.project:tests] 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
[18:18:30][com.project:tests] 2014-10-29 14:18:30 INFO  [pool-2-thread-1] Logger - Running @AfterMethod
[18:18:30][com.project:tests] 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[18:18:30][com.project:tests] 2014-10-29 14:18:30 INFO  [pool-2-thread-1] Logger - Running @BeforeMethod
[18:18:30][com.project:tests] 	at java.lang.reflect.Method.invoke(Method.java:606)
[18:18:30][com.project:tests] 2014-10-29 14:18:30 INFO  [pool-2-thread-1] Logger - No annotation @NoBrowser, so trying to run browser
[18:18:30][com.project:tests] 	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
[18:18:30][com.project:tests] 2014-10-29 14:18:30 INFO  [pool-2-thread-1] Logger - Creating browser
[18:18:30][com.project:tests] 	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
[18:18:30][com.project:tests] 2014-10-29 14:18:30 INFO  [pool-2-thread-1] Logger - Untrusted ssl set to:true
[18:18:30][com.project:tests] 	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
[18:18:30][com.project:tests] 2014-10-29 14:18:30 INFO  [pool-2-thread-1] Logger - Using system driver org.openqa.selenium.firefox.FirefoxDriver
[18:18:30][com.project:tests] 	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
[18:18:30][com.project:tests] 2014-10-29 14:18:30 INFO  [pool-2-thread-1] Logger - Creating driver org.openqa.selenium.firefox.FirefoxDriver
[18:18:30][com.project:tests] 	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
[18:18:30][com.project:tests] 2014-10-29 14:18:30 INFO  [pool-2-thread-1] Logger - Trying run driver with firefox profile
[18:18:30][com.project:tests] 	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
[18:18:30][com.project:tests] 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
[18:18:30][com.project:tests] 2014-10-29 14:18:30 INFO  [pool-2-thread-1] Logger - setAcceptUntrustedCertificates: to true
[18:18:30][com.project:tests] 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
[18:18:30][com.project:tests] 2014-10-29 14:18:30 INFO  [pool-2-thread-1] Logger - setAssumeUntrustedCertificateIssuer: to false
[18:18:30][com.project:tests] 	at java.lang.Thread.run(Thread.java:745)
...
[18:20:37][com.project:tests] Warning: validation was turned on but an org.xml.sax.ErrorHandler was not
[18:20:37][com.project:tests] set, which is probably not what is desired.  Parser will use a default
[18:20:37][com.project:tests] ErrorHandler to print the first 10 errors.  Please call
[18:20:37][com.project:tests] the 'setErrorHandler' method to fix this.
[18:20:37][com.project:tests] Error: URI=null Line=1: Document root element "urlset", must match DOCTYPE root "null".
[18:20:37][com.project:tests] Error: URI=null Line=1: Document is invalid: no grammar found.
[18:20:37][com.project:tests] org.xml.sax.SAXParseException; cvc-elt.1.a: Cannot find the declaration of element 'urlset'.
[18:20:37][com.project:tests] 	at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
[18:20:37][com.project:tests] 	at org.apache.xerces.util.ErrorHandlerWrapper.error(Unknown Source)
[18:20:37][com.project:tests] 	at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
[18:20:37][com.project:tests] 	at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
[18:20:37][com.project:tests] 	at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
[18:20:37][com.project:tests] 	at org.apache.xerces.impl.xs.XMLSchemaValidator.handleStartElement(Unknown Source)
[18:20:37][com.project:tests] 	at org.apache.xerces.impl.xs.XMLSchemaValidator.startElement(Unknown Source)
[18:20:37][com.project:tests] 	at org.apache.xerces.jaxp.validation.DOMValidatorHelper.beginNode(Unknown Source)
[18:20:37][com.project:tests] 	at org.apache.xerces.jaxp.validation.DOMValidatorHelper.validate(Unknown Source)
[18:20:37][com.project:tests] 	at org.apache.xerces.jaxp.validation.DOMValidatorHelper.validate(Unknown Source)
[18:20:37][com.project:tests] 	at org.apache.xerces.jaxp.validation.ValidatorImpl.validate(Unknown Source)
[18:20:37][com.project:tests] 2014-10-29 14:20:37 INFO  [pool-2-thread-1] Logger - Running @AfterMethod
[18:20:37][com.project:tests] 	at javax.xml.validation.Validator.validate(Validator.java:124)
[18:20:37][com.project:tests] 2014-10-29 14:20:37 INFO  [pool-2-thread-1] Logger - Running @BeforeMethod
[18:20:37][com.project:tests] 	at com.project.framework.tools.XMLValidator.validate(XMLValidator.java:31)
[18:20:37][com.project:tests] 2014-10-29 14:20:37 INFO  [pool-2-thread-1] Logger - No annotation @NoBrowser, so trying to run browser
[18:20:37][com.project:tests] 	at com.project.tests.MainPageTests.checkSitemap(MainPageTests.java:96)
[18:20:37][com.project:tests] 2014-10-29 14:20:37 INFO  [pool-2-thread-1] Logger - Creating browser
[18:20:37][com.project:tests] 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[18:20:37][com.project:tests] 2014-10-29 14:20:37 INFO  [pool-2-thread-1] Logger - Untrusted ssl set to:true
[18:20:37][com.project:tests] 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
[18:20:37][com.project:tests] 2014-10-29 14:20:37 INFO  [pool-2-thread-1] Logger - Using system driver org.openqa.selenium.firefox.FirefoxDriver
[18:20:37][com.project:tests] 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[18:20:37][com.project:tests] 2014-10-29 14:20:37 INFO  [pool-2-thread-1] Logger - Creating driver org.openqa.selenium.firefox.FirefoxDriver
[18:20:37][com.project:tests] 	at java.lang.reflect.Method.invoke(Method.java:606)
[18:20:37][com.project:tests] 2014-10-29 14:20:37 INFO  [pool-2-thread-1] Logger - Trying run driver with firefox profile
[18:20:37][com.project:tests] 	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
[18:20:37][com.project:tests] 2014-10-29 14:20:37 INFO  [pool-2-thread-1] Logger - setAcceptUntrustedCertificates: to true
[18:20:37][com.project:tests] 	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
[18:20:37][com.project:tests] 2014-10-29 14:20:37 INFO  [pool-2-thread-1] Logger - setAssumeUntrustedCertificateIssuer: to false
[18:20:37][com.project:tests] 	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
[18:20:37][com.project:tests] 	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
[18:20:37][com.project:tests] 	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
[18:20:37][com.project:tests] 	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
[18:20:37][com.project:tests] 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
[18:20:37][com.project:tests] 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
[18:20:37][com.project:tests] 	at java.lang.Thread.run(Thread.java:745)
...
[18:28:05][com.project:tests] Tests run: 47, Failures: 35, Errors: 0, Skipped: 4, Time elapsed: 2,261.79 sec <<< FAILURE! - in TestSuite
[18:28:05][com.project:tests] checkMetricCounter(com.project.tests.UserPageTests)  Time elapsed: 60.124 sec  <<< FAILURE!
[18:28:05][com.project:tests] org.openqa.selenium.TimeoutException: Timed out waiting for page load.
[18:28:05][com.project:tests] Command duration or timeout: 60.10 seconds
[18:28:05][com.project:tests] Build info: version: '2.43.1', revision: '5163bceef1bc36d43f3dc0b83c88998168a363a0', time: '2014-09-10 09:43:55'
[18:28:05][com.project:tests] System info: host: 'host', ip: '10.10.10.100', os.name: 'Linux', os.arch: 'i386', os.version: '2.6.32-22-pve', java.version: '1.7.0_67'
[18:28:05][com.project:tests] Session ID: cde30b07-fa0a-4493-b63f-a59d621d4da9
[18:28:05][com.project:tests] Driver info: org.openqa.selenium.firefox.FirefoxDriver
[18:28:05][com.project:tests] Capabilities [{platform=LINUX, databaseEnabled=true, cssSelectorsEnabled=true, javascriptEnabled=true, acceptSslCerts=true, handlesAlerts=true, browserName=firefox, webStorageEnabled=true, nativeEvents=false, rotatable=false, locationContextEnabled=true, applicationCacheEnabled=true, takesScreenshot=true, version=33.0}]
[18:28:05][com.project:tests] 	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
[18:28:05][com.project:tests] 	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
[18:28:05][com.project:tests] 	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
[18:28:05][com.project:tests] 	at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
[18:28:05][com.project:tests] 	at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:204)
[18:28:05][com.project:tests] 	at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:156)
[18:28:05][com.project:tests] 	at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:599)
[18:28:05][com.project:tests] 	at org.openqa.selenium.remote.RemoteWebDriver.get(RemoteWebDriver.java:304)
[18:28:05][com.project:tests] 	at com.project.framework.browser.Browser.get(Browser.java:104)
[18:28:05][com.project:tests] 	at com.project.framework.pages.impl.UserPage.load(UserPage.java:31)
[18:28:05][com.project:tests] 	at org.openqa.selenium.support.ui.LoadableComponent.get(LoadableComponent.java:48)
[18:28:05][com.project:tests] 	at com.project.tests.UserPageTests$3.<init>(UserPageTests.java:65)
[18:28:05][com.project:tests] 	at com.project.tests.UserPageTests.checkMetricCounter(UserPageTests.java:63)
[18:28:05][com.project:tests] Caused by: org.openqa.selenium.TimeoutException: Timed out waiting for page load.
[18:28:05][com.project:tests] Build info: version: '2.43.1', revision: '5163bceef1bc36d43f3dc0b83c88998168a363a0', time: '2014-09-10 09:43:55'
[18:28:05][com.project:tests] System info: host: 'host', ip: '10.10.10.100', os.name: 'Linux', os.arch: 'i386', os.version: '2.6.32-22-pve', java.version: '1.7.0_67'
[18:28:05][com.project:tests] Driver info: driver.version: unknown
[18:28:05][com.project:tests] 	at <anonymous class>.Utils.initWebLoadingListener/<(file:///tmp/anonymous2053335594943508161webdriver-profile/extensions/fxdriver@googlecode.com/components/driver-component.js:7974:56)
[18:28:05][com.project:tests] 	at <anonymous class>.WebLoadingListener/e(file:///tmp/anonymous2053335594943508161webdriver-profile/extensions/fxdriver@googlecode.com/components/driver-component.js:4120:7)
[18:28:05][com.project:tests] 	at <anonymous class>.WebLoadingListener/<(file:///tmp/anonymous2053335594943508161webdriver-profile/extensions/fxdriver@googlecode.com/components/driver-component.js:4128:7)
[18:28:05][com.project:tests] 	at <anonymous class>.fxdriver.Timer.prototype.setTimeout/<.notify(file:///tmp/anonymous2053335594943508161webdriver-profile/extensions/fxdriver@googlecode.com/components/driver-component.js:548:5)

Содержание pom-файла: 

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.7</maven.compiler.source>
        <maven.compiler.target>1.7</maven.compiler.target>
    </properties>

    <groupId>com.project</groupId>
    <artifactId>tests</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
        <dependency>
            <groupId>javax.mail</groupId>
            <artifactId>mail</artifactId>
            <version>1.4.5</version>
        </dependency>
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>6.3.1</version>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>2.43.1</version>
        </dependency>
        <dependency>
            <groupId>org.uncommons</groupId>
            <artifactId>reportng</artifactId>
            <version>1.1.4</version>
            <exclusions>
                <exclusion>
                    <groupId>org.testng</groupId>
                    <artifactId>testng</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>com.google.inject</groupId>
            <artifactId>guice</artifactId>
            <version>3.0</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.7</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.7</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.17</version>
                <configuration>
                    <suiteXmlFiles>
                        <suiteXmlFile>${basedir}/src/test/resources/testng.xml</suiteXmlFile>
                    </suiteXmlFiles>
                    <systemPropertyVariables>
                        <com.project.tests.untrusted.ssl>true</com.project.tests.untrusted.ssl>
                        <com.project.tests.expected.loadtime>3000</com.project.tests.expected.loadtime>
                        <com.project.tests.check.gmail>false</com.project.tests.check.gmail>
                        <com.project.tests.gmail.timeout>15</com.project.tests.gmail.timeout>
                        <com.project.tests.gmail.user>user</com.project.tests.gmail.user>
                        <com.project.tests.gmail.pass>pass</com.project.tests.gmail.pass>
                        <com.project.tests.gmail.imap.host>imap.gmail.com</com.project.tests.gmail.imap.host>
                        <com.project.tests.gmail.smtp.host>smtp.gmail.com</com.project.tests.gmail.smtp.host>
                        <com.project.tests.webdriver>org.openqa.selenium.chrome.ChromeDriver</com.project.tests.webdriver>
                        <!-- <com.project.tests.webdriver>org.openqa.selenium.firefox.FirefoxDriver</com.project.tests.webdriver> -->
                        <org.uncommons.reportng.escape-output>false</org.uncommons.reportng.escape-output>
                        <com.project.tests.sitemap.xsd>${basedir}/src/test/resources/sitemap.xsd</com.project.tests.sitemap.xsd>
                        <webdriver.chrome.driver>${basedir}/src/test/resources/chromedriver</webdriver.chrome.driver>
                        <com.project.tests.url>https://project.ru</com.project.tests.url>
                        <com.project.tests.disable.pageload>false</com.project.tests.disable.pageload>
                        <com.project.tests.timeout.pageload>60</com.project.tests.timeout.pageload>
                        <com.project.tests.timeout.script>5</com.project.tests.timeout.script>
                        <com.project.tests.timeout.wait>7</com.project.tests.timeout.wait>
                    </systemPropertyVariables>
                    <properties>
                        <property>
                            <name>usedefaultlisteners</name>
                            <value>false</value>
                        </property>
                        <property>
                            <name>listener</name>
                            <value>org.uncommons.reportng.HTMLReporter</value>
                        </property>
                    </properties>
                    <workingDirectory>target/</workingDirectory>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

Класс браузера: 

package com.project.framework.browser;

import com.google.common.base.Predicate;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.By;
import org.openqa.selenium.*;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxProfile;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.support.ui.WebDriverWait;

import java.io.File;
import java.io.IOException;

import java.util.Arrays;
import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;

public class Browser implements WebDriver {
	private WebDriver driver;

	public class BrowserProperty {
		public static final String SYSTEM_WEB_DRIVER_PROPERTY = "com.project.tests.webdriver";
		public static final String TEST_BASE_URL_PROPERTY = "com.project.tests.url";
		public static final String DISABLE_PAGE_LOAD_TIMEOUT = "com.project.tests.disable.pageload";
		public static final String UNTRUSTED_SSL="com.project.tests.untrusted.ssl";
	}

	public static String TEST_BASE_URL = System.getProperty(BrowserProperty.TEST_BASE_URL_PROPERTY);

	public Browser() {
		log("Creating browser");
		try {
			driver = getSystemDriver();
			setDefaultTimeouts();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (InstantiationException e) {
			e.printStackTrace();
		}
	}

	public Browser(WebDriver driver, boolean setDefaultTimeouts) {
		log("Creating browser");
		log("Using driver: "+driver);
		this.driver = driver;
		if (setDefaultTimeouts) {
			setDefaultTimeouts();
		}
	}

	private WebDriver getSystemDriver() throws ClassNotFoundException, IllegalAccessException, InstantiationException {
		String driverName = System.getProperty(BrowserProperty.SYSTEM_WEB_DRIVER_PROPERTY);
		boolean untrustedSSL = Boolean.parseBoolean(System.getProperty(BrowserProperty.UNTRUSTED_SSL));
		log("Untrusted ssl set to:"+untrustedSSL);
		log("Using system driver "+driverName);
		if (driverName == null) {
			log("System driver null, creating FirefoxDriver");
			return new FirefoxDriver();
		} else {
			log("Creating driver "+driverName);
			if(driverName.contains("ChromeDriver") && untrustedSSL ){
				return chromeSSL();
			}
			if(driverName.contains("FirefoxDriver") && untrustedSSL ){
				return firefoxSSL();
			}
			return (WebDriver) Class.forName(driverName).newInstance();
		}
	}

	private WebDriver chromeSSL(){
		log("Trying run driver with ignoring untrusted ssl certs");
		List<String> switches= Arrays.asList("--ignore-certificate-errors","--no-sandbox");
		log("Set capability"+switches);
		DesiredCapabilities capabilities = DesiredCapabilities.chrome();
		capabilities.setCapability("chrome.switches", switches);
		return new ChromeDriver(capabilities);
	}

	private WebDriver firefoxSSL(){
		log("Trying run driver with firefox profile");
		FirefoxProfile profile= new FirefoxProfile();
		log("setAcceptUntrustedCertificates: to true");
		profile.setAcceptUntrustedCertificates(true);
		log("setAssumeUntrustedCertificateIssuer: to false");
		profile.setAssumeUntrustedCertificateIssuer(false);
		return new FirefoxDriver(profile);
	}

	public void get(String url) {
		log("Get url "+url);
		driver.get(url);
	}

	public String getCurrentUrl() {
		log("Return current page url");
		return driver.getCurrentUrl();
	}

	public String getTitle() {
		log("Return title");
		return driver.getTitle();
	}

	public List<WebElement> findElements(By by) {
		log("Trying to find all elements "+by);
		return driver.findElements(by);
	}

	public WebElement findElement(By by) {
		log("Trying to find element "+by);
		return driver.findElement(by);
	}

	public String getPageSource() {
		log("Return current page source");
		return driver.getPageSource();
	}

	public void close() {
		log("Close current window");
		driver.close();
	}

	public void quit() {
		log("Quit from browser");
		driver.quit();
	}

	public Set<String> getWindowHandles() {
		return driver.getWindowHandles();
	}

	public String getWindowHandle() {
		return driver.getWindowHandle();
	}

	public TargetLocator switchTo() {
		return driver.switchTo();
	}

	public Navigation navigate() {
		return driver.navigate();
	}

	public Options manage() {
		return driver.manage();
	}

	public Object executeScript(String script, Object... args) {
		log("Execute script "+script);
		return ((JavascriptExecutor) driver).executeScript(script, args);
	}

	public String takeScreenshotAsFile(String outputDirectory) {
		log("Trying to get screenshot as file");
		try {
			File source = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
			outputDirectory += "/" + source.getName();
			File destination = new File(outputDirectory);
			FileUtils.copyFile(source, destination);
			outputDirectory = destination.getAbsolutePath();
		} catch (IOException e) {
			outputDirectory = "Failed to capture screenshot: " + e.getMessage();
		}
		return outputDirectory;
	}

	public String takeScreenshotAsBase64(){
		log("Trying to get screenshot as base64 string");
		return ((TakesScreenshot) driver).getScreenshotAs(OutputType.BASE64);
	}

	public void sleep(long timeout) {
		try {
			hold(timeout).until(new Predicate<WebDriver>() {
				public boolean apply(WebDriver arg0) {
					return false;
				}
			});
		} catch (Exception e) {
		}
	}

	class DefaultTimeouts {
		public static final long PAGE_LOAD = 60;
		public static final long IMPLICIT_WAIT = 5;
		public static final long EXECUTE_SCRIPT = 5;
	}

	private void setDefaultTimeouts() {
		log("Setting default timeouts:");
		log("Set implicit wait:"+DefaultTimeouts.IMPLICIT_WAIT+" seconds");
		driver.manage().timeouts().implicitlyWait(DefaultTimeouts.IMPLICIT_WAIT, TimeUnit.SECONDS);
		log("Set execute script:"+DefaultTimeouts.EXECUTE_SCRIPT+" seconds");
		driver.manage().timeouts().setScriptTimeout(DefaultTimeouts.EXECUTE_SCRIPT, TimeUnit.SECONDS);
		if (System.getProperty(BrowserProperty.DISABLE_PAGE_LOAD_TIMEOUT).equals("false")) {
			log("Set page load:"+DefaultTimeouts.PAGE_LOAD+" seconds");
			driver.manage().timeouts().pageLoadTimeout(DefaultTimeouts.PAGE_LOAD, TimeUnit.SECONDS);
		}else{
			log("Found property "+BrowserProperty.DISABLE_PAGE_LOAD_TIMEOUT+". Page load will not be set!");
		}
	}

	public WebDriverWait hold(long time){
		log("Return new waiter object with timeout "+time);
		return new WebDriverWait(this,time);
	}


	public WebDriver getDriver(){
		log("Returning driver to test");
		return this.driver;
	}
}

Прошу совета. 



REST Assured первые пробы
2014-10-30 22:01

Доброго времени суток.

Есть задача проверить правильное формирование xml-ника и его корректное заполнение. ХМL вида:

<xml>
 <stack id="st1">
  <product id="pr-1">
   <name>Some namr</name>
   <prod_id>111</prod_id>
   <autor>Vasya</autor>
   <description>
    <title>Some title</title>
    <text>Some text</text>
    <media id="image"><img src="/img01.jpg" alt="" /></media>
    <media id="image"><img src="/img02.jpg" alt="" /></media>
    <media id="sound"><a href="/wave.mp3">sound</a></media>
   </description>
   <value>Some value</value>
   ...
  </product>
  <product id="pr-2">
   ...
  </product>
  ...
  <product id="pr-N">
  </product>
 </stack>
</xml>

Проверку пишу с использованием языка java

public void Test {
 get("http://site.com/somepage.html?paramId=1¶mSome=03").
  then().statusCode(200).
  body("xml.stack.id", equalTo("st1")).
  body("xml.stack.product.id", equalTo("pr-1")).
  ...
  ;
}

но при прохождении данной проверки получаю что-то типа:

Error message ....
expect: st1
actual: st1

что я не учёл исходя из документации REST Assured + каким образом выглядит проверка подсчёта общего количества <product id="pr-N"> из моего примера?



Не работает drag'n'drop
2014-10-31 12:04

Selenium WebDriver, Junit, Ant, Java

Не работает d'n'd на сервере

На локальной машине удалось выполнить d'n'd. Код следующий (пример):
 

public class HTML5DD1 { 
static WebDriver driver; 
public static void main(String[] args) throws Exception { 
FirefoxProfile ffProfile = new FirefoxProfile(); 
ffProfile.setEnableNativeEvents(true); 
ffProfile.setPreference("permissions.default.image", 2); 
driver = new FirefoxDriver(ffProfile); 
driver = new FirefoxDriver(); 
Thread.sleep(3000); 
driver.get("http://www.w3schools.com/html/tryhtml5_draganddrop.htm"); 
driver.manage().window().maximize();

WebElement dragFrom = driver.findElement(By.id("drag1")); 
WebElement dragTo = driver.findElement(By.id("div1")); dragAndDropElement(dragFrom, dragTo, 0, 90); 
System.out.println("Done Dragging!");

dragAndDropElement2(dragFrom, dragTo, 0, 90); 
System.out.println("Done Dragging! 2"); 

public static void dragAndDropElement(WebElement dragFrom, WebElement dragTo, int xOffset, int yOffset) throws Exception { 
System.out.println("dragFrom ="+dragFrom + " dragTo = "+dragTo +"xOffset = "+xOffset +" yOffset ="+yOffset ); 
// Setup robot 
Robot robot = new Robot(); 
robot.setAutoDelay(500);

// Get size of elements 
Dimension fromSize = dragFrom.getSize(); 
Dimension toSize = dragTo.getSize();

//Get centre distance 
int xCentreFrom = fromSize.width / 2; 
int yCentreFrom = fromSize.height / 2; 
int xCentreTo = toSize.width / 2; 
int yCentreTo = toSize.height / 2;

Point toLocation = dragTo.getLocation(); 
Point fromLocation = dragFrom.getLocation(); 
System.out.println(fromLocation.toString());

//Make Mouse coordinate centre of element 
toLocation.x += xOffset + xCentreTo; 
toLocation.y += yOffset + yCentreTo; 
fromLocation.x += xOffset + xCentreFrom; 
fromLocation.y += yOffset + yCentreFrom;

System.out.println(fromLocation.toString());

//Move mouse to drag from location 
robot.mouseMove(fromLocation.x, fromLocation.y); 
//Click and drag 
robot.mousePress(InputEvent.BUTTON1_MASK); 
robot.mouseMove(((toLocation.x - fromLocation.x) / 2) + fromLocation.x, ((toLocation.y - fromLocation.y) / 2) + fromLocation.y);

//Move to final position 
robot.mouseMove(toLocation.x, toLocation.y); 
//Drop 
robot.mouseRelease(InputEvent.BUTTON1_MASK); 

}

 

 

Необходимо запустить на Jenkins. OS Debian. 

Запускаются тесты там так:

/usr/bin/Xvfb :1 -screen 1 1360x768x24&
export DISPLAY=:1 

 

 

Тест проваливается, в консоли выходит:

[junit]     Caused an ERROR
[junit] headless environment
[junit] java.awt.AWTException: headless environment
[junit]     at java.awt.Robot.<init>(Robot.java:94)
[junit]     at WeekCalendar.dragAndDropElement(WeekCalendar.java:318)
[junit]     at WeekCalendar.weekcalendar(WeekCalendar.java:203)
[junit]     at Locators$1$1.evaluate(Locators.java:399)

 

 



Нагрузочное тестирование через протокол MQ
2014-10-31 13:24

Здравствуйте!

Есть задача. Протестировать сервер на отказоустойчивость, работу на максимальной нагрузке и восстановление после падения. Протокол, по которому входят XML-файлы - MQ.

Подскажите, может кто сталкивался с таким протоколом. Каким инструментом тестировать, и как подсоединиться к данному протоколу. Буду признателен за любую информацию.

P.S. Google мне не помог. 



Тестируем спичку =)
2014-10-31 14:55

Всем привет.

 

Мне дали интересное задание протестить спичку =) (для принятие на работу)

 

Что я придумала:

 

1.удобство: удобно ли держать спичку и зажигать

2. проверить есть ли сера на кончике

3. спичка отшлифована? или на ней есть шероховатости, заусеницы

4. представим, что у нас на улице -60=) попробуем заморозить спичку и попробовать зажечь

5. намочим-попытаемся поджечь

6. намочим -высушим в микроволновке- зажигаем

7. цвет спички: крашенная, или нет

8. материал:дерево или нет

9. цвет серы

10 форма-круглая, квадратная, ромбиком

11. длина: длинная, короткая

12. можно ли поранится спичкой:поцарапать руку, палец, проткнуть глаз (хардкор)

13. экологичность: что будет если ее схрумать? что будет если выкинуть

14. безопасность: можно ли дать ребенку (они вечно все в рот засовывают),  можно ли оставить на длительное время на солнце

 

там еще был вопросы:

 

Какие тесты можно было бы еще провести, если бы в наличии было:

  • 2 спички

  • неограниченное количество спичек

 

Как Вы думаете, мои тесты верны? ничего не упустила? Заранее спасибо =)

 

 



Кодировка отчетов в TestNG
2014-11-02 10:13

Всем доброго дня!

Уже давно стоит проблема с кодировкой в отчетах, генерируемых при выполнении тестов TestNG.

Если точнее, то после выполнения тестов открываю html-отчет (index.html). И там вместо русского текста отображаются символы в неверной кодировке. Аналогично, если перейти по ссылке "Reporter output". Если же вручную поменять кодировку в браузере на данной странице на UTF-8, то всё становится отлично.

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

Для примера прикрепил проект (Прикрепленный файл  Testing.7z   809байт   1 Количество загрузок:), в котором видна данная проблема (запуск производится как из IDE (Intellij IDEA), так и с помощью Maven). Там только один тестовый класс.



Фильтр задач, имеющих отношение к текущему юзеру
2014-11-02 18:27

Всем привет.

Я не нашла ни в списке предуставленных фильтров, ни в инструкциях к JIRA фильтр, который позволял бы мне видеть все имеющие ко мне отношение задачи. А он нужен. То есть я могу найти задачу, пока я assignee в ней, но когда я выполненную задачу возвращаю репортеру, она теряется в списке, поскольку репортер не я и исполнитель теперь тоже не я. 

При создании задачи, как правильно, оставляю в ней комментарий, содержащий информацию о проделанной работе. Теоретически можно отсеять по имени автора комментариев, но такой фильтр я не видела.

Как это можно провернуть?



Selenium + Omniture
2014-11-03 19:15

Привет друзья!

Кто может подсказать, как с помощью WebDriver чекать значения переменных omniture на сайте? Как автоматизировать этот процесс? В гугле ничего толкового пока не нашел.

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

Большое человеческое спасибо заранее.



Robotium не работает?
2014-11-03 23:32

Всем доброго времени суток!

 

Недавно на работе столкнулся с одной проблемой. Работаю в игровой индустрии и недавно начальство задумалось об автоматизации смоук-тестирования(запуск билдов и выполнение простых действий на проверку того что они не падают при запуске или при выполнении простейших действий). Мне поручили разобраться таким продуктом как Testdroid recorder(http://testdroid.com/product/testdroid-recorder#0). Выбор был на нем остановлен так как данная компания позволяет запускать тесты на своих реальных устройствах, что было бы весьма кстати для нас. На данный момент установка на устройства проводится вручную. В качестве проверке был выбран один из наших продуктов - Game Navigator(https://play.google.com/store/apps/details?id=com.g5e.xpromoapp). Итак закончим пролог и к делу.

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

Так же не работала проверка текста(ни хтмл, ни обычная. Приложение вообще представляет собой веб-страницу по факту), а также когда я прописывал определенные классы элементов в команду clickOnHtmlElement тест падал, так как не мог найти кнопки с этими классами(классы я взял из кода приложения). С некоторыми классами работало, но с большинством нужных мне - нет(на скрине Example2  я выделил области, тап на которые мне удалось воспроизвести используя класс элементов этих областей, но нажатия на кнопки Play Now и Learn More, используя их класс, так и не удалось сделать). 

По факту удалось воспроизвести только тап на одну область. Как я уже говорил - не работала проверка текста(тест падал на проверке одного слова на странице, которое там встречалось раз 10) + полностью не работали кнопки нижнего меню - Home, Twitter, Facebook, Support(скрин прикрепил).

"Сработало" только 2 теста - clickOnText("Twitter") и clickOnView("Facebook"), и именно "сработало" так как тест был пройден, но никаких действий при запуске теста на устройстве я не видел(должен был произойти переход на наши страницы ФБ и твиттера). 

 

Кто-нибудь сталкивался с чем-то подобным? Может кто подскажет почему тест "не видит" большую часть кнопок в приложении и вообще не видит текста? После исследования инета понял что проблема скорее Роботиума, и люди боролись в основном с использованием clickOnView() команды. Но проблема в том что я не знаю какие у меня View на этих кнопках. UI Automator не показал мне ровным счетом ничего. Да и проблема с поиском текста остается....

Прикрепленные изображения

  • Example2.png
  • Eхample.png


Selenium WD - запустить браузер по умолчанию
2014-11-04 11:18

День добрый!!!

Возникла запускать дефолтный браузер системы, раньше описывал это через конфиг(в нем указывал тип браузера, а далее через case запускал его)

Использую Slenium WD + VS2013 + nunit + C#

Подскажите как реализовать запуск дефлотного браузера системы

Спасибо



Запуск тестов (InternetExplorerDriver) при помощи Maven
2014-11-04 11:50

Всем привет!

Возникла необходимовсть запускать тесты в IE (опыта с этим драйвером к сожалению нет). Получилось настроить и запустить тесты из IDE (Idea).

Следующий шаг - запуск при помощи Maven. Вот тут возникла проблема. Internet Explorer никак не хочет запускаться. Тест валится при обращении к драйверу на java.lang.NullPinterException

Мои действия:

- IEDriverServer.exe скачан в папку C:\IEDriver

- В системную переменную Path добавлен путь C:\IEDriver (на всякий случай и в коде)

- Инициализация драйвера происходит следующим образом

File file = new File("c:/IEDriver/IEDriverServer.exe");
System.setProperty("webdriver.ie.driver", file.getAbsolutePath());

final DesiredCapabilities capabilities = DesiredCapabilities.internetExplorer();
сapabilities.setCapability(ШnternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true);
WebDriver driver = new InternetExplorerDriver(capabilities);

- maven команда для запуска тестов

mvn -DfailIfNoTests=false test

- OS Windows7 x64, драйвер тоже x64, IE10 (также опробовано на OS Windows server 2003 x86, driver x32, IE8)

 

Уверен, что дело в какой нибудь ерунде, про которую я забыл.

 

Спасибо за советы.



Как заставить каждый конкретный поток использовать только одного юзера
2014-11-04 12:25

Здравствуйте.

Возникла следующая проблема.

У меня есть CSV файл, в котором содержатся 20 пользователей.

Тест запускается в 20 потоков.

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

 

Например.

Thread 1- user1

Thread 2- user2

Каким образом можно реализоваться это?



On click на кнопке Save в Magento
2014-11-05 02:58

Здравствуйте.
В magento после редактирования продукта нужно нажать кнопку Save.

id в каждого продукта разная, поэтому id не подходит.

 

Пробовал еще так:

driver.findElement(By.xpath("//class[contains( text(),'scalable save')]")).click();

Не работает.

 

Может еще есть варианты как это сделать?

 

http://www.screencapture.ru/file/9825eF2E



TestComplete не может найти элемент
2014-11-05 12:02

Добрый день. 

Появилась следующая проблема. Допустим мне нужно проверить есть ли на экране определенный элемент:
Пишу 

if (Sys["Process"]("NameOfMyProcess")["WPFObject"]("HwndSource: WindowContentHolder", "Confirmation")["VisibleOnScreen"])

{...}else{...}

TC падает с ошибкой, что не может найти ["WPFObject"]("HwndSource: WindowContentHolder", "Confirmation"). Но если он не может его найти, то не должен ли он пропустить if и перейти к else? Не работает при любой проверке - Visible, VisibleOnScreen, Exists.

В чем может быть причина?
Заранее спасибо :)



Импорт тестовых объектов из других скриптов
2014-11-05 13:13

Добрый день!

 

Имеется тестовый скрипт1 со своими тестовыми объектами:

 

Снимок1.PNG

 

Я создаю новый скрипт2, и я хочу чтобы он использовал те же самые тестовые объекты, что и скрипт1. Как это можно сделать?

 

Как я пытался сделать:

 

1. создать новую карту тестовых объектов на основе тестовых объектов скрипта1

Безымянный2.png

 

Безымянный3.png

 

Снимок4.PNG

 

2. Выполнить слияние тестовых объектов со скриптом2

 

В результате слияние выполнилось, но тестовые объекты не импортировались:

 

Безымянный5.png

 

Снимок6.PNG

 



© 2010 | Software-Testing.Ru


В избранное