From 3d2c821dc18dfa34b72f55b0466a473c0da5222e Mon Sep 17 00:00:00 2001 From: akhivyk Date: Tue, 30 May 2023 16:21:17 +0300 Subject: [PATCH 1/7] adapt all tests for ios testing --- .../mobilworld/android/components/Menu.java | 23 +++-- .../mobilworld/common/DevicesPageBase.java | 3 +- .../gui/mobilworld/common/IphonePageBase.java | 2 + .../gui/mobilworld/common/LoginPageBase.java | 22 +++++ .../gui/mobilworld/common/MainPageBase.java | 6 +- .../common/SecondIphonePageBase.java | 2 + .../common/components/MenuBase.java | 29 +++++++ .../demo/gui/mobilworld/ios/BlogPage.java | 10 +++ .../demo/gui/mobilworld/ios/ContactsPage.java | 10 +++ .../demo/gui/mobilworld/ios/DevicesPage.java | 23 +++++ .../demo/gui/mobilworld/ios/IphonePage.java | 47 ++++++++++ .../demo/gui/mobilworld/ios/ItemPage.java | 57 ++++++++++++ .../demo/gui/mobilworld/ios/LoginPage.java | 54 ++++++++++++ .../demo/gui/mobilworld/ios/MainPage.java | 36 ++++++++ .../demo/gui/mobilworld/ios/SalesPage.java | 10 +++ .../gui/mobilworld/ios/SecondIphonePage.java | 46 ++++++++++ .../demo/gui/mobilworld/ios/ServicesPage.java | 10 +++ .../gui/mobilworld/ios/components/Menu.java | 87 +++++++++++++++++++ src/main/resources/_config.properties | 26 +++--- .../com/solvd/carina/demo/MobileMWTest.java | 40 ++++----- 20 files changed, 501 insertions(+), 42 deletions(-) create mode 100644 src/main/java/com/solvd/carina/demo/gui/mobilworld/common/LoginPageBase.java create mode 100644 src/main/java/com/solvd/carina/demo/gui/mobilworld/common/components/MenuBase.java create mode 100644 src/main/java/com/solvd/carina/demo/gui/mobilworld/ios/BlogPage.java create mode 100644 src/main/java/com/solvd/carina/demo/gui/mobilworld/ios/ContactsPage.java create mode 100644 src/main/java/com/solvd/carina/demo/gui/mobilworld/ios/DevicesPage.java create mode 100644 src/main/java/com/solvd/carina/demo/gui/mobilworld/ios/IphonePage.java create mode 100644 src/main/java/com/solvd/carina/demo/gui/mobilworld/ios/ItemPage.java create mode 100644 src/main/java/com/solvd/carina/demo/gui/mobilworld/ios/LoginPage.java create mode 100644 src/main/java/com/solvd/carina/demo/gui/mobilworld/ios/MainPage.java create mode 100644 src/main/java/com/solvd/carina/demo/gui/mobilworld/ios/SalesPage.java create mode 100644 src/main/java/com/solvd/carina/demo/gui/mobilworld/ios/SecondIphonePage.java create mode 100644 src/main/java/com/solvd/carina/demo/gui/mobilworld/ios/ServicesPage.java create mode 100644 src/main/java/com/solvd/carina/demo/gui/mobilworld/ios/components/Menu.java 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..6c17a91 100644 --- a/src/main/resources/_config.properties +++ b/src/main/resources/_config.properties @@ -3,7 +3,7 @@ #=====================================================# #=================== Global configuration ============# url=https://mobilworld.by/ -capabilities.browserName=chrome +#capabilities.browserName=chrome capabilities.browserVersion=* #selenium_url=http://localhost:4444/wd/hub custom_capabilities=NULL @@ -40,22 +40,24 @@ 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 +#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.platformName=iOS +capabilities.deviceName=iPhone 14 Pro #capabilities.deviceType=phone -#capabilities.platformVersion= -#capabilities.automationName=XCUITest -#capabilities.udid= +capabilities.platformVersion=16.4 +capabilities.automationName=XCUITest +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/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())); From 7250cfbfa1e021f2ef1a0f6a86d1e1deb3c76a88 Mon Sep 17 00:00:00 2001 From: akhivyk Date: Mon, 5 Jun 2023 16:07:38 +0300 Subject: [PATCH 2/7] add testng suite --- src/test/resources/testng_suites/mobil-world.xml | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/test/resources/testng_suites/mobil-world.xml 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..e69de29 From b5005401f8f5db788707ccec2b21f65c9e23dce7 Mon Sep 17 00:00:00 2001 From: akhivyk Date: Mon, 5 Jun 2023 16:08:19 +0300 Subject: [PATCH 3/7] add testng suite --- .../resources/testng_suites/mobil-world.xml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/test/resources/testng_suites/mobil-world.xml b/src/test/resources/testng_suites/mobil-world.xml index e69de29..b3ee659 100644 --- a/src/test/resources/testng_suites/mobil-world.xml +++ b/src/test/resources/testng_suites/mobil-world.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file From d43e6040588078521684fd153bfa39530959b413 Mon Sep 17 00:00:00 2001 From: akhivyk Date: Tue, 6 Jun 2023 12:30:50 +0300 Subject: [PATCH 4/7] refactor test suite for jenkins --- src/test/resources/testng_suites/mobil-world.xml | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/test/resources/testng_suites/mobil-world.xml b/src/test/resources/testng_suites/mobil-world.xml index b3ee659..af0cadc 100644 --- a/src/test/resources/testng_suites/mobil-world.xml +++ b/src/test/resources/testng_suites/mobil-world.xml @@ -1,16 +1,26 @@ - + + + - + + + + + + + + + From 2660064f6aa6c30055b11b14e2988baaa83098bf Mon Sep 17 00:00:00 2001 From: Artsiom Khivyk <133111004+akhivyk@users.noreply.github.com> Date: Tue, 6 Jun 2023 13:34:29 +0300 Subject: [PATCH 5/7] Update mobil-world.xml --- src/test/resources/testng_suites/mobil-world.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/resources/testng_suites/mobil-world.xml b/src/test/resources/testng_suites/mobil-world.xml index af0cadc..964d09a 100644 --- a/src/test/resources/testng_suites/mobil-world.xml +++ b/src/test/resources/testng_suites/mobil-world.xml @@ -7,7 +7,7 @@ - + @@ -26,4 +26,4 @@ - \ No newline at end of file + From 1ae4c7843be928b376bba9c0bc09aadf3461f168 Mon Sep 17 00:00:00 2001 From: akhivyk Date: Wed, 7 Jun 2023 15:07:29 +0300 Subject: [PATCH 6/7] add config for zebrunner reporting system --- src/main/resources/_config.properties | 20 ++++++++++---------- src/main/resources/agent.properties | 10 +++++----- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/main/resources/_config.properties b/src/main/resources/_config.properties index 6c17a91..fee18b8 100644 --- a/src/main/resources/_config.properties +++ b/src/main/resources/_config.properties @@ -3,9 +3,9 @@ #=====================================================# #=================== Global configuration ============# url=https://mobilworld.by/ -#capabilities.browserName=chrome +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,14 +32,14 @@ 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 +#selenium_url=http://localhost:4723/wd/hub #capabilities.automationName=uiautomator2 #capabilities.deviceName=Pixel 6 API 33 #capabilities.udid=emulator-5554 @@ -50,13 +50,13 @@ selenium_url=http://localhost:4723/wd/hub #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=iPhone 14 Pro +#capabilities.platformName=iOS +#capabilities.deviceName=iPhone 14 Pro #capabilities.deviceType=phone -capabilities.platformVersion=16.4 -capabilities.automationName=XCUITest -capabilities.udid=40D5649C-9140-42FE-B5CA-ECF727F4A299 -capabilities.bundleId=com.apple.mobilesafari +#capabilities.platformVersion=16.4 +#capabilities.automationName=XCUITest +#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 #=====================================================# 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 From dbd288f71e99edebaf4e3724482be6410543491d Mon Sep 17 00:00:00 2001 From: akhivyk Date: Wed, 7 Jun 2023 16:00:26 +0300 Subject: [PATCH 7/7] refactoring --- src/test/java/com/solvd/carina/demo/MobilWorldWebTest.java | 1 - 1 file changed, 1 deletion(-) 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"); }