diff --git a/src/main/java/com/solvd/carina/demo/gui/mobilworld/android/components/Menu.java b/src/main/java/com/solvd/carina/demo/gui/mobilworld/android/components/Menu.java index abc564a..e6e6aa5 100644 --- a/src/main/java/com/solvd/carina/demo/gui/mobilworld/android/components/Menu.java +++ b/src/main/java/com/solvd/carina/demo/gui/mobilworld/android/components/Menu.java @@ -1,13 +1,15 @@ package com.solvd.carina.demo.gui.mobilworld.android.components; import com.solvd.carina.demo.gui.mobilworld.android.*; +import com.solvd.carina.demo.gui.mobilworld.common.*; +import com.solvd.carina.demo.gui.mobilworld.common.components.MenuBase; import com.zebrunner.carina.webdriver.decorator.ExtendedWebElement; -import com.zebrunner.carina.webdriver.gui.AbstractUIObject; import org.openqa.selenium.SearchContext; import org.openqa.selenium.WebDriver; import org.openqa.selenium.support.FindBy; +import org.openqa.selenium.support.ui.ExpectedConditions; -public class Menu extends AbstractUIObject { +public class Menu extends MenuBase { @FindBy(xpath = "//div[@class='burger pull-left']") private ExtendedWebElement openMenuBtn; @@ -30,12 +32,14 @@ public class Menu extends AbstractUIObject { @FindBy(xpath = "//a[@href='/contacts/']") private ExtendedWebElement contactsSection; + private static final String THIS_METHOD_IS_DEFINED_ONLY_IN_IOS = "This method is only for IOS"; public Menu(WebDriver driver, SearchContext searchContext) { super(driver, searchContext); } public void openMenu() { + waitUntil(ExpectedConditions.elementToBeClickable(openMenuBtn.getBy()), 10); openMenuBtn.click(); } @@ -43,28 +47,33 @@ public void clickDevicesPage() { devicesSection.clickByJs(); } - public DevicesPage openDevicesPage() { + public DevicesPageBase openDevicesPage() { secondDevicesSection.clickByJs(); return new DevicesPage(driver); } - public ServicesPage openServicesPage() { + public ServicesPageBase openServicesPage() { serviceSection.clickByJs(); return new ServicesPage(driver); } - public SalesPage openSalesPage() { + public SalesPageBase openSalesPage() { salesSection.clickByJs(); return new SalesPage(driver); } - public BlogPage openBlogPage() { + public BlogPageBase openBlogPage() { blogSection.clickByJs(); return new BlogPage(driver); } - public ContactsPage openContactsPage() { + public ContactsPageBase openContactsPage() { contactsSection.clickByJs(); return new ContactsPage(driver); } + + @Override + public LoginPageBase openLoginPage() { + throw new UnsupportedOperationException(THIS_METHOD_IS_DEFINED_ONLY_IN_IOS); + } } diff --git a/src/main/java/com/solvd/carina/demo/gui/mobilworld/common/DevicesPageBase.java b/src/main/java/com/solvd/carina/demo/gui/mobilworld/common/DevicesPageBase.java index 6a22081..81ea966 100644 --- a/src/main/java/com/solvd/carina/demo/gui/mobilworld/common/DevicesPageBase.java +++ b/src/main/java/com/solvd/carina/demo/gui/mobilworld/common/DevicesPageBase.java @@ -1,6 +1,5 @@ package com.solvd.carina.demo.gui.mobilworld.common; -import com.solvd.carina.demo.gui.mobilworld.android.IphonePage; import com.zebrunner.carina.webdriver.gui.AbstractPage; import org.openqa.selenium.WebDriver; @@ -10,5 +9,5 @@ public DevicesPageBase(WebDriver driver) { super(driver); } - public abstract IphonePage openIphoneSection(); + public abstract IphonePageBase openIphoneSection(); } diff --git a/src/main/java/com/solvd/carina/demo/gui/mobilworld/common/IphonePageBase.java b/src/main/java/com/solvd/carina/demo/gui/mobilworld/common/IphonePageBase.java index f7170c4..b259ff1 100644 --- a/src/main/java/com/solvd/carina/demo/gui/mobilworld/common/IphonePageBase.java +++ b/src/main/java/com/solvd/carina/demo/gui/mobilworld/common/IphonePageBase.java @@ -17,4 +17,6 @@ public IphonePageBase(WebDriver driver) { public abstract ExtendedWebElement findModel(String model); public abstract boolean isModelsPresent(); + + public abstract SecondIphonePageBase openIphonePage(String model); } diff --git a/src/main/java/com/solvd/carina/demo/gui/mobilworld/common/LoginPageBase.java b/src/main/java/com/solvd/carina/demo/gui/mobilworld/common/LoginPageBase.java new file mode 100644 index 0000000..bc49c4f --- /dev/null +++ b/src/main/java/com/solvd/carina/demo/gui/mobilworld/common/LoginPageBase.java @@ -0,0 +1,22 @@ +package com.solvd.carina.demo.gui.mobilworld.common; + +import com.zebrunner.carina.webdriver.gui.AbstractPage; +import org.openqa.selenium.WebDriver; + +public abstract class LoginPageBase extends AbstractPage { + public LoginPageBase(WebDriver driver) { + super(driver); + } + + public abstract boolean isLoginInputPresent(); + + public abstract boolean isPasswordInputPresent(); + + public abstract void inputLogin(String login); + + public abstract void inputPassword(String password); + + public abstract LoginPageBase login(); + + public abstract String getPageTitle(); +} diff --git a/src/main/java/com/solvd/carina/demo/gui/mobilworld/common/MainPageBase.java b/src/main/java/com/solvd/carina/demo/gui/mobilworld/common/MainPageBase.java index 564d3a9..5f61a9e 100644 --- a/src/main/java/com/solvd/carina/demo/gui/mobilworld/common/MainPageBase.java +++ b/src/main/java/com/solvd/carina/demo/gui/mobilworld/common/MainPageBase.java @@ -1,11 +1,13 @@ package com.solvd.carina.demo.gui.mobilworld.common; +import com.solvd.carina.demo.gui.mobilworld.android.components.Menu; +import com.solvd.carina.demo.gui.mobilworld.common.components.MenuBase; import com.solvd.carina.demo.gui.mobilworld.desktop.AccountPage; import com.solvd.carina.demo.gui.mobilworld.desktop.DevicesPage; import com.zebrunner.carina.webdriver.gui.AbstractPage; import org.openqa.selenium.WebDriver; -public abstract class MainPageBase extends AbstractPage { +public abstract class MainPageBase extends AbstractPage { public MainPageBase(WebDriver driver) { super(driver); @@ -14,4 +16,6 @@ public MainPageBase(WebDriver driver) { public abstract DevicesPage openDevicePage(); public abstract AccountPage openAccountPage(); + + public abstract MenuBase getMenu(); } diff --git a/src/main/java/com/solvd/carina/demo/gui/mobilworld/common/SecondIphonePageBase.java b/src/main/java/com/solvd/carina/demo/gui/mobilworld/common/SecondIphonePageBase.java index f04cacb..66f36ae 100644 --- a/src/main/java/com/solvd/carina/demo/gui/mobilworld/common/SecondIphonePageBase.java +++ b/src/main/java/com/solvd/carina/demo/gui/mobilworld/common/SecondIphonePageBase.java @@ -13,4 +13,6 @@ public SecondIphonePageBase(WebDriver driver) { public abstract boolean isIphoneModelsPresent(); public abstract ExtendedWebElement findModel(String model); + + public abstract ItemPageBase openItemPage(String model); } diff --git a/src/main/java/com/solvd/carina/demo/gui/mobilworld/common/components/MenuBase.java b/src/main/java/com/solvd/carina/demo/gui/mobilworld/common/components/MenuBase.java new file mode 100644 index 0000000..3a36810 --- /dev/null +++ b/src/main/java/com/solvd/carina/demo/gui/mobilworld/common/components/MenuBase.java @@ -0,0 +1,29 @@ +package com.solvd.carina.demo.gui.mobilworld.common.components; + +import com.solvd.carina.demo.gui.mobilworld.common.*; +import com.zebrunner.carina.webdriver.gui.AbstractUIObject; +import org.openqa.selenium.SearchContext; +import org.openqa.selenium.WebDriver; + +public abstract class MenuBase extends AbstractUIObject { + + public MenuBase(WebDriver driver, SearchContext searchContext) { + super(driver, searchContext); + } + + public abstract void openMenu(); + + public abstract void clickDevicesPage(); + + public abstract DevicesPageBase openDevicesPage(); + + public abstract ServicesPageBase openServicesPage(); + + public abstract SalesPageBase openSalesPage(); + + public abstract BlogPageBase openBlogPage(); + + public abstract ContactsPageBase openContactsPage(); + + public abstract LoginPageBase openLoginPage(); +} diff --git a/src/main/java/com/solvd/carina/demo/gui/mobilworld/ios/BlogPage.java b/src/main/java/com/solvd/carina/demo/gui/mobilworld/ios/BlogPage.java new file mode 100644 index 0000000..8f9e980 --- /dev/null +++ b/src/main/java/com/solvd/carina/demo/gui/mobilworld/ios/BlogPage.java @@ -0,0 +1,10 @@ +package com.solvd.carina.demo.gui.mobilworld.ios; + +import com.solvd.carina.demo.gui.mobilworld.common.BlogPageBase; +import org.openqa.selenium.WebDriver; + +public class BlogPage extends BlogPageBase { + public BlogPage(WebDriver driver) { + super(driver); + } +} diff --git a/src/main/java/com/solvd/carina/demo/gui/mobilworld/ios/ContactsPage.java b/src/main/java/com/solvd/carina/demo/gui/mobilworld/ios/ContactsPage.java new file mode 100644 index 0000000..a0e2286 --- /dev/null +++ b/src/main/java/com/solvd/carina/demo/gui/mobilworld/ios/ContactsPage.java @@ -0,0 +1,10 @@ +package com.solvd.carina.demo.gui.mobilworld.ios; + +import com.solvd.carina.demo.gui.mobilworld.common.ContactsPageBase; +import org.openqa.selenium.WebDriver; + +public class ContactsPage extends ContactsPageBase { + public ContactsPage(WebDriver driver) { + super(driver); + } +} diff --git a/src/main/java/com/solvd/carina/demo/gui/mobilworld/ios/DevicesPage.java b/src/main/java/com/solvd/carina/demo/gui/mobilworld/ios/DevicesPage.java new file mode 100644 index 0000000..e49d29e --- /dev/null +++ b/src/main/java/com/solvd/carina/demo/gui/mobilworld/ios/DevicesPage.java @@ -0,0 +1,23 @@ +package com.solvd.carina.demo.gui.mobilworld.ios; + +import com.solvd.carina.demo.gui.mobilworld.android.IphonePage; +import com.solvd.carina.demo.gui.mobilworld.common.DevicesPageBase; +import com.zebrunner.carina.webdriver.decorator.ExtendedWebElement; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.support.FindBy; + +public class DevicesPage extends DevicesPageBase { + + @FindBy(xpath = "//a[@href='/catalog/iphone/']") + private ExtendedWebElement iphoneSection; + + public DevicesPage(WebDriver driver) { + super(driver); + } + + @Override + public IphonePage openIphoneSection() { + iphoneSection.clickByJs(); + return new IphonePage(driver); + } +} diff --git a/src/main/java/com/solvd/carina/demo/gui/mobilworld/ios/IphonePage.java b/src/main/java/com/solvd/carina/demo/gui/mobilworld/ios/IphonePage.java new file mode 100644 index 0000000..ef753d1 --- /dev/null +++ b/src/main/java/com/solvd/carina/demo/gui/mobilworld/ios/IphonePage.java @@ -0,0 +1,47 @@ +package com.solvd.carina.demo.gui.mobilworld.ios; + +import com.solvd.carina.demo.gui.mobilworld.common.IphonePageBase; +import com.solvd.carina.demo.gui.mobilworld.common.SecondIphonePageBase; +import com.zebrunner.carina.webdriver.decorator.ExtendedWebElement; +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.support.FindBy; +import org.openqa.selenium.support.ui.ExpectedConditions; + +import java.util.List; +import java.util.NoSuchElementException; + +public class IphonePage extends IphonePageBase { + + @FindBy(xpath = "//div[@class='col-md-3 col-sm-4 col-xs-6']//div//div//a") + private List models; + + public IphonePage(WebDriver driver) { + super(driver); + } + + @Override + public List getModels() { + waitUntil(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.xpath("//div[@class='col-md-3 col-sm-4 col-xs-6']//div//div//a")), 10); + return models; + } + + @Override + public boolean isModelsPresent() { + return models.isEmpty(); + } + + @Override + public ExtendedWebElement findModel(String model) { + return models.stream() + .filter(e -> e.getText().equals(model)) + .findFirst() + .orElseThrow(() -> new NoSuchElementException("Model " + model + " not found")); + } + + public SecondIphonePageBase openIphonePage(String model) { + ExtendedWebElement element = findModel(model); + element.clickByJs(); + return new SecondIphonePage(getDriver()); + } +} diff --git a/src/main/java/com/solvd/carina/demo/gui/mobilworld/ios/ItemPage.java b/src/main/java/com/solvd/carina/demo/gui/mobilworld/ios/ItemPage.java new file mode 100644 index 0000000..f6c442b --- /dev/null +++ b/src/main/java/com/solvd/carina/demo/gui/mobilworld/ios/ItemPage.java @@ -0,0 +1,57 @@ +package com.solvd.carina.demo.gui.mobilworld.ios; + +import com.solvd.carina.demo.gui.mobilworld.common.ItemPageBase; +import com.zebrunner.carina.webdriver.decorator.ExtendedWebElement; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.support.FindBy; + +public class ItemPage extends ItemPageBase { + @FindBy(xpath = "//span[contains(text(), 'В корзину')]") + private ExtendedWebElement addToCartButton; + + @FindBy(xpath = "//div[@class='opener']//div[contains(@class, 'basket_count clicked')]") + private ExtendedWebElement cartButton; + + @FindBy(xpath = "//span[@class='values_wrapper']/span[@class='price_value']") + private ExtendedWebElement price; + + @FindBy(xpath = "//span[@class='values_wrapper']/span[@class='price_currency']") + private ExtendedWebElement currency; + + @FindBy(xpath = "//span[contains(@class, 'remove_all_basket') and contains(@class, 'AnDelCanBuy') and contains(@class, 'cur') and @data-type='basket']") + private ExtendedWebElement removeAllItemsButton; + + @FindBy(xpath = "//div[@class='title']") + private ExtendedWebElement cartTitle; + + public ItemPage(WebDriver driver) { + super(driver); + } + + @Override + public void addToCartButton() { + addToCartButton.clickByJs(); + } + + public String getPrice() { + return price.getAttribute("innerText"); + } + + public String getCurrency() { + return currency.getAttribute("innerText"); + } + + public void clickRemoveAllItemsButton() { + pause(5); + removeAllItemsButton.click(); + } + + public String getTitleText() { + pause(5); + return cartTitle.getText(); + } + + public boolean isRemoveItemsButtonPresent() { + return removeAllItemsButton.isElementPresent(5); + } +} diff --git a/src/main/java/com/solvd/carina/demo/gui/mobilworld/ios/LoginPage.java b/src/main/java/com/solvd/carina/demo/gui/mobilworld/ios/LoginPage.java new file mode 100644 index 0000000..d654119 --- /dev/null +++ b/src/main/java/com/solvd/carina/demo/gui/mobilworld/ios/LoginPage.java @@ -0,0 +1,54 @@ +package com.solvd.carina.demo.gui.mobilworld.ios; + +import com.solvd.carina.demo.gui.mobilworld.common.LoginPageBase; +import com.zebrunner.carina.utils.factory.DeviceType; +import com.zebrunner.carina.webdriver.decorator.ExtendedWebElement; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.support.FindBy; + +@DeviceType(pageType = DeviceType.Type.IOS_PHONE, parentClass = LoginPageBase.class) +public class LoginPage extends LoginPageBase { + + @FindBy(id = "USER_LOGIN_POPUP") + private ExtendedWebElement loginInput; + + @FindBy(id = "USER_PASSWORD_POPUP") + private ExtendedWebElement passwordInput; + + @FindBy(xpath = "//input[@name='Login']") + private ExtendedWebElement loginButton; + + @FindBy(id = "pagetitle") + private ExtendedWebElement pageTitle; + + public LoginPage(WebDriver driver) { + super(driver); + } + + @Override + public boolean isLoginInputPresent() { + return loginInput.isElementPresent(); + } + + public void inputLogin(String login) { + loginInput.type(login); + } + + public boolean isPasswordInputPresent() { + return passwordInput.isElementPresent(); + } + + public void inputPassword(String password) { + passwordInput.type(password); + } + + @Override + public LoginPageBase login() { + loginButton.click(); + return new LoginPage(driver); + } + + public String getPageTitle() { + return pageTitle.getText(); + } +} diff --git a/src/main/java/com/solvd/carina/demo/gui/mobilworld/ios/MainPage.java b/src/main/java/com/solvd/carina/demo/gui/mobilworld/ios/MainPage.java new file mode 100644 index 0000000..db3fb5b --- /dev/null +++ b/src/main/java/com/solvd/carina/demo/gui/mobilworld/ios/MainPage.java @@ -0,0 +1,36 @@ +package com.solvd.carina.demo.gui.mobilworld.ios; + +import com.solvd.carina.demo.gui.mobilworld.common.MainPageBase; +import com.solvd.carina.demo.gui.mobilworld.desktop.AccountPage; +import com.solvd.carina.demo.gui.mobilworld.desktop.DevicesPage; +import com.solvd.carina.demo.gui.mobilworld.ios.components.Menu; +import com.zebrunner.carina.utils.factory.DeviceType; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.support.FindBy; + +@DeviceType(pageType = DeviceType.Type.IOS_PHONE, parentClass = MainPageBase.class) +public class MainPage extends MainPageBase { + + private static final String THIS_METHOD_IS_DEFINED_ONLY_IN_DESKTOP = "This method is not yet implemented for Android"; + @FindBy(xpath = "//div[@class='burger pull-left']") + private Menu menu; + + public MainPage(WebDriver driver) { + super(driver); + setPageAbsoluteURL("https://mobilworld.by/"); + } + + public Menu getMenu() { + return menu; + } + + @Override + public DevicesPage openDevicePage() { + throw new UnsupportedOperationException(THIS_METHOD_IS_DEFINED_ONLY_IN_DESKTOP); + } + + @Override + public AccountPage openAccountPage() { + throw new UnsupportedOperationException(THIS_METHOD_IS_DEFINED_ONLY_IN_DESKTOP); + } +} diff --git a/src/main/java/com/solvd/carina/demo/gui/mobilworld/ios/SalesPage.java b/src/main/java/com/solvd/carina/demo/gui/mobilworld/ios/SalesPage.java new file mode 100644 index 0000000..9354c97 --- /dev/null +++ b/src/main/java/com/solvd/carina/demo/gui/mobilworld/ios/SalesPage.java @@ -0,0 +1,10 @@ +package com.solvd.carina.demo.gui.mobilworld.ios; + +import com.solvd.carina.demo.gui.mobilworld.common.SalesPageBase; +import org.openqa.selenium.WebDriver; + +public class SalesPage extends SalesPageBase { + public SalesPage(WebDriver driver) { + super(driver); + } +} diff --git a/src/main/java/com/solvd/carina/demo/gui/mobilworld/ios/SecondIphonePage.java b/src/main/java/com/solvd/carina/demo/gui/mobilworld/ios/SecondIphonePage.java new file mode 100644 index 0000000..040c16d --- /dev/null +++ b/src/main/java/com/solvd/carina/demo/gui/mobilworld/ios/SecondIphonePage.java @@ -0,0 +1,46 @@ +package com.solvd.carina.demo.gui.mobilworld.ios; + +import com.solvd.carina.demo.gui.mobilworld.common.ItemPageBase; +import com.solvd.carina.demo.gui.mobilworld.common.SecondIphonePageBase; +import com.zebrunner.carina.webdriver.decorator.ExtendedWebElement; +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.support.FindBy; +import org.openqa.selenium.support.ui.ExpectedConditions; + +import java.util.List; +import java.util.NoSuchElementException; + +public class SecondIphonePage extends SecondIphonePageBase { + + @FindBy(xpath = "//a[contains(@href, '/catalog/iphone/iphone_14_pro_max')]//span") + private List iphoneModels; + + public SecondIphonePage(WebDriver driver) { + super(driver); + } + + @Override + public boolean isIphoneModelsPresent() { + waitUntil(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.xpath("//a[contains(@href, '/catalog/iphone')]")), 10); + return iphoneModels.isEmpty(); + } + + @Override + public ExtendedWebElement findModel(String model) { + return iphoneModels.stream() + .filter(e -> e.getText().equals(model)) + .findFirst() + .orElseThrow(() -> new NoSuchElementException("Model " + model + " not found")); + } + + public ItemPageBase openItemPage(String model) { + ExtendedWebElement element = findModel(model); + element.clickByJs(); + return new ItemPage(driver); + } + + public List getIphoneModels() { + return iphoneModels; + } +} diff --git a/src/main/java/com/solvd/carina/demo/gui/mobilworld/ios/ServicesPage.java b/src/main/java/com/solvd/carina/demo/gui/mobilworld/ios/ServicesPage.java new file mode 100644 index 0000000..ccacebf --- /dev/null +++ b/src/main/java/com/solvd/carina/demo/gui/mobilworld/ios/ServicesPage.java @@ -0,0 +1,10 @@ +package com.solvd.carina.demo.gui.mobilworld.ios; + +import com.solvd.carina.demo.gui.mobilworld.common.ServicesPageBase; +import org.openqa.selenium.WebDriver; + +public class ServicesPage extends ServicesPageBase { + public ServicesPage(WebDriver driver) { + super(driver); + } +} diff --git a/src/main/java/com/solvd/carina/demo/gui/mobilworld/ios/components/Menu.java b/src/main/java/com/solvd/carina/demo/gui/mobilworld/ios/components/Menu.java new file mode 100644 index 0000000..902afcc --- /dev/null +++ b/src/main/java/com/solvd/carina/demo/gui/mobilworld/ios/components/Menu.java @@ -0,0 +1,87 @@ +package com.solvd.carina.demo.gui.mobilworld.ios.components; + +import com.solvd.carina.demo.gui.mobilworld.common.*; +import com.solvd.carina.demo.gui.mobilworld.common.components.MenuBase; +import com.solvd.carina.demo.gui.mobilworld.ios.*; +import com.zebrunner.carina.webdriver.decorator.ExtendedWebElement; +import org.openqa.selenium.SearchContext; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.support.FindBy; +import org.openqa.selenium.support.ui.ExpectedConditions; + +public class Menu extends MenuBase { + + @FindBy(xpath = "//div[@class='burger pull-left']") + private ExtendedWebElement openMenuBtn; + + @FindBy(xpath = "//a[@href='/catalog/']") + private ExtendedWebElement devicesSection; + + @FindBy(xpath = "//li[@class='menu_title']") + private ExtendedWebElement secondDevicesSection; + + @FindBy(xpath = "//a[@href='/services/']") + private ExtendedWebElement serviceSection; + + @FindBy(xpath = "//a[@href='/sale/']") + private ExtendedWebElement salesSection; + + @FindBy(xpath = "//a[@href='/blog/']") + private ExtendedWebElement blogSection; + + @FindBy(xpath = "//a[@href='/contacts/']") + private ExtendedWebElement contactsSection; + + @FindBy(xpath = "//a[@href='/personal/']") + private ExtendedWebElement loginSection; + + public Menu(WebDriver driver, SearchContext searchContext) { + super(driver, searchContext); + } + + @Override + public void openMenu() { + waitUntil(ExpectedConditions.elementToBeClickable(openMenuBtn.getBy()), 10); + openMenuBtn.click(); + } + + @Override + public void clickDevicesPage() { + devicesSection.click(); + } + + @Override + public DevicesPageBase openDevicesPage() { + secondDevicesSection.click(); + return new DevicesPage(driver); + } + + @Override + public ServicesPageBase openServicesPage() { + serviceSection.click(); + return new ServicesPage(driver); + } + + @Override + public SalesPageBase openSalesPage() { + salesSection.click(); + return new SalesPage(driver); + } + + @Override + public BlogPageBase openBlogPage() { + blogSection.click(); + return new BlogPage(driver); + } + + @Override + public ContactsPageBase openContactsPage() { + contactsSection.click(); + return new ContactsPage(driver); + } + + public LoginPageBase openLoginPage() { + loginSection.click(); + return new LoginPage(driver); + } +} diff --git a/src/main/resources/_config.properties b/src/main/resources/_config.properties index 99540b0..fee18b8 100644 --- a/src/main/resources/_config.properties +++ b/src/main/resources/_config.properties @@ -5,7 +5,7 @@ url=https://mobilworld.by/ capabilities.browserName=chrome capabilities.browserVersion=* -#selenium_url=http://localhost:4444/wd/hub +selenium_url=http://localhost:4444/wd/hub custom_capabilities=NULL extra_capabilities=NULL app_version= @@ -32,30 +32,32 @@ language=en_US retry_count=0 #=====================================================# #============== WebDriver configuration ==============# -explicit_timeout=60 +explicit_timeout=120 #number of extra retries to start driver session and interval in seconds init_retry_count=0 init_retry_interval=1 #=====================================================# #uncomment and change udid and deviceName for Android test #============ Android Local Mobile ===================# -selenium_url=http://localhost:4723/wd/hub -capabilities.automationName=uiautomator2 -capabilities.deviceName=Pixel 6 API 33 -capabilities.udid=emulator-5554 -capabilities.deviceType=phone -capabilities.platformName=ANDROID -capabilities.app=/Users/akhivyk/Downloads/com.android.chrome.apk +#selenium_url=http://localhost:4723/wd/hub +#capabilities.automationName=uiautomator2 +#capabilities.deviceName=Pixel 6 API 33 +#capabilities.udid=emulator-5554 +#capabilities.deviceType=phone +#capabilities.platformName=ANDROID +#capabilities.app=/Users/akhivyk/Downloads/com.android.chrome.apk #=====================================================# #uncomment and change deviceName and platformVersion for iOS test #======== Local Run for iOS Mobile ===============# #selenium_url=http://localhost:4723/wd/hub #capabilities.platformName=iOS -#capabilities.deviceName= +#capabilities.deviceName=iPhone 14 Pro #capabilities.deviceType=phone -#capabilities.platformVersion= +#capabilities.platformVersion=16.4 #capabilities.automationName=XCUITest -#capabilities.udid= +#capabilities.udid=40D5649C-9140-42FE-B5CA-ECF727F4A299 +#capabilities.bundleId=com.apple.mobilesafari +#capabilities.browserName=Safari #capabilities.app=https://qaprosoft.s3-us-west-2.amazonaws.com/carinademoexample.zip #=====================================================# #================ Report configuration ===============# diff --git a/src/main/resources/agent.properties b/src/main/resources/agent.properties index 749fb12..8fbe1ed 100644 --- a/src/main/resources/agent.properties +++ b/src/main/resources/agent.properties @@ -1,5 +1,5 @@ -reporting.enabled=false -reporting.server.hostname= -reporting.server.access-token= -reporting.project-key=DEF -reporting.run.environment= +reporting.enabled=true +reporting.server.hostname=https://solvdinternal.zebrunner.com +reporting.server.access-token=RpTjXTmSdLfw5mj1BCJF2XLhq8E3InG6N3hLvEzDyIawog0SjV +reporting.project-key=ARTEMK +reporting.run.environment=AQA diff --git a/src/test/java/com/solvd/carina/demo/MobilWorldWebTest.java b/src/test/java/com/solvd/carina/demo/MobilWorldWebTest.java index a041426..32b4d2f 100644 --- a/src/test/java/com/solvd/carina/demo/MobilWorldWebTest.java +++ b/src/test/java/com/solvd/carina/demo/MobilWorldWebTest.java @@ -123,7 +123,6 @@ public void testProductInfo() { ItemPage itemPage = secondIphonePage.clickItem(model2); - Assert.assertEquals(itemPage.getPrice(), "4 099", "Price incorrect"); Assert.assertEquals(itemPage.getCurrency(), " руб.", "Currency incorrect"); } diff --git a/src/test/java/com/solvd/carina/demo/MobileMWTest.java b/src/test/java/com/solvd/carina/demo/MobileMWTest.java index 1ea8384..374fb4e 100644 --- a/src/test/java/com/solvd/carina/demo/MobileMWTest.java +++ b/src/test/java/com/solvd/carina/demo/MobileMWTest.java @@ -2,12 +2,12 @@ import com.solvd.carina.demo.gui.mobilworld.android.*; import com.solvd.carina.demo.gui.mobilworld.android.components.Menu; +import com.solvd.carina.demo.gui.mobilworld.common.*; import com.solvd.carina.demo.utils.MobileContextUtils; import com.zebrunner.carina.core.IAbstractTest; import com.zebrunner.carina.utils.R; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import org.openqa.selenium.By; import org.testng.Assert; import org.testng.annotations.Test; import org.testng.asserts.SoftAssert; @@ -45,15 +45,15 @@ public void testAddToCartIphone() { menu.openMenu(); menu.clickDevicesPage(); - DevicesPage devicesPage = menu.openDevicesPage(); + DevicesPageBase devicesPage = menu.openDevicesPage(); - IphonePage iphonePage = devicesPage.openIphoneSection(); + IphonePageBase iphonePage = devicesPage.openIphoneSection(); Assert.assertFalse(iphonePage.getModels().isEmpty(), "Models is not present"); - SecondIphonePage secondIphonePage = iphonePage.openIphonePage(model); + SecondIphonePageBase secondIphonePage = iphonePage.openIphonePage(model); Assert.assertFalse(secondIphonePage.isIphoneModelsPresent(), "Models is not present"); - ItemPage itemPage = secondIphonePage.openItemPage(model2); + ItemPageBase itemPage = secondIphonePage.openItemPage(model2); itemPage.addToCartButton(); } @@ -69,15 +69,15 @@ public void testDeleteItemsFromCart() { menu.openMenu(); menu.clickDevicesPage(); - DevicesPage devicesPage = menu.openDevicesPage(); + DevicesPageBase devicesPage = menu.openDevicesPage(); - IphonePage iphonePage = devicesPage.openIphoneSection(); + IphonePageBase iphonePage = devicesPage.openIphoneSection(); Assert.assertFalse(iphonePage.getModels().isEmpty(), "Models is not present"); - SecondIphonePage secondIphonePage = iphonePage.openIphonePage(model); + SecondIphonePageBase secondIphonePage = iphonePage.openIphonePage(model); Assert.assertFalse(secondIphonePage.isIphoneModelsPresent(), "Models is not present"); - ItemPage itemPage = secondIphonePage.openItemPage(model2); + ItemPageBase itemPage = secondIphonePage.openItemPage(model2); itemPage.addToCartButton(); itemPage.clickRemoveAllItemsButton(); @@ -98,23 +98,23 @@ public void testAllPagesAvailable() { Menu menu = mainPage.getMenu(); menu.openMenu(); - DevicesPage devicesPage = menu.openDevicesPage(); + DevicesPageBase devicesPage = menu.openDevicesPage(); Assert.assertEquals(getDriver().getCurrentUrl(), devicesPageUrl, "Device page not opened"); menu.openMenu(); - ServicesPage servicesPage = menu.openServicesPage(); + ServicesPageBase servicesPage = menu.openServicesPage(); Assert.assertEquals(getDriver().getCurrentUrl(), servicePageUrl, "Service page not opened"); menu.openMenu(); - SalesPage salesPage = menu.openSalesPage(); + SalesPageBase salesPage = menu.openSalesPage(); Assert.assertEquals(getDriver().getCurrentUrl(), salesPageUrl, "Sales page not opened"); menu.openMenu(); - BlogPage blogPage = menu.openBlogPage(); + BlogPageBase blogPage = menu.openBlogPage(); Assert.assertEquals(getDriver().getCurrentUrl(), blogPageUrl, "Blog page not opened"); menu.openMenu(); - ContactsPage contactsPage = menu.openContactsPage(); + ContactsPageBase contactsPage = menu.openContactsPage(); Assert.assertEquals(getDriver().getCurrentUrl(), contactsPageUrl, "Contacts page not opened"); } @@ -130,15 +130,15 @@ public void testProductInfo() { menu.openMenu(); menu.clickDevicesPage(); - DevicesPage devicesPage = menu.openDevicesPage(); + DevicesPageBase devicesPage = menu.openDevicesPage(); - IphonePage iphonePage = devicesPage.openIphoneSection(); + IphonePageBase iphonePage = devicesPage.openIphoneSection(); Assert.assertFalse(iphonePage.getModels().isEmpty(), "Models is not present"); - SecondIphonePage secondIphonePage = iphonePage.openIphonePage(model); + SecondIphonePageBase secondIphonePage = iphonePage.openIphonePage(model); Assert.assertFalse(secondIphonePage.isIphoneModelsPresent(), "Models is not present"); - ItemPage itemPage = secondIphonePage.openItemPage(model2); + ItemPageBase itemPage = secondIphonePage.openItemPage(model2); Assert.assertEquals(itemPage.getPrice(), "4 099", "Price incorrect"); Assert.assertEquals(itemPage.getCurrency(), " руб.", "Currency incorrect"); @@ -153,9 +153,9 @@ public void testSearchProducts() { menu.openMenu(); menu.clickDevicesPage(); - DevicesPage devicesPage = menu.openDevicesPage(); + DevicesPageBase devicesPage = menu.openDevicesPage(); - IphonePage iphonePage = devicesPage.openIphoneSection(); + IphonePageBase iphonePage = devicesPage.openIphoneSection(); Assert.assertFalse(iphonePage.getModels().isEmpty(), "Models is not present"); iphonePage.getModels().forEach(a -> LOGGER.info(a.getText())); diff --git a/src/test/resources/testng_suites/mobil-world.xml b/src/test/resources/testng_suites/mobil-world.xml new file mode 100644 index 0000000..964d09a --- /dev/null +++ b/src/test/resources/testng_suites/mobil-world.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +