2015-09-01 1 views
0

Я пишу код для проверки веб-страниц в java и получил вид, пойманный в моей собственной сети абстракции. Я использую Selenium, но на самом деле это не проблема.Прохождение классов без создания супермакета в java

У меня есть набор объектов страницы и набор тестовых классов junit. Но поскольку на веб-страницах много похожих элементов формы, я не хотел повторять каждый тест снова. Таким образом, я создал тестовые фрагменты, которые запускают тест junit. Тесты junit в основном просто вызывают методы в классах фрагментов. Теперь вот моя проблема: мне нужно передать объекты страницы в классы фрагментов, чтобы они могли действовать на веб-странице. Но так как каждый фрагмент должен проходить множество разных объектов страницы с очень разными наборами методов, у меня есть проблемы с абстракциями.

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

Есть ли лучший способ? Есть ли какой-либо дизайн, который мне еще предстоит изучить?

+0

Вопрос сам по себе не совсем ясен, не могли бы вы предоставить базовый пример того, что вы делаете? –

ответ

0

Там уверены лучшие способы. Вы, наверное, хотите посмотреть, чтобы капсулирования и композиции

Вы можете поместить поведение в своем классе, а также создавать различные классы страниц в композитах поведения.

Например, рассмотрите PageA и PageB. У них обоих есть некоторые общие элементы формы, но также и некоторые различия. Например, они совместно используют UserForm.

class PageA 
{ 
    Field username 
    Field password 
    //other fields specific to A 
} 

class PageB 
{ 
    Field username 
    Field password 
    //fields that are the userform 
    //otherfields specific to B 
} 

Вы видите, как A и B имеют определенные поля формы.

Вы можете, но «поля, которые являются пользовательской формой» в подклассе, и сделать PageA и PageB, содержат UserForm.

class PageA 
{ 
    UserFormFields userformfields 
    //other fields specific to A 
} 

class PageB 
{ 
    UserFormFields userformfields 
    //otherfields specific to B 
} 

Ваш тест может проверить UserFormFields с одним набором кода, так как и страница A Страница B имеют те же UserFormFields. Таким образом, вам не нужно переписывать этот фрагмент кода. Логика для UserFormFields может быть в своем классе.

+0

Спасибо, ты посадил меня на правильный путь. Я могу поместить то, что вы называете userFormFields в интерфейсы, и вместо передачи объекта страницы как типа класса передаю его как интерфейс. –

+0

Теперь мне нужно передать одну и ту же веб-страницу несколько раз на мои фрагменты, раз для каждой группировки полей, но все это еще намного яснее –

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