Как добавить повторяемые разделы, такие как верхний колонтитул, нижний колонтитул со всеми классами страниц приложения к объектной модели страницы с селеном и java? - PullRequest
3 голосов
/ 24 января 2020

Я пытаюсь автоматизировать веб-тесты с использованием Selenium и JAVA,

У меня есть веб-приложение с определенными разделами, такими как верхний и нижний колонтитулы, повторяющиеся на нескольких страницах. Я использую объектную модель страницы, создавая файл класса страницы для каждой веб-страницы. Все веб-страницы имеют одинаковый верхний и нижний колонтитулы.

Я создал два файла классов страниц, HomePage. java и SmallBusinessPage. java и два отдельных файла классов для компонентов верхнего и нижнего колонтитула, Header. java и Footer. java. Эти файлы находятся в отдельном пакете, чем файлы классов страниц. Мой файл класса теста - TestCaseDevelopment. java, а базовый класс - TestBase. java. Мне нужно получить доступ к ссылке заголовка 'enroll' (локатор которой находится в файле Header. java) из класса TestCaseDevelopment. java с помощью объекта HomePage. (HomePage содержит локатор HeaderHomePage, который находит весь заголовок на веб-странице. Локатор LinkEnroll в заголовке. Файл java находит ссылку в заголовке. Поэтому полный локатор для ссылки - HeaderHomePage + LinkEnroll, означает //header//div[@id='masthead']//a[normalize-space()='Enroll'], что я не могу доступ к нему.

Я не хочу создавать дубликаты для верхнего и нижнего колонтитула в каждом файле класса страницы. Как определить эти разделы как отдельные файлы классов и включить их в файлы классов моей страницы?

Домашняя страница. java

public class HomePage extends TestBase {

    @FindBy(xpath = "//header//div[@id='masthead']")
    public Header HeaderHomePage;

    public HomePage() {
        PageFactory.initElements(driver, this);
    }
}

SmallBusinessPage. java

public class SmallBusinessPage extends TestBase{

    @FindBy(xpath = "//header//div[@id='masthead']")
    public Header HeaderSmallBusiness;

    public SmallBusinessPage() {
        PageFactory.initElements(driver, this);
    }
}

Заголовок

public class Header extends TestBase{

    @FindBy(xpath="//a[normalize-space()='Enroll']")
    WebElement LinkEnroll;

    public Header() {
        PageFactory.initElements(driver, this);
    }
}

Нижний колонтитул

public class Footer extends TestBase {

    @FindBy(xpath="//footer//a[text()='Careers']")
    public WebElement LinkCareers;

    public Footer() {
        PageFactory.initElements(driver, this);
    }
}

TestBase

public class TestBase {

    public static WebDriver driver;
    public static Properties prop;
    Header header = new Header();

    public TestBase(){

        try {
            prop = new Properties();
            FileInputStream istream = new FileInputStream("C:\\QA -Selenium\\WS\\WellsFargoTest\\src\\main\\java\\com\\wellsfargo\\qa\\config\\config.properties");
            prop.load(istream);
        }
        catch(FileNotFoundException e) {
            e.printStackTrace();
        }
        catch(IOException e)
        {
            e.printStackTrace();
        }
    }

    public static void initialization() {
        String browserName = prop.getProperty("browser");
        if(browserName.equals("chrome")){
            System.setProperty("webdriver.chrome.driver","C:\\Selenium\\chromedriver");
            driver =new ChromeDriver();
        }
        if(browserName.equals("FF")){
            System.setProperty("webdriver.gecko.driver","C:\\Selenium\\geckodriver");
            driver = new FirefoxDriver();
        }
        driver.manage().window().maximize();
        driver.manage().deleteAllCookies();
        driver.manage().timeouts().pageLoadTimeout(TestUtility.PAGE_LOAD_TIMEOUT, TimeUnit.SECONDS);        
        driver.manage().timeouts().implicitlyWait(TestUtility.IMLICIT_WAIT, TimeUnit.SECONDS);  
        driver.get(prop.getProperty("url"));
    }
}

TestCaseDevelopment

public class TestCaseDevelopment extends TestBase{

    HomePage homePage;
    public TestCaseDevelopment() {
        super();
    }

    @BeforeMethod
    public void setup() {
        initialization();
        homePage = new HomePage();
        ****homePage.HeaderHomePage.l****
    }
}

1 Ответ

0 голосов
/ 24 января 2020

В соответствии со стандартной практикой вы должны создать один класс с именем BaesPage.java, который будет хранить все общие локаторы в приложении. Весь объект страницы будет расширять этот класс, поэтому все общие локаторы будут доступны для всех объектов страницы. Пожалуйста, посмотрите.

BasePage. java

public class BasePage{

    @FindBy(xpath="//a[normalize-space()='Enroll']")
    WebElement LinkEnroll;


@FindBy(xpath="//footer//a[text()='Careers']")
    public WebElement LinkCareers;

    public BasePage() {
        PageFactory.initElements(driver, this);
    }
public void clickEnroll()
{

LinkEnroll.click();
}
}

Теперь вам не нужны верхний колонтитул. java и нижний колонтитул. java два отдельных класса, поскольку оба имеют общие локаторы в приложении, поэтому он перемещается в BasePage. java

HomePage. java

public class HomePage extends BasePage {

    @FindBy(xpath = "//header//div[@id='masthead']")
    public Header HeaderHomePage;

    public HomePage() {
        PageFactory.initElements(driver, this);
    }
}

TestBase. java

public class TestBase {

    public static WebDriver driver;
    public static Properties prop;
    Header header = new Header();

    public TestBase(){

        try {
            prop = new Properties();
            FileInputStream istream = new FileInputStream("C:\\QA -Selenium\\WS\\WellsFargoTest\\src\\main\\java\\com\\wellsfargo\\qa\\config\\config.properties");
            prop.load(istream);
        }
        catch(FileNotFoundException e) {
            e.printStackTrace();
        }
        catch(IOException e)
        {
            e.printStackTrace();
        }
    }

    public static void initialization() {
        String browserName = prop.getProperty("browser");
        if(browserName.equals("chrome")){
            System.setProperty("webdriver.chrome.driver","C:\\Selenium\\chromedriver");
            driver =new ChromeDriver();
        }
        if(browserName.equals("FF")){
            System.setProperty("webdriver.gecko.driver","C:\\Selenium\\geckodriver");
            driver = new FirefoxDriver();
        }
        driver.manage().window().maximize();
        driver.manage().deleteAllCookies();
        driver.manage().timeouts().pageLoadTimeout(TestUtility.PAGE_LOAD_TIMEOUT, TimeUnit.SECONDS);        
        driver.manage().timeouts().implicitlyWait(TestUtility.IMLICIT_WAIT, TimeUnit.SECONDS);  
        driver.get(prop.getProperty("url"));
    }
}

TestCaseDevelopment

public class TestCaseDevelopment extends TestBase{

    HomePage homePage;
    public TestCaseDevelopment() {
        super();
    }

    @BeforeMethod
    public void setup() {
        initialization();
        homePage = new HomePage();
//Now you can call clickEnroll from any page object
        homePage.clickEnroll();
    }
}
...