Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -30,41 +32,48 @@ 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();
}

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);
}
}
Original file line number Diff line number Diff line change
@@ -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;

Expand All @@ -10,5 +9,5 @@ public DevicesPageBase(WebDriver driver) {
super(driver);
}

public abstract IphonePage openIphoneSection();
public abstract IphonePageBase openIphoneSection();
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,6 @@ public IphonePageBase(WebDriver driver) {
public abstract ExtendedWebElement findModel(String model);

public abstract boolean isModelsPresent();

public abstract SecondIphonePageBase openIphonePage(String model);
}
Original file line number Diff line number Diff line change
@@ -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();
}
Original file line number Diff line number Diff line change
@@ -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<T extends Menu> extends AbstractPage {

public MainPageBase(WebDriver driver) {
super(driver);
Expand All @@ -14,4 +16,6 @@ public MainPageBase(WebDriver driver) {
public abstract DevicesPage openDevicePage();

public abstract AccountPage openAccountPage();

public abstract MenuBase getMenu();
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,6 @@ public SecondIphonePageBase(WebDriver driver) {
public abstract boolean isIphoneModelsPresent();

public abstract ExtendedWebElement findModel(String model);

public abstract ItemPageBase openItemPage(String model);
}
Original file line number Diff line number Diff line change
@@ -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();
}
Original file line number Diff line number Diff line change
@@ -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);
}
}
Original file line number Diff line number Diff line change
@@ -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);
}
}
Original file line number Diff line number Diff line change
@@ -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);
}
}
Original file line number Diff line number Diff line change
@@ -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<ExtendedWebElement> models;

public IphonePage(WebDriver driver) {
super(driver);
}

@Override
public List<ExtendedWebElement> 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());
}
}
Original file line number Diff line number Diff line change
@@ -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);
}
}
Original file line number Diff line number Diff line change
@@ -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();
}
}
Loading