Прежде чем написать свое предложение, я хотел бы поделиться своим приложением, для которого я разработал структуру POM. Итак, в основном мое приложение имеет три разных фрейма для каждой html-страницы:
Верхняя рамка: это общий вид для всего приложения, который содержит общие функции, такие как выход из системы, справка, настройки администратора и т. Д.
Левая панель навигации: в большинстве мест в моем приложении этот фрейм доступен и обеспечивает навигацию между различными разделами приложения.
Фрейм содержимого: это фрейм, в котором пользователь выполняет основные операции.
Разработка инфраструктуры на основе Page Object для этого типа приложений - действительно утомительная работа, но я решил спроектировать ее таким образом, чтобы мы могли избежать всего повторяющегося кода. Прежде всего, я расскажу о структуре фреймворка:
org.xyz.automation.sdk
- TopFrame.java
- MainNavigator.java
- WebDriverFactory.java
- Configuration.java
org.xyz.automation.sdk.global.pages
- LoginPage.java
- TopFrame.java
org.xyz.automation.sdk.global
- Navigator.java
org.xyz.automation.sdk.leftpanel.pages
- LeftFramePage.java
org.xyz.automation.sdk.leftpanel
- LeftFrameNavigator.java
Таким образом, в основном org.xyz.automation.sdk содержит все общие классы конфигурации, которые отвечают за создание экземпляра веб-драйвера в соответствии с конфигурацией вашей системы.
org.xyz.automation.sdk.global.pages: Этот пакет содержит класс общих представлений объекта страницы, как я уже сказал, TopFrame - это то, что вы можете видеть во всем приложении, поэтому я смоделировал это представление в TopFrame.java. Чтобы отделить навигацию по кадрам от класса объекта страницы, я сохранил это в отдельном пакет, который является не чем иным, как родительским пакетом класса Page Object.
org.xyz.automation.sdk.global содержит Navigation.java, который отвечает за навигацию по кадрам и все другие виды навигации. Единственная выгода от сохранения global.pages в том, что в будущем, когда ваше приложение не будет поддерживать фреймы, вам не нужно будет изменять какой-либо класс Page, а изменять только класс навигатора.
org.xyz.automation.sdk.leftpanel.pages: Как и выше, этот пакет содержит java-класс объекта страницы на левой панели, и снова я отделил навигацию этой левой панели от пакета leftpanel.pages.
@FindBy Это не что иное, как быстрый способ поиска веб-элементов моделируемой страницы. Самая основная концепция объекта страницы заключается в том, что каждый класс должен моделировать только одно представление, поэтому смоделированный класс должен содержать только те веб-элементы, которые фактически появляются в смоделированном представлении. Например, TopFrame.java должен содержать элемент выхода, как он появляется только в этом фрейме.
@FindBy(name = "logOut") // To find the element by name
@CacheLookup
private WebElement logOutLInk;
и при выполнении каких-либо действий с ним следует рассматривать его как экземпляр WebElement.
logOutLInk.click();
/**
* Class which models the view of Left Navigation Frame
*/
public class LeftNavigationFrame{
@FindBy(name= "exampleName")
private WebElement exampleButton;
private WebDriver driver;
public LeftNavigationFrame(WebDriver driver) {
this.driver = driver;
}
/**
* Opens a new page by clicking example button
*/
public void openNewPage() {
exampleButton.click();
}
}
Пример класса Navigator:
/**
* Class which provides convenient methods to navigate on left frame
*/
public class LeftFrameNavigator{
private WebDriver driver;
public LeftFrameNavigator(WebDriver driver) {
this.driver = driver;
}
/**
* Changes scope to the left frame
*
* @return Page Object class of LeftNavigationFrame
*/
public LeftNavigationFrame switchToLeftFrame() {
// Code to switch Frame
return new LeftNavigationFrame(driver);
}
}
Это пример вашего тестового класса:
/**
* Class which contains test cases of xyz
*/
public class doTesting{
LeftFrameNavigator leftNav;
@BeforeTest
public void instantiateRequiredClasses() {
LeftFrameNavigator leftNav = new LeftFrameNavigator();
}
@Test
public void doTestingHere() {
LeftNavigationFrame leftFrame = leftNav.switchToLeftFrame();
leftFrame.openNewPage()
}
}
}
person
Priyanshu Shekhar
schedule
09.09.2014
linkinLeftFrameиtextFieldLeftFrameтоже могут быть объектами страницы, поскольку внутри них есть другие элементы. - person alecxe   schedule 09.09.2014