2013-06-19 3 views
1

Я искал в Интернете немного, но думал, что могу получить некоторое представление, просто разместив на stackoverflow и посмотрев, есть ли там какие-то мнения.Page Objects - уровень абстракции для методов

мне интересно, если кто-то есть мнение которого предпочтительное между этими двумя способами создания страницы объекта:

public class LoginPage extends PageObject{ 
    public void typeEmail(String email){ 
     driver.findElement(EMAIL_SELECTOR).sendKeys(email); 
    } 

    public void typePassword(String pw){ 
     driver.findElement(PASSWORD_SELECTOR).sendKeys(email); 
    } 

    public void submit(){ 
     driver.findElement(SUBMIT_SELECTOR).click(); 
    } 
} 

... и ...

public class LoginPage extends PageObjects{ 
    public void login(String email, String password){ 
     driver.findElement(EMAIL_SELECTOR).sendKeys(email); 
     driver.findElement(PASSWORD_SELECTOR).sendKeys(email); 
     driver.findElement(SUBMIT_SELECTOR).click(); 
    } 
} 

Первоначально , Я думал, что второй способ будет лучше, так как если по какой-то причине изменится входной поток (это маловероятно для входа в систему, но вы можете теоретизировать это для других типов форм), вы можете обновить метод login(), и это изменение повлияет на все тесты, требующие входа в систему.

Однако, если вы хотите проверить условия ошибки или многое другое перед подачей(), второе решение недостаточно гибкое.

Любые идеи будут приветствоваться.

+0

Второе решение больше похоже на «объект страницы». Идея состоит в том, что они должны представлять ** услуги **, которые может выполнять ваша страница. Как и в случае, «логин» является всеобъемлющим сервисом/действием, которое он может выполнять, под ним он должен ввести имя пользователя и пароль и нажать «ОК». Однако доступ к публичным абонентам - это только метод «входа». Они не знают, как «он» входит в систему ». Что конкретно не является гибким в этом? – Arran

+0

Кроме того, последний подход - это то, что планировал архитектор шаблона Page Object. Первый подход, по его определению, не является объектом страницы. – JimEvans

+0

как же вы могли бы сделать такой подход достаточно гибким, чтобы можно было проверять вещи прежде, чем вы нажмете submit? Например, скажите, что вы заполняете форму, а затем получаете предварительный просмотр, и хотите проверить различные элементы этого предварительного просмотра? Вы не хотели бы делать это каждый тест, а только в конкретных. –

ответ

1

Определение объекта страницы: «Объект PageObject не обязательно представляет собой целую страницу. Он может представлять собой раздел, который много раз появляется на сайте или на странице, например, навигация по сайту».

Клавиши точек на PageObject:

- The public methods represent the services that the page offers 
- Try not to expose the internals of the page 
- Generally don't make assertions 
- Methods return other PageObjects 
- Need not represent an entire page 
- Different results for the same action are modelled as different methods 

SOURCE

Ваши две настройки не PageObject, но есть некоторые общие черты.

+0

Что вы подразумеваете под словом «Ваши два параметра не являются PageObject, но есть некоторые общие черты».? –

0

Лично я предпочитаю использовать другой уровень абстракции, как:

public void typeEmail(String email){ 
     fillField(EMAIL_SELECTOR, email); 
    } 

и реализацию в классе SeleniumWrapper

public void fillField(WebElement selector, String text){ 
     driver.findElement(selector).sendKeys(text); 
    } 

Это делает код более красивым

Этот не имеет прямого отношения к PageObjects, но все же это способ префикса вашего кода, если вы не используете BDD, или ke yword-driven подход

Смежные вопросы