From 7d21fd86e93d9527b052208751a8aaaa9bde3d64 Mon Sep 17 00:00:00 2001 From: dariaVasileva <39905001+dariaVasileva@users.noreply.github.com> Date: Thu, 22 Nov 2018 15:27:47 +0300 Subject: [PATCH] Feature/screenshot step (#114) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * added step @И("^снят скриншот текущей страницы$") --- .../java/ru/alfabank/steps/DefaultSteps.java | 102 +++++++++--------- .../ru/alfabank/steps/DefaultStepsTest.java | 94 ++++++++-------- 2 files changed, 102 insertions(+), 94 deletions(-) diff --git a/src/main/java/ru/alfabank/steps/DefaultSteps.java b/src/main/java/ru/alfabank/steps/DefaultSteps.java index 73497fd0..4a980161 100644 --- a/src/main/java/ru/alfabank/steps/DefaultSteps.java +++ b/src/main/java/ru/alfabank/steps/DefaultSteps.java @@ -18,15 +18,13 @@ import com.codeborne.selenide.Condition; import com.codeborne.selenide.Selenide; import com.codeborne.selenide.SelenideElement; -import com.codeborne.selenide.WebDriverRunner; import cucumber.api.DataTable; import cucumber.api.java.ru.*; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.RandomStringUtils; import org.hamcrest.Matchers; -import org.openqa.selenium.By; +import org.openqa.selenium.*; import org.openqa.selenium.Dimension; -import org.openqa.selenium.Keys; import org.openqa.selenium.interactions.Actions; import ru.alfabank.alfatest.cucumber.api.AkitaScenario; @@ -190,10 +188,9 @@ public void elemDisappered(String elementName) { @Тогда("^(?:страница|блок|форма|вкладка) \"([^\"]*)\" (?:загрузилась|загрузился)$") public void loadPage(String nameOfPage) { akitaScenario.setCurrentPage(akitaScenario.getPage(nameOfPage)); - if(isIE()) { + if (isIE()) { akitaScenario.getCurrentPage().ieAppeared(); - } - else akitaScenario.getCurrentPage().appeared(); + } else akitaScenario.getCurrentPage().appeared(); } /** @@ -203,10 +200,9 @@ public void loadPage(String nameOfPage) { @Тогда("^(?:страница|блок|форма|вкладка) \"([^\"]*)\" не (?:загрузилась|загрузился)$") public void loadPageFailed(String nameOfPage) { akitaScenario.setCurrentPage(akitaScenario.getPage(nameOfPage)); - if(isIE()){ + if (isIE()) { akitaScenario.getCurrentPage().ieDisappeared(); - } - else akitaScenario.getCurrentPage().disappeared(); + } else akitaScenario.getCurrentPage().disappeared(); } /** @@ -237,7 +233,7 @@ public void checkingTwoVariablesAreNotEquals(String firstVariableName, String se String firstValueToCompare = akitaScenario.getVar(firstVariableName).toString(); String secondValueToCompare = akitaScenario.getVar(secondVariableName).toString(); assertThat(String.format("Значения в переменных [%s] и [%s] совпадают", firstVariableName, secondVariableName), - firstValueToCompare, Matchers.not(equalTo(secondValueToCompare))); + firstValueToCompare, Matchers.not(equalTo(secondValueToCompare))); } /** @@ -290,10 +286,9 @@ public void waitForSeconds(long seconds) { */ @Тогда("^(?:страница|блок|форма) \"([^\"]*)\" (?:скрыт|скрыта)") public void blockDisappeared(String nameOfPage) { - if (isIE()){ + if (isIE()) { akitaScenario.getPage(nameOfPage).ieDisappeared(); - } - else akitaScenario.getPage(nameOfPage).disappeared(); + } else akitaScenario.getPage(nameOfPage).disappeared(); } /** @@ -308,8 +303,8 @@ public void pushButtonOnKeyboard(String buttonName) { /** * Эмулирует нажатие сочетания клавиш на клавиатуре. * Допустим, чтобы эмулировать нажатие на Ctrl+A, в таблице должны быть следующие значения - * | CONTROL | - * | a | + * | CONTROL | + * | a | * * @param keyNames название клавиши */ @@ -578,8 +573,8 @@ public void checkElemClassContainsExpectedValue(String elementName, String expec public void checkElemClassNotContainsExpectedValue(String elementName, String expectedClassValue) { SelenideElement currentElement = akitaScenario.getCurrentPage().getElement(elementName); assertThat(String.format("Элемент [%s] содержит класс со значением [%s]", elementName, expectedClassValue), - currentElement.getAttribute("class").toLowerCase(), - Matchers.not(containsString(getPropertyOrStringVariableOrValue(expectedClassValue).toLowerCase()))); + currentElement.getAttribute("class").toLowerCase(), + Matchers.not(containsString(getPropertyOrStringVariableOrValue(expectedClassValue).toLowerCase()))); } /** @@ -751,7 +746,7 @@ public void testFileDownloaded(String fileName) { } /** - * Скроллит экран до нужного элемента, имеющегося на странице, но видимого только в нижней/верхней части страницы. + * Скроллит экран до нужного элемента, имеющегося на странице, но видимого только в нижней/верхней части страницы. */ @Тогда("^страница прокручена до элемента \"([^\"]*)\"") public void scrollPageToElement(String elementName) { @@ -779,7 +774,7 @@ public void selectRandomElementFromListAndSaveVar(String listName, String varNam element.shouldBe(Condition.visible).click(); akitaScenario.setVar(varName, akitaScenario.getCurrentPage().getAnyElementText(element).trim()); akitaScenario.write(String.format("Переменной [%s] присвоено значение [%s] из списка [%s]", varName, - akitaScenario.getVar(varName), listName)); + akitaScenario.getVar(varName), listName)); } /** @@ -823,10 +818,10 @@ public void checkListElementsNotContainsText(String listName, String expectedVal final String value = getPropertyOrValue(expectedValue); List listOfElementsFromPage = akitaScenario.getCurrentPage().getElementsList(listName); List elementsListText = listOfElementsFromPage.stream() - .map(element -> element.getText().trim().toLowerCase()) - .collect(toList()); + .map(element -> element.getText().trim().toLowerCase()) + .collect(toList()); assertFalse(String.format("Элемены списка %s: [%s] содержат текст [%s] ", listName, elementsListText, value), - elementsListText.stream().allMatch(item -> item.contains(value.toLowerCase()))); + elementsListText.stream().allMatch(item -> item.contains(value.toLowerCase()))); } /** @@ -883,7 +878,7 @@ public void inputAndSetRandomNumSequence(String elementName, int seqLength, Stri valueInput.setValue(numSeq); akitaScenario.setVar(varName, numSeq); akitaScenario.write(String.format("В поле [%s] введено значение [%s] и сохранено в переменную [%s]", - elementName, numSeq, varName)); + elementName, numSeq, varName)); } /** @@ -894,7 +889,7 @@ public void checkListTextsByRegExp(String listName, String pattern) { akitaScenario.getCurrentPage().getElementsList(listName).forEach(element -> { String str = akitaScenario.getCurrentPage().getAnyElementText(element); assertTrue(format("Текст '%s' из списка '%s' не соответствует формату регулярного выражения", str, listName), - isTextMatches(str, pattern)); + isTextMatches(str, pattern)); }); } @@ -909,7 +904,7 @@ public void executeJsScript(String scriptName) { } /** - * Производится проверка количества символов в поле со значением, указанным в шаге + * Производится проверка количества символов в поле со значением, указанным в шаге */ @Тогда("^в поле \"([^\"]*)\" содержится (\\d+) символов$") public void checkFieldSymbolsCount(String element, int num) { @@ -918,7 +913,7 @@ public void checkFieldSymbolsCount(String element, int num) { } /** - * Производится проверка соответствия числа элементов списка значению, указанному в шаге + * Производится проверка соответствия числа элементов списка значению, указанному в шаге */ @Тогда("^в списке \"([^\"]*)\" содержится (\\d+) (?:элемент|элементов|элемента)") public void listContainsNumberOfElements(String listName, int quantity) { @@ -927,7 +922,7 @@ public void listContainsNumberOfElements(String listName, int quantity) { } /** - * Производится проверка соответствия числа элементов списка значению из property файла, из переменной сценария или указанному в шаге + * Производится проверка соответствия числа элементов списка значению из property файла, из переменной сценария или указанному в шаге */ @Тогда("^в списке \"([^\"]*)\" содержится количество элементов, равное значению из переменной \"([^\"]*)\"") public void listContainsNumberFromVariable(String listName, String quantity) { @@ -936,38 +931,39 @@ public void listContainsNumberFromVariable(String listName, String quantity) { } /** - * Производится сопоставление числа элементов списка и значения, указанного в шаге + * Производится сопоставление числа элементов списка и значения, указанного в шаге */ @Тогда("^в списке \"([^\"]*)\" содержится (более|менее) (\\d+) (?:элементов|элемента)") public void listContainsMoreOrLessElements(String listName, String moreOrLess, int quantity) { List listOfElementsFromPage = akitaScenario.getCurrentPage().getElementsList(listName); if ("более".equals(moreOrLess)) { assertTrue(String.format("Число элементов списка меньше ожидаемого: %s", listOfElementsFromPage.size()), listOfElementsFromPage.size() > quantity); - } else assertTrue(String.format("Число элементов списка превышает ожидаемое: %s", listOfElementsFromPage.size()), listOfElementsFromPage.size() < quantity); + } else + assertTrue(String.format("Число элементов списка превышает ожидаемое: %s", listOfElementsFromPage.size()), listOfElementsFromPage.size() < quantity); } /** - * Скроллит страницу вниз до появления элемента каждую секунду. - * Если достигнут футер страницы и элемент не найден - выбрасывается exception. + * Скроллит страницу вниз до появления элемента каждую секунду. + * Если достигнут футер страницы и элемент не найден - выбрасывается exception. */ @И("^страница прокручена до появления элемента \"([^\"]*)\"$") public void scrollWhileElemNotFoundOnPage(String elementName) { - SelenideElement el = null; - do { - el = akitaScenario.getCurrentPage().getElement(elementName); - if (el.exists()) { - break; - } - executeJavaScript("return window.scrollBy(0, 250);"); - sleep(1000); - } while (!atBottom()); - assertThat("Элемент " + elementName + " не найден", el.isDisplayed()); - } + SelenideElement el = null; + do { + el = akitaScenario.getCurrentPage().getElement(elementName); + if (el.exists()) { + break; + } + executeJavaScript("return window.scrollBy(0, 250);"); + sleep(1000); + } while (!atBottom()); + assertThat("Элемент " + elementName + " не найден", el.isDisplayed()); + } /** - * Скроллит страницу вниз до появления элемента с текстом из property файла, из переменной сценария или указанному в шаге каждую секунду. - * Если достигнут футер страницы и элемент не найден - выбрасывается exception. + * Скроллит страницу вниз до появления элемента с текстом из property файла, из переменной сценария или указанному в шаге каждую секунду. + * Если достигнут футер страницы и элемент не найден - выбрасывается exception. */ @И("^страница прокручена до появления элемента с текстом \"([^\"]*)\"$") public void scrollWhileElemWithTextNotFoundOnPage(String expectedValue) { @@ -983,13 +979,22 @@ public void scrollWhileElemWithTextNotFoundOnPage(String expectedValue) { assertThat("Элемент с текстом " + expectedValue + " не найден", el.isDisplayed()); } + /** + * Метод осуществляет снятие скриншота и прикрепление его к cucumber отчету. + */ + @И("^снят скриншот текущей страницы$") + public void takeScreenshot() { + final byte[] screenshot = ((TakesScreenshot) getWebDriver()).getScreenshotAs(OutputType.BYTES); + AkitaScenario.getInstance().getScenario().embed(screenshot, "image/png"); + } + /* * Проверка совпадения значения из переменной и значения из property */ @Тогда("^значения из переменной \"([^\"]*)\" и из property файла \"([^\"]*)\" совпадают$") public void checkIfValueFromVariableEqualPropertyVariable(String envVarible, String propertyVariable) { assertThat("Переменные " + envVarible + " и " + propertyVariable + " не совпадают", - (String) akitaScenario.getVar(envVarible), equalToIgnoringCase(loadProperty(propertyVariable))); + (String) akitaScenario.getVar(envVarible), equalToIgnoringCase(loadProperty(propertyVariable))); } /* @@ -1016,8 +1021,7 @@ public void fillTemplate(String templateName, String varName, DataTable table) { String replacement = list.get(1); if (template.contains(regexp)) { template = template.replaceAll(regexp, replacement); - } - else { + } else { akitaScenario.write("В шаблоне не найден элемент " + regexp); error = true; } @@ -1048,7 +1052,7 @@ private boolean checkResult(String result, String message) { log.warn(message + " не найдена"); return false; } - log.info(message + " = " + result); + log.info(message + " = " + result); akitaScenario.write(message + " = " + result); return true; } @@ -1122,7 +1126,7 @@ public boolean isTextMatches(String str, String pattern) { /** * Возвращает локатор для поиска по нормализованному(без учета регистра) тексту */ - public String getTranslateNormalizeSpaceText (String expectedText) { + public String getTranslateNormalizeSpaceText(String expectedText) { StringBuilder text = new StringBuilder(); text.append("//*[contains(translate(normalize-space(text()), "); text.append("'ABCDEFGHIJKLMNOPQRSTUVWXYZАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ', "); diff --git a/src/test/java/ru/alfabank/steps/DefaultStepsTest.java b/src/test/java/ru/alfabank/steps/DefaultStepsTest.java index 2830c30e..0ede0897 100644 --- a/src/test/java/ru/alfabank/steps/DefaultStepsTest.java +++ b/src/test/java/ru/alfabank/steps/DefaultStepsTest.java @@ -23,7 +23,6 @@ import org.junit.*; import org.openqa.selenium.By; import org.openqa.selenium.Dimension; -import org.openqa.selenium.WebDriverException; import ru.alfabank.StubScenario; import ru.alfabank.alfatest.cucumber.ScopedVariables; import ru.alfabank.alfatest.cucumber.api.AkitaEnvironment; @@ -39,9 +38,7 @@ import static com.codeborne.selenide.Selenide.sleep; import static com.codeborne.selenide.WebDriverRunner.getWebDriver; import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.anyOf; -import static org.hamcrest.Matchers.equalTo; -import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.*; import static ru.alfabank.tests.core.helpers.PropertyLoader.loadValueFromFileOrPropertyOrVariableOrDefault; import static ru.alfabank.util.DataTableUtils.dataTableFromLists; @@ -97,18 +94,18 @@ public void testCheckCurrentURLAnotherNegative() { } @Test - public void testCheckCurrentURLIsNotEqualsPositive(){ + public void testCheckCurrentURLIsNotEqualsPositive() { String myURL = "https://google.ru/"; ds.checkCurrentURLIsNotEquals(myURL); } @Test(expected = AssertionError.class) - public void testCheckCurrentURLIsNotEqualsNegative(){ + public void testCheckCurrentURLIsNotEqualsNegative() { ds.checkCurrentURLIsNotEquals(akitaScenario.getVar("Page").toString()); } @Test(expected = NullPointerException.class) - public void testCheckCurrentURLIsNotEqualsAnotherNegative(){ + public void testCheckCurrentURLIsNotEqualsAnotherNegative() { ds.checkCurrentURLIsNotEquals(null); } @@ -162,27 +159,31 @@ public void testCompareTwoDigitVarsAnotherNegative() { } @Test - public void testCheckingTwoVariablesAreNotEqualsPositive(){ - String variable1Name = "number1"; int variable1Value = 666; + public void testCheckingTwoVariablesAreNotEqualsPositive() { + String variable1Name = "number1"; + int variable1Value = 666; akitaScenario.setVar(variable1Name, variable1Value); - String variable2Name = "number2"; int variable2Value = 123; + String variable2Name = "number2"; + int variable2Value = 123; akitaScenario.setVar(variable2Name, variable2Value); ds.checkingTwoVariablesAreNotEquals(variable1Name, variable2Name); } @Test(expected = AssertionError.class) - public void testCheckingTwoVariablesAreNotEqualsNegative(){ - String variable1Name = "number1"; int variable1Value = 666; + public void testCheckingTwoVariablesAreNotEqualsNegative() { + String variable1Name = "number1"; + int variable1Value = 666; akitaScenario.setVar(variable1Name, variable1Value); - String variable2Name = "number2"; int variable2Value = 666; + String variable2Name = "number2"; + int variable2Value = 666; akitaScenario.setVar(variable2Name, variable2Value); ds.checkingTwoVariablesAreNotEquals(variable1Name, variable2Name); } @Test(expected = IllegalArgumentException.class) - public void testCheckingTwoVariablesAreNotEqualsAnotherNegative(){ + public void testCheckingTwoVariablesAreNotEqualsAnotherNegative() { String variable1Name = "number1", variable1Value = null; akitaScenario.setVar(variable1Name, variable1Value); @@ -225,12 +226,12 @@ public void testLoadPageNegative() { } @Test - public void testLoadPageFailedPositive(){ + public void testLoadPageFailedPositive() { ds.loadPageFailed("RedirectionPage"); } @Test(expected = IllegalArgumentException.class) - public void testLoadPageFailedNegative(){ + public void testLoadPageFailedNegative() { ds.loadPageFailed("thisPageDoesNotExists"); } @@ -443,7 +444,7 @@ public void findElementMixedLanguagePositive() { ds.findElement("EnGliSh? РуСсКий."); sleep(500); assertThat(WebDriverRunner.getWebDriver().findElement(By.name("mixedButton")) - .isEnabled(), is(false)); + .isEnabled(), is(false)); } @Test @@ -451,7 +452,7 @@ public void findElementMixedLanguagePartialRuPositive() { ds.findElement("РуСсКий."); sleep(500); assertThat(WebDriverRunner.getWebDriver().findElement(By.name("mixedButton")) - .isEnabled(), is(false)); + .isEnabled(), is(false)); } @Test @@ -459,8 +460,9 @@ public void findElementMixedLanguagePartialEnPositive() { ds.findElement("EnGliSh"); sleep(500); assertThat(WebDriverRunner.getWebDriver().findElement(By.name("mixedButton")) - .isEnabled(), is(false)); + .isEnabled(), is(false)); } + @Test public void currentDatePositive() { ds.currentDate("NormalField", "dd.MM.yyyy"); @@ -586,8 +588,10 @@ public void selectRandomElementFromListPositive() { public void selectRandomElementFromListAndSaveVarPositive() { ds.selectRandomElementFromListAndSaveVar("List", "test"); assertThat(akitaScenario.tryGetVar("test"), anyOf(equalTo("One"), - equalTo("Two"), equalTo("Three"))); - }; + equalTo("Two"), equalTo("Three"))); + } + + ; @Test(expected = IllegalArgumentException.class) public void selectRandomElementFromListAndSaveVarNegative() { @@ -725,23 +729,23 @@ public void testSetRandomCharSequenceLathin() { public void testSetRandomCharSequenceAndSaveToVarCyrillic() { ds.setRandomCharSequenceAndSaveToVar("NormalField", 4, "кириллице", "test"); assertThat(akitaScenario.getEnvironment() - .getPage("AkitaPageMock") - .getAnyElementText("NormalField"), - equalTo(akitaScenario.getVar("test"))); + .getPage("AkitaPageMock") + .getAnyElementText("NormalField"), + equalTo(akitaScenario.getVar("test"))); } @Test public void testSetRandomCharSequenceAndSaveToVarLathin() { ds.setRandomCharSequenceAndSaveToVar("NormalField", 7, "латинице", "test"); assertThat(akitaScenario.getEnvironment() - .getPage("AkitaPageMock") - .getAnyElementText("NormalField"), - equalTo(akitaScenario.getVar("test"))); + .getPage("AkitaPageMock") + .getAnyElementText("NormalField"), + equalTo(akitaScenario.getVar("test"))); } @Test public void testInputRandomNumSequencePositive() { - ds.inputRandomNumSequence("NormalField",4); + ds.inputRandomNumSequence("NormalField", 4); assertThat(akitaScenario.getEnvironment() .getPage("AkitaPageMock") .getAnyElementText("NormalField").length(), @@ -752,8 +756,8 @@ public void testInputRandomNumSequencePositive() { public void testInputRandomNumSequenceNegative() { ds.inputRandomNumSequence("GoodButton", 4); assertThat(akitaScenario.getEnvironment() - .getPage("AkitaPageMock") - .getAnyElementText("GoodButton").length(), + .getPage("AkitaPageMock") + .getAnyElementText("GoodButton").length(), equalTo(4)); } @@ -772,9 +776,9 @@ public void testInputAndSetRandomNumSequenceOverrideVariable() { akitaScenario.write(String.format("11111111111 [%s]", akitaScenario.getVar("test"))); ds.inputAndSetRandomNumSequence("NormalField", 5, "test"); assertThat(akitaScenario.getEnvironment() - .getPage("AkitaPageMock") - .getAnyElementText("NormalField"), - equalTo(akitaScenario.getVar("test"))); + .getPage("AkitaPageMock") + .getAnyElementText("NormalField"), + equalTo(akitaScenario.getVar("test"))); } @Test @@ -880,22 +884,22 @@ public void testListContainsNumberOfElementsOrContainsFromVariableNegative() { } @Test - public void testListContainsMoreOrLessElementsLessPositive(){ + public void testListContainsMoreOrLessElementsLessPositive() { ds.listContainsMoreOrLessElements("List", "менее", 4); } @Test - public void testListContainsMoreOrLessElementsMorePositive(){ + public void testListContainsMoreOrLessElementsMorePositive() { ds.listContainsMoreOrLessElements("List", "более", 2); } @Test(expected = AssertionError.class) - public void testListContainsMoreOrLessElementsLessNegative(){ + public void testListContainsMoreOrLessElementsLessNegative() { ds.listContainsMoreOrLessElements("List", "менее", 3); } @Test(expected = AssertionError.class) - public void testListContainsMoreOrLessElementsMoreNegative(){ + public void testListContainsMoreOrLessElementsMoreNegative() { ds.listContainsMoreOrLessElements("List", "более", 3); } @@ -920,15 +924,15 @@ public void testScrollWhileElemWithTextNotFoundOnPageNegative() { } @Test - public void testCheckIfValueFromVariableEqualPropertyVariablePositive(){ - akitaScenario.setVar("timeout","1000"); - ds.checkIfValueFromVariableEqualPropertyVariable("timeout","waitingAppearTimeout"); + public void testCheckIfValueFromVariableEqualPropertyVariablePositive() { + akitaScenario.setVar("timeout", "1000"); + ds.checkIfValueFromVariableEqualPropertyVariable("timeout", "waitingAppearTimeout"); } @Test(expected = AssertionError.class) - public void testCheckIfValueFromVariableEqualPropertyVariableNegative(){ - akitaScenario.setVar("timeout","500"); - ds.checkIfValueFromVariableEqualPropertyVariable("timeout","waitingAppearTimeout"); + public void testCheckIfValueFromVariableEqualPropertyVariableNegative() { + akitaScenario.setVar("timeout", "500"); + ds.checkIfValueFromVariableEqualPropertyVariable("timeout", "waitingAppearTimeout"); } @Test @@ -980,7 +984,7 @@ public void testfillTemplate() { String varName = "varName"; List row1 = new ArrayList<>(Arrays.asList("_name_", "Jack")); List row2 = new ArrayList<>(Arrays.asList("_age_", "35")); - List> allLists= new ArrayList<>(); + List> allLists = new ArrayList<>(); allLists.add(row1); allLists.add(row2); DataTable dataTable = dataTableFromLists(allLists); @@ -989,4 +993,4 @@ public void testfillTemplate() { Assert.assertEquals("{\"name\": \"Jack\", \"age\": 35}", (String) akitaScenario.getVar(varName)); } -} +} \ No newline at end of file