В этой записи хочу написать о том, как я заавтотестил переписку. Хочу только отметить какое какие моменты. Автотесты я пишу в стиле DSL, которому научился благодаря курсам Алексея Баранцева, а именно Программирование для тестировщиков
Коротко говоря, у меня два пакета с тестами, в одном пакете чисто хелперы, в которые запихана реализация методов, в другом пакете чисто тесты состоявшие из этих методов. Тесты пишу на java.
К примеру мой тест по авторизации выглядит следующем образом:
public void autorazationMambaLogin() throws Exception {
app.getAuthorizationHelper().openMambaUrl();
app.getAuthorizationHelper().loginMamba(«логин», «пассворд», «id анкеты»);
app.getAuthorizationHelper().logOut();
}
Правда красиво? Не буду писать как тест выглядел раньше Ну вообщем все мои автотесты выглядят примерно таким образом, вся реализация в хелперах, все тесты состоят исключительно из человеко читаемых методах, берущихся из хелперов. И еще, я считаю, что автотесты не должны покрывать длинные кейсы, они должны быть короткими и быть по сути smoke-тестами.
Так вот , тестовый сайт mamba.ru
Для того чтобы нам, написать какому то юзеру, необходимо этого юзера найти
И написать ему сообщения через анкету:
Либо зайдя в сообщения на своем профайле и перейдя в папку, где находится ваш контакт:
И при первом и при втором варианте, при нажатии «Написать» открывается окно месседжера, куда мы пишем сообщение и нажимаем «Отправить»:
В итоге наше отправленное сообщение должно отразиться в окне переписки
И должно отразиться в окне переписки юзера, кому мы отправили сообщение:
Вот и небольшой текст кейс, который я должен заавтотестить.
Разъясню несколько методов которые я использую.
В классе HelperWithWebDriverBase:
метод, который переключается по окнам
public void switchToWindow(int number){
driver.switchTo().window((String) driver.getWindowHandles().toArray()[number]);
}
метод закрывающий окно
public void closeWindow(int number){
driver.switchTo().window((String) driver.getWindowHandles().toArray()[number]).close();
}
метод проверяющий что на странице присутствует нужный мне текст
public void verifyText(String text){
assertTrue(findElement(By.tagName(«body»)).getText().contains(text));
}
Метод, который генерит рандомный текст с параметром количества символов :
public String genString(int Length) {
String[] lettersName = {«А»,»Б»,»В»,»Г»,»Д»,»Е»,»Ё»
,»Ж»,»З»,»И»,»Й»,»К»,
«Л»,»М»,»Н»,»О»,»П»,»Р»,»С»,»Т»,
«У»,»Ф»,»Х»,»Ц»,»Ч»,»Ш»,»Щ»,»Ъ»,»Ы»,»Ь»,»Э»,»Ю»,»Я»};
Random rnd = new Random();
StringBuilder sb = new StringBuilder(Length);
for( int i = 0; i < Length; i++ ) sb.append(lettersName[rnd.nextInt(lettersName.length)]);
return sb.toString();
}
Про этот метод мне наш разработчик ответил вот что :
«давай по словарю генерь а не бред и самообучался чтоб на ответах»
Но я пока не готов.
В классе MessagesHelper:
Метод, который вводит текст в окно месседжера
public void eneterTextToMessager(String messageText){
findElement(By.name(«message»)).sendKeys(messageText);
}
Вообщем самые важные методы разъяснил, теперь можно составлять наш конструктор, тобишь наш тест:
/*Переписка в мессенджере.*/
@Test
public void testVerifyWriteMessage() throws Exception {
app.getAuthorizationHelper().openMambaUrl(); // открываю сайт
app.getAuthorizationHelper().loginMamba(«анкета1», «пароль», «id1»); //логинюсь анкетой номер1
app.getMessagesHelper().clickFavouritesFolder(); //кликаю по папке «Избранные» , в которой находится наш контакт
app.getMessagesHelper().clickWriteMessageToMessage();// кликаю на «Написать» около нужного нам контакта Анкета2
app.getHelperWithWebDriverBase().switchToWindow(1); // переключаюсь на окно открывшегося месседжера
String testMessage = app.getHelperWithWebDriverBase().genString(11); // генерю текстовое сообщение из 11 символов
app.getMessagesHelper().eneterTextToMessager(testMessage); //Ввожу сгенеренное сообщение
app.getMessagesHelper().clickSendMessage(); //нажимаем «Отправить»
app.getHelperWithWebDriverBase().verifyText(testMessage); //Проверяю что отправленное сообщение присутствует в месседжере
app.getHelperWithWebDriverBase().closeWindow(1); //закрываю месседжер
app.getHelperWithWebDriverBase().switchToWindow(0); //переключаюсь на вкладку с профайлом
app.getAuthorizationHelper().logOut(); //выхожу из профайла
app.getAuthorizationHelper().loginMamba(«анкета2», «пассворд», «id2»); //логинюсь анкетой номер2
app.getMessagesHelper().clickOnMessageOnAnketa(); //кликаю по папке «Избранные» , в которой находится написавшая нам анкета1
app.getMessagesHelper().clickWriteMessageToTest(); // кликаю на «Написать» около нужного нам контакта Анкета1
app.getHelperWithWebDriverBase().switchToWindow(1); //переключаюсь на открывшееся окно месседжера
app.getHelperWithWebDriverBase().verifyText(testMessage); //подтверждаю присутствие полученного сгенеренного нами ранее текста
app.getHelperWithWebDriverBase().closeWindow(1); // закрываю окно месседжера
app.getHelperWithWebDriverBase().switchToWindow(0); // переключаюсь обратно на вкладку с профайлом
app.getAuthorizationHelper().logOut(); //делаю выход
}
Все, тест готов, а как реализовывайте автоматизацию переписки вы на своих проектах?
Здравствуйте! Можете показать как вы реализовали метод открытия и закрытия браузера?
Сам браузер, читаю из конфиг файла:
@BeforeMethod
@Parameters({ «configFile» })
public void setUp(org.testng.ITestContext ctx, @Optional String configFile) throws Exception {
if (configFile == null) {
configFile = System.getProperty(«configFile»);
}
if (configFile == null) {
configFile = System.getenv(«configFile»);
}
if (configFile == null) {
configFile = «application.properties»;
}
Properties props = new Properties();
props.load(new FileReader(configFile));
app.set(new ApplicationManager().getApplicationManager());
getManager().setProperties(props);
ctx.setAttribute(«application», app);
}
Закрытие браузера:
@AfterMethod
public void tearDown() throws Exception {
getManager().stop();
}
public ApplicationManager getManager() {
if (app.get() == null) {
app.set(new ApplicationManager().getApplicationManager());
}
return app.get();
}
Огромное спасибо!