diff --git a/.idea/runConfigurations/All_and_Generate_Allure_Report.xml b/.idea/runConfigurations/All_and_Generate_Allure_Report.xml deleted file mode 100644 index d040c7c..0000000 --- a/.idea/runConfigurations/All_and_Generate_Allure_Report.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/allure-results/environment.properties b/allure-results/environment.properties new file mode 100644 index 0000000..9fb7489 --- /dev/null +++ b/allure-results/environment.properties @@ -0,0 +1,3 @@ +Browser=Chrome +Browser.Version=63.0 +Stand=Production \ No newline at end of file diff --git a/pom.xml b/pom.xml index 6ac690e..d1c5985 100644 --- a/pom.xml +++ b/pom.xml @@ -9,8 +9,9 @@ 1.0-SNAPSHOT - 1.5.2 + 2.9 1.8.10 + @@ -18,10 +19,19 @@ bintray http://jcenter.bintray.com + + jitpack.io + https://jitpack.io + + + com.github.appium + java-client + 18eba21 + org.seleniumhq.selenium selenium-java @@ -33,24 +43,26 @@ serritor 1.1 + + org.elasticsearch.client + transport + 6.4.2 + ru.yandex.qatools.htmlelements htmlelements-java 1.17 - ru.yandex.qatools.allure - allure-testng-adaptor - ${allure.version} - - - junit - junit - - + io.qameta.allure + allure-testng + 2.7.0 + test - - + + javax.xml.bind + jaxb-api + 2.3.0 org.hamcrest hamcrest-all @@ -59,7 +71,7 @@ org.testng testng - 6.11 + 6.14.3 test @@ -76,7 +88,6 @@ maven-surefire-plugin 2.20 - true -javaagent:"${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar" @@ -137,6 +148,11 @@ + + io.qameta.allure + allure-maven + 2.9 + @@ -146,7 +162,7 @@ ru.yandex.qatools.allure allure-maven-plugin - 2.5 + 2.7.0 diff --git a/src/test/java/io/lazycoder/Config.java b/src/test/java/io/lazycoder/Config.java index b2ec6a4..cafd947 100644 --- a/src/test/java/io/lazycoder/Config.java +++ b/src/test/java/io/lazycoder/Config.java @@ -1,6 +1,8 @@ package io.lazycoder; import java.io.*; +import java.nio.file.Files; +import java.nio.file.Paths; import java.util.Properties; /** @@ -44,6 +46,10 @@ public Properties getPropertiesFromFile() { public void saveParamChanges() { try { File f = new File("target/allure-results/environment.properties"); + if(!f.exists()){ + Files.createDirectories(Paths.get("target/allure-results/environment.properties").getParent()); + f.createNewFile(); + } OutputStream out = new FileOutputStream( f ); prop.store(out, "This is an optional header comment string"); } diff --git a/src/test/java/io/lazycoder/helpers/DB.java b/src/test/java/io/lazycoder/helpers/DB.java new file mode 100644 index 0000000..934e913 --- /dev/null +++ b/src/test/java/io/lazycoder/helpers/DB.java @@ -0,0 +1,56 @@ +package io.lazycoder.helpers; + +import org.elasticsearch.action.get.GetResponse; +import org.elasticsearch.action.index.IndexResponse; +import org.elasticsearch.action.search.SearchResponse; +import org.elasticsearch.action.search.SearchType; +import org.elasticsearch.client.transport.TransportClient; +import org.elasticsearch.common.settings.Settings; +import org.elasticsearch.index.Index; +import org.elasticsearch.index.query.QueryBuilders; +import org.elasticsearch.transport.client.PreBuiltTransportClient; + +import java.time.LocalDateTime; +import java.util.Date; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.Map; + +import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder; + +public class DB { + + public User GetUser(HashMap userProps){ + return new User(userProps); + } + + public String getFromES(String id){ + Map record = new LinkedHashMap(); + record.put("Date", LocalDateTime.now().toString()); + + Settings settings = Settings.builder() + .put("cluster.name", "myClusterName").build(); + TransportClient client = new PreBuiltTransportClient(settings); + + GetResponse response = client.prepareGet("TestUsers", "user", id).get(); + + return GetUser(response.getFields()); + + } + + public String storeInES(User user){ + Map record = new LinkedHashMap(); + record.put("Date", LocalDateTime.now().toString()); + record.put("user_record", user); + + Settings settings = Settings.builder() + .put("cluster.name", "myClusterName").build(); + TransportClient client = new PreBuiltTransportClient(settings); + + IndexResponse response = client.prepareIndex("TestUsers", "user") + .setSource(record) + .get(); + + return response.getId(); + } +} diff --git a/src/test/java/io/lazycoder/helpers/General.java b/src/test/java/io/lazycoder/helpers/General.java new file mode 100644 index 0000000..4332557 --- /dev/null +++ b/src/test/java/io/lazycoder/helpers/General.java @@ -0,0 +1,11 @@ +package io.lazycoder.helpers; + +import java.util.Arrays; + +public class General { + + public boolean doesObjectContainField(Object object, String fieldName) { + return Arrays.stream(object.getClass().getFields()) + .anyMatch(f -> f.getName().equals(fieldName)); + } +} diff --git a/src/test/java/io/lazycoder/helpers/Random.java b/src/test/java/io/lazycoder/helpers/Random.java new file mode 100644 index 0000000..66f2d67 --- /dev/null +++ b/src/test/java/io/lazycoder/helpers/Random.java @@ -0,0 +1,10 @@ +package io.lazycoder.helpers; + +import java.util.Date; + +public class Random { + + public Date Date(){ + return new Date(); + } +} diff --git a/src/test/java/io/lazycoder/helpers/User.java b/src/test/java/io/lazycoder/helpers/User.java new file mode 100644 index 0000000..76468ff --- /dev/null +++ b/src/test/java/io/lazycoder/helpers/User.java @@ -0,0 +1,104 @@ +package io.lazycoder.helpers; + +import com.fasterxml.jackson.databind.ObjectMapper; +import org.apache.commons.lang3.RandomStringUtils; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +public class User { + + private static final String FIRSTNAME_PROPERTY = "firstname"; + private static final String LASTNAME_PROPERTY = "lastname"; + private static final String USERNAME_PROPERTY = "username"; + private static final String PASSWORD_PROPERTY = "password"; + private static final String BIRTHDATE_PROPERTY = "birthdate"; + + + public String lastName; + public String firstName; + public String userName; + public String password; + public Date birthdate; + + public HashMap changedValues; + + public User(){ + this.firstName = RandomStringUtils.randomAlphabetic(7); + this.lastName = RandomStringUtils.randomAlphabetic(7); + this.userName = RandomStringUtils.randomAlphabetic(7); + this.password = RandomStringUtils.randomAlphabetic(7); + this.birthdate = new Random().Date(); + this.changedValues = new HashMap(); + } + + public User(Boolean reuse){ + if(reuse){ + new DB().GetUser(); + } + else { + new User(); + } + } + + public User(String id){ + + } + + + public User(Map map){ + firstName = (String)map.get(FIRSTNAME_PROPERTY); + lastName = (String)map.get(LASTNAME_PROPERTY); + userName = (String)map.get(USERNAME_PROPERTY); + password = (String)map.get(PASSWORD_PROPERTY); + birthdate = (Date)map.get(BIRTHDATE_PROPERTY); + + } + + public String getFirstName(){ + return firstName; + } + + public User setFirstName(String name){ + changedValues.put(FIRSTNAME_PROPERTY, firstName); + firstName = name; + return this; + } + + public User setNewPassword(String newPassword){ + changedValues.put(PASSWORD_PROPERTY, password); + password = newPassword; + return this; + } + + public String getOldPassword(){ + return changedValues.get(PASSWORD_PROPERTY).toString(); + } + + public String getBirthdate(){ + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); + return formatter.format(birthdate); + } + + public User setBirthDate(Date date){ + if(doesFieldExist("birthdate")){ + changedValues.put(BIRTHDATE_PROPERTY, birthdate); + } + birthdate = date; + return this; + } + + public User setBirthDate(){ + return setBirthDate(new Random().Date()); + } + + public Map exportUser(){ + return new ObjectMapper().convertValue(this, Map.class); + } + + public boolean doesFieldExist(String field){ + return new General().doesObjectContainField(this, field); + } +} diff --git a/src/test/java/io/lazycoder/pages/admin/ChatBox.java b/src/test/java/io/lazycoder/pages/admin/ChatBox.java new file mode 100644 index 0000000..3861668 --- /dev/null +++ b/src/test/java/io/lazycoder/pages/admin/ChatBox.java @@ -0,0 +1,4 @@ +package io.lazycoder.pages.admin; + +public class ChatBox { +} diff --git a/src/test/java/io/lazycoder/pages/admin/adminBase.java b/src/test/java/io/lazycoder/pages/admin/adminBase.java new file mode 100644 index 0000000..e854cb3 --- /dev/null +++ b/src/test/java/io/lazycoder/pages/admin/adminBase.java @@ -0,0 +1,35 @@ +package io.lazycoder.pages.admin; + +import io.lazycoder.pages.admin.complexFormPage.UserInfoSection; +import io.lazycoder.pages.admin.complexFormPage.complexFormBasePage; +import io.lazycoder.pages.admin.settings.callSettings.callSettingsBasePage; +import io.lazycoder.pages.admin.settings.generalSettingsPage; +import io.lazycoder.pages.admin.settings.settingsBase; +import io.lazycoder.pages.basePage; +import io.lazycoder.pages.noauth.logOutPage; +import org.openqa.selenium.By; + +public class adminBase extends basePage { + + By settingsButton = By.id("settings"); + + By personalSettings = By.cssSelector(""); + + public adminBase() { + super("/admin", ""); + } + + public complexFormBasePage switchToComplexForm(){ + clickOn(personalSettings); + return new complexFormBasePage(); + } + + public settingsBase switchToSettings() { + clickOn(settingsButton); + return new settingsBase(); + } + public UserInfoSection completeUserProfile(){ + clickOn(personalSettings); + return new UserInfoSection(); + } +} diff --git a/src/test/java/io/lazycoder/pages/admin/complexFormPage/SpouseInfoSection.java b/src/test/java/io/lazycoder/pages/admin/complexFormPage/SpouseInfoSection.java new file mode 100644 index 0000000..a6d9229 --- /dev/null +++ b/src/test/java/io/lazycoder/pages/admin/complexFormPage/SpouseInfoSection.java @@ -0,0 +1,46 @@ +package io.lazycoder.pages.admin.complexFormPage; + +import io.lazycoder.helpers.User; +import io.lazycoder.pages.basePage; +import io.lazycoder.pages.noauth.homePage; +import org.openqa.selenium.By; + +import java.util.Date; + + +public class SpouseInfoSection extends basePage { + + By field1 = By.className(""); + By continueButton = By.cssSelector(""); + + + public homePage fillFields(User user){ + return this.firstName(user.firstName).lastName(user.lastName).birthDate(user.birthdate).next(); + } + + public SpouseInfoSection fillField1(String value){ + type(value, field1); + return this; + } + + public SpouseInfoSection firstName(String value){ + type(value, field1); + return this; + } + public SpouseInfoSection lastName(String value){ + type(value, field1); + return this; + } + public SpouseInfoSection birthDate(Date value){ + type(value.toString(), field1); + return this; + } + + public homePage next(){ + clickOn(continueButton); + return new homePage(); + } + + + +} diff --git a/src/test/java/io/lazycoder/pages/admin/complexFormPage/UserInfoSection.java b/src/test/java/io/lazycoder/pages/admin/complexFormPage/UserInfoSection.java new file mode 100644 index 0000000..84ccfb2 --- /dev/null +++ b/src/test/java/io/lazycoder/pages/admin/complexFormPage/UserInfoSection.java @@ -0,0 +1,42 @@ +package io.lazycoder.pages.admin.complexFormPage; + +import io.lazycoder.helpers.User; +import io.lazycoder.pages.basePage; +import org.openqa.selenium.By; + +import java.util.Date; + +public class UserInfoSection extends basePage { + + By field1 = By.className(""); + By continueButton = By.cssSelector(""); + + public UserInfoSection fillField1(String value){ + type(value, field1); + return this; + } + public SpouseInfoSection fillFields(User user){ + return this.firstName(user.firstName) + .lastName(user.lastName) + .birthDate(user.birthdate) + .next(); + } + + public UserInfoSection firstName(String value){ + type(value, field1); + return this; + } + public UserInfoSection lastName(String value){ + type(value, field1); + return this; + } + public UserInfoSection birthDate(Date value){ + type(value.toString(), field1); + return this; + } + + public SpouseInfoSection next(){ + clickOn(continueButton); + return new SpouseInfoSection(); + } +} diff --git a/src/test/java/io/lazycoder/pages/admin/complexFormPage/complexFormBasePage.java b/src/test/java/io/lazycoder/pages/admin/complexFormPage/complexFormBasePage.java new file mode 100644 index 0000000..3707f05 --- /dev/null +++ b/src/test/java/io/lazycoder/pages/admin/complexFormPage/complexFormBasePage.java @@ -0,0 +1,18 @@ +package io.lazycoder.pages.admin.complexFormPage; + +import io.lazycoder.helpers.User; +import io.lazycoder.pages.admin.adminBase; + +import java.util.Map; + +public class complexFormBasePage extends adminBase { + + UserInfoSection userInfoSection = new UserInfoSection(); + SpouseInfoSection spouseInfoSection = new SpouseInfoSection(); + + public complexFormBasePage fillRequiredFields(User self, User spouse){ + userInfoSection.fillFields(self); + spouseInfoSection.fillFields(spouse); + return this; + } +} diff --git a/src/test/java/io/lazycoder/pages/admin/settings/callSettings/audioCallPage.java b/src/test/java/io/lazycoder/pages/admin/settings/callSettings/audioCallPage.java new file mode 100644 index 0000000..a0163a9 --- /dev/null +++ b/src/test/java/io/lazycoder/pages/admin/settings/callSettings/audioCallPage.java @@ -0,0 +1,9 @@ +package io.lazycoder.pages.admin.settings.callSettings; + +public class audioCallPage extends callSettingsBasePage{ + + + public audioCallPage changeSettings(){ + return this; + } +} diff --git a/src/test/java/io/lazycoder/pages/admin/settings/callSettings/callSettingsBasePage.java b/src/test/java/io/lazycoder/pages/admin/settings/callSettings/callSettingsBasePage.java new file mode 100644 index 0000000..a93d36c --- /dev/null +++ b/src/test/java/io/lazycoder/pages/admin/settings/callSettings/callSettingsBasePage.java @@ -0,0 +1,21 @@ +package io.lazycoder.pages.admin.settings.callSettings; + +import io.lazycoder.pages.admin.settings.settingsBase; +import org.openqa.selenium.By; + +public class callSettingsBasePage extends settingsBase { + + By audioSettingsLink = By.cssSelector(""); + By videoSettingsLink = By.cssSelector(""); + + + public audioCallPage switchToAudioSettings(){ + clickOn(audioSettingsLink); + return new audioCallPage(); + } + + public videoCallPage switchToVideoSettings(){ + clickOn(videoSettingsLink); + return new videoCallPage(); + } +} diff --git a/src/test/java/io/lazycoder/pages/admin/settings/callSettings/videoCallPage.java b/src/test/java/io/lazycoder/pages/admin/settings/callSettings/videoCallPage.java new file mode 100644 index 0000000..1a2ddd0 --- /dev/null +++ b/src/test/java/io/lazycoder/pages/admin/settings/callSettings/videoCallPage.java @@ -0,0 +1,8 @@ +package io.lazycoder.pages.admin.settings.callSettings; + +public class videoCallPage extends callSettingsBasePage { + + public videoCallPage changeSettings(){ + return this; + } +} diff --git a/src/test/java/io/lazycoder/pages/admin/settings/generalSettingsPage.java b/src/test/java/io/lazycoder/pages/admin/settings/generalSettingsPage.java new file mode 100644 index 0000000..d8017b8 --- /dev/null +++ b/src/test/java/io/lazycoder/pages/admin/settings/generalSettingsPage.java @@ -0,0 +1,26 @@ +package io.lazycoder.pages.admin.settings; + +import org.openqa.selenium.By; + +public class generalSettingsPage extends settingsBase { + + private By changePasswordButton; + private By oldPasswordField; + private By newPasswordField; + private By secondaryPasswordField; + private By saveButton; + + public generalSettingsPage changePassword(String oldPassword, String newPassword, String secondaryPassword){ + clickOn(changePasswordButton); + type(oldPassword, oldPasswordField); + type(newPassword, newPasswordField); + type(secondaryPassword, secondaryPasswordField); + clickOn(saveButton); + return this; + } + + public generalSettingsPage changePassword(String oldPassword, String newPassword){ + return changePassword(oldPassword, newPassword, newPassword); + } + +} diff --git a/src/test/java/io/lazycoder/pages/admin/settings/settingsBase.java b/src/test/java/io/lazycoder/pages/admin/settings/settingsBase.java new file mode 100644 index 0000000..cb6f245 --- /dev/null +++ b/src/test/java/io/lazycoder/pages/admin/settings/settingsBase.java @@ -0,0 +1,36 @@ +package io.lazycoder.pages.admin.settings; + +import io.lazycoder.pages.admin.adminBase; +import io.lazycoder.pages.admin.settings.callSettings.callSettingsBasePage; +import org.openqa.selenium.By; + +public class settingsBase extends adminBase { + /** + * init base page + * + * @param url the partial url to this page, if not matching current url then navigating to it + * @param title the title of the page + */ + + By callSettingsTab = By.cssSelector(""); + By generalSettingsTab = By.cssSelector(""); + + By tab1 = By.cssSelector(""); + By tab2 = By.cssSelector(""); + By tab3 = By.cssSelector(""); + By tab4 = By.cssSelector(""); + + public settingsBase() { + super(); + } + + public callSettingsBasePage switchToCallSettingsTab(){ + clickOn(callSettingsTab); + return new callSettingsBasePage(); + } + + public generalSettingsPage switchToGeneralSettingsTab(){ + clickOn(generalSettingsTab); + return new generalSettingsPage(); + } +} diff --git a/src/test/java/io/lazycoder/pages/basePage.java b/src/test/java/io/lazycoder/pages/basePage.java index 036ddab..e5371dd 100644 --- a/src/test/java/io/lazycoder/pages/basePage.java +++ b/src/test/java/io/lazycoder/pages/basePage.java @@ -1,12 +1,13 @@ package io.lazycoder.pages; +import io.qameta.allure.Attachment; +import io.qameta.allure.Step; import org.openqa.selenium.*; import org.openqa.selenium.support.PageFactory; import org.openqa.selenium.support.ui.ExpectedConditions; import org.openqa.selenium.support.ui.WebDriverWait; import org.testng.Assert; -import ru.yandex.qatools.allure.annotations.Attachment; -import ru.yandex.qatools.allure.annotations.Step; + import ru.yandex.qatools.ashot.AShot; import ru.yandex.qatools.ashot.Screenshot; import ru.yandex.qatools.ashot.cropper.indent.IndentCropper; @@ -17,6 +18,7 @@ import java.io.IOException; import java.util.HashMap; import java.util.Properties; +import java.util.concurrent.TimeUnit; import static io.lazycoder.tests.baseTest.*; import static ru.yandex.qatools.ashot.cropper.indent.IndentFilerFactory.blur; @@ -24,7 +26,7 @@ /** * Created by Andrew Krug on 1/16/2017. */ -public class basePage

>{ +public abstract class basePage

>{ protected HashMap store; protected Properties _properties; protected WebDriver _driver; @@ -49,6 +51,12 @@ public basePage(String url, String title){ } + public basePage(){ + this._driver = getDriver(); + this._properties = getProperties(); + this.store = getStore(); + saveToReport("Current URL: " + _driver.getCurrentUrl()); + } /** * specific method that navigates to this page and leaves you in the same class for method chaining * @return the class that is called from @@ -101,7 +109,7 @@ public P saveSceenShot(){ * Method that actually takes a screenshot. * @return the screenshot as a Byte array */ - @Attachment("Page Screenshot") + @Attachment(value="Page Screenshot", type="image/png") public byte[] makeScreenshot() { System.out.println("getting screenshot"); return ((TakesScreenshot) _driver).getScreenshotAs(OutputType.BYTES); @@ -175,6 +183,11 @@ public P clickOn(By locator){ return (P)this; } +// public P clickOn(By locator, int timeout){ +// find(locator, timeout).click(); +// return (P)this; +// } + /** * wrapper for explicit wait and click using the locator instead * @param locator locator to use @@ -183,13 +196,29 @@ public P clickOn(By locator){ */ @Step("Click on {0}") public P clickOn(By locator, int timeout){ - new WebDriverWait(_driver, 5).until(ExpectedConditions.elementToBeClickable(_driver.findElement(locator))); + new WebDriverWait(_driver, timeout).until(ExpectedConditions.elementToBeClickable(_driver.findElement(locator))); WebElement element = _driver.findElement(locator); saveCroppedBlurredSS(element); element.click(); return (P)this; } + public WebElement find(By locator){ + return _driver.findElement(locator); + } + + public WebElement find(By locator, int timeout){ + WebDriverWait wait = new WebDriverWait(_driver, timeout); + wait.until(ExpectedConditions.elementToBeClickable(locator)); + return _driver.findElement(locator); + } + + public P type(String text, By locator){ + find(locator).sendKeys(text); + return (P)this; + } + + /** * Saves the value to the key in the store, used to quickly retrieve the value for later assertions * @param key @@ -242,4 +271,26 @@ public P refreshPage(){ saveSceenShot(); return (P)this; } + + protected boolean isElementVisibleNow(By locator, int timeout) { + _driver.manage().timeouts(). + implicitlyWait(0, TimeUnit.SECONDS); + + boolean result = false; + WebDriverWait wait = new WebDriverWait(_driver, timeout); + wait.until(ExpectedConditions. + visibilityOfElementLocated(locator)); + + + _driver.manage().timeouts(). + implicitlyWait(10, TimeUnit.SECONDS); + + return true; + } + + public boolean isMobile(){ + if(_driver.manage().window().getSize().width <= 800) + return true; + else return false; + } } \ No newline at end of file diff --git a/src/test/java/io/lazycoder/pages/noauth/BlogPage.java b/src/test/java/io/lazycoder/pages/noauth/BlogPage.java new file mode 100644 index 0000000..9fe3c6f --- /dev/null +++ b/src/test/java/io/lazycoder/pages/noauth/BlogPage.java @@ -0,0 +1,15 @@ +package io.lazycoder.pages.noauth; + +import io.lazycoder.pages.basePage; + +public class BlogPage extends basePage { + static String title = "Blog"; + static String url = ""; + + public BlogPage() { + super(url,title); + if(!_driver.getCurrentUrl().contains("lazycoder.io")){ + _driver.get(_properties.getProperty("baseurl")); + } + } +} diff --git a/src/test/java/io/lazycoder/pages/noauth/homePage.java b/src/test/java/io/lazycoder/pages/noauth/homePage.java index ab053fe..a5221a5 100644 --- a/src/test/java/io/lazycoder/pages/noauth/homePage.java +++ b/src/test/java/io/lazycoder/pages/noauth/homePage.java @@ -1,6 +1,10 @@ package io.lazycoder.pages.noauth; +import io.lazycoder.helpers.User; +import io.lazycoder.pages.admin.ChatBox; +import io.lazycoder.pages.admin.adminBase; import io.lazycoder.pages.basePage; +import org.openqa.selenium.By; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.FindBy; import org.openqa.selenium.support.How; @@ -13,13 +17,44 @@ public class homePage extends basePage { static String url = ""; static String title = "Lazy Coder"; + By usernameField = By.cssSelector(""); + By passwordField = By.cssSelector(""); + By submitButton = By.cssSelector(""); + + By chatButton = By.className("convertfox-chat"); + + By BlogPageNavigation = By.cssSelector("a[href*='/blog']"); + By menuButton = By.cssSelector("#menu-toggle"); @FindBy(how = How.ID, using = "nav-login") WebElement loginButton; public homePage() { super(url,title); + if(!_driver.getCurrentUrl().contains("lazycoder.io")){ + _driver.get(_properties.getProperty("baseurl")); + } } + public adminBase loginAs(User user){ + type(user.userName, usernameField); + type(user.password, passwordField); + clickOn(submitButton); + return new adminBase(); + } + + public ChatBox openChat(){ + isElementVisibleNow(chatButton, 10); + clickOn(chatButton); + return new ChatBox(); + } + public BlogPage GoToBlog(){ + if(isMobile()){ + clickOn(menuButton); + } + clickOn(BlogPageNavigation, 1); + return new BlogPage(); + } + } diff --git a/src/test/java/io/lazycoder/pages/noauth/logOutPage.java b/src/test/java/io/lazycoder/pages/noauth/logOutPage.java new file mode 100644 index 0000000..e5d513c --- /dev/null +++ b/src/test/java/io/lazycoder/pages/noauth/logOutPage.java @@ -0,0 +1,15 @@ +package io.lazycoder.pages.noauth; + +import io.lazycoder.pages.basePage; + +public class logOutPage extends basePage { + /** + * init base page + * + * @param url the partial url to this page, if not matching current url then navigating to it + * @param title the title of the page + */ + public logOutPage() { + super("/logged out", "Logged Out"); + } +} diff --git a/src/test/java/io/lazycoder/tests/admin/settings.java b/src/test/java/io/lazycoder/tests/admin/settings.java new file mode 100644 index 0000000..2ae2b78 --- /dev/null +++ b/src/test/java/io/lazycoder/tests/admin/settings.java @@ -0,0 +1,140 @@ +package io.lazycoder.tests.admin; + +import io.lazycoder.helpers.User; +import io.lazycoder.tests.baseTest; +import org.apache.commons.lang3.RandomStringUtils; +import org.testng.annotations.Test; + +public class settings extends baseTest { + + User user = new User(false); + + + + + + + + + + public void settingsLevelSwitching(){ + + user.setNewPassword(RandomStringUtils.randomAlphabetic(7)); + homepage.loginAs(user) + .switchToSettings() + .switchToCallSettingsTab() + .switchToVideoSettings() + .changeSettings().switchToAudioSettings() + .switchToCallSettingsTab() + .switchToGeneralSettingsTab().switchToCallSettingsTab().switchToAudioSettings(); + + } + + + + + + + + + + + + + + + @Test + public void TabsSwitching(){ + + user.setNewPassword(RandomStringUtils.randomAlphabetic(7)); + homepage + .loginAs(user) + .switchToSettings(); + + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + public void fillInfo(){ + User self = new User(); + User spouse = new User(); + homepage + .loginAs(self) + .completeUserProfile() + .firstName(self.firstName) + .lastName(self.lastName) + .birthDate(self.birthdate) + .next() + .firstName(spouse.lastName) + .lastName(spouse.lastName) + .birthDate(spouse.birthdate) + .next(); + + } + + + + + + + + + + public void fillhealthcare(){ + User self = new User(); + User spouse = new User(); + homepage + .loginAs(self) + .switchToComplexForm() + .fillRequiredFields(self, spouse); + + } + + public void fillhealthcare(){ + User self = new User(); + User spouse = new User(); + homepage + .loginAs(self) + .switchToComplexForm() + .fillRequiredFields(self, spouse); + + } +} diff --git a/src/test/java/io/lazycoder/tests/baseTest.java b/src/test/java/io/lazycoder/tests/baseTest.java index 1d65b49..a59a266 100644 --- a/src/test/java/io/lazycoder/tests/baseTest.java +++ b/src/test/java/io/lazycoder/tests/baseTest.java @@ -1,19 +1,26 @@ package io.lazycoder.tests; +import io.appium.java_client.AppiumDriver; +import io.appium.java_client.remote.MobileCapabilityType; import io.lazycoder.Config; +import io.lazycoder.helpers.User; import io.lazycoder.pages.noauth.homePage; +import io.qameta.allure.Attachment; +import io.qameta.allure.Step; import org.openqa.selenium.OutputType; import org.openqa.selenium.TakesScreenshot; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; +import org.openqa.selenium.remote.DesiredCapabilities; +import org.testng.ITestResult; import org.testng.annotations.AfterMethod; import org.testng.annotations.AfterSuite; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Parameters; -import ru.yandex.qatools.allure.annotations.Attachment; -import ru.yandex.qatools.allure.annotations.Parameter; -import ru.yandex.qatools.allure.annotations.Step; + +import java.net.MalformedURLException; +import java.net.URL; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -31,6 +38,7 @@ public class baseTest > { protected static HashMap store; private Config config; public homePage homepage; + private User user; public baseTest(){ this.store = new HashMap() ; @@ -41,19 +49,26 @@ public baseTest(){ /*** * This is the test setup that read-ins the properties that are in the suite XML files and attaches them to the properties. * The @Parameters is from TestNG and it pulls in the parameters that are defined in the suite XML files. - * @param base The - * @param pass + */ - @Parameters({"baseurl", "admin_password"}) +// @Parameters({"baseurl", "admin_password"}) @BeforeMethod - public void setup(@Parameter String base, @Parameter String pass) - { - _properties.put("baseurl", base); - _properties.put("admin_password", pass); + public void setup() throws MalformedURLException { +// _properties.put("baseurl", base); +// _properties.put("admin_password", pass); + if(_properties.get("Browser").equals("Mobile Safari")){ + DesiredCapabilities desiredCapabilities = new DesiredCapabilities(); + desiredCapabilities.setCapability(MobileCapabilityType.BROWSER_NAME, "Safari"); + URL url = new URL("http://127.0.0.1:4723/wd/hub"); + _driver = new AppiumDriver(url, desiredCapabilities); + } + else{ + _driver = new ChromeDriver(); + _driver.manage().window().maximize(); + } saveToReport(_properties.toString()); saveToReport("new driver"); - _driver = new ChromeDriver(); - _driver.manage().window().maximize(); + this.homepage = new homePage(); } @@ -62,8 +77,11 @@ public void setup(@Parameter String base, @Parameter String pass) * Closing the test and taking the final screenshot */ @AfterMethod - public void teardown() + public void teardown(ITestResult result) { + String testname = result.getMethod().getMethodName(); + + saveSceenShot("Test Complete"); saveToReport("closing driver"); _driver.quit(); diff --git a/src/test/java/io/lazycoder/tests/noauth/publicFacing.java b/src/test/java/io/lazycoder/tests/noauth/publicFacing.java index b0371ba..79d5ed9 100644 --- a/src/test/java/io/lazycoder/tests/noauth/publicFacing.java +++ b/src/test/java/io/lazycoder/tests/noauth/publicFacing.java @@ -2,25 +2,42 @@ import io.lazycoder.pages.noauth.homePage; import io.lazycoder.tests.baseTest; +import io.qameta.allure.Feature; +import io.qameta.allure.Story; +import org.openqa.selenium.Dimension; import org.testng.annotations.Test; -import ru.yandex.qatools.allure.annotations.Features; -import ru.yandex.qatools.allure.annotations.Stories; + /** * Created by Andrew Krug on 1/16/2017. */ @Test -@Features("Public Facing Pages Load") +@Feature("Public Facing Pages Load") public class publicFacing extends baseTest { - @Stories("Home Page Loads") + @Story("Home Page Loads") public void homePageLoads(){ homepage.navigateToThisPage().titleShouldBeExpected(); } - @Stories("About Page Loads") - public void haboutPageLoads(){ + @Story("Blog Page Loads") + public void BlogPageLoads(){ + + homepage.GoToBlog().titleShouldBeExpected(); + } + + @Story("Mobile Blog Page Loads") + public void MobileBlogPageLoads(){ + _driver.manage().window().setSize(new Dimension(800, 600)); + homepage.GoToBlog().titleShouldBeExpected(); + } + + + @Story("Chat Loads") + public void ChatLoads(){ homePage page = new homePage(); - page.navigateToThisPage().titleShouldBeExpected(); + page.openChat(); } + + } \ No newline at end of file diff --git a/src/test/resources/config.properties b/src/test/resources/config.properties index e69de29..7ff2165 100644 --- a/src/test/resources/config.properties +++ b/src/test/resources/config.properties @@ -0,0 +1,4 @@ +Browser=Chrome +Browser.Version=63.0 +Stand=Production +baseurl=https://lazycoder.io \ No newline at end of file