2017-02-10 8 views
0

Возможно, это скорее вопрос Java, чем селен, но поскольку я очень новичок в Java, я не знаю ответа. Я пишу тесты селена с использованием объектной модели страницы. У меня есть страницы в одном классе, а тесты в другом. Тем не менее, я пытаюсь выполнить только PageFactory.initelements один раз в тестовом классе, так что я не должен добавить строку в каждом тесте (в этом классе, в любом случае, я хочу сделать что-то вроде этого:Selenium PageFactory: initelements один раз в классе?

import com.company.pages.LoginPage 

public class LoginTests { 

    LoginPage login = PageFactory.initElements(driver, LoginPage.class); 

    @Test 
    public void test1() { 
     login.method(); 
    } 

    @Test 
    public void test2() { 
     login.methodTwo(); 
    } 
} 

Но я продолжайте получать NullPointerException на объекте, который я определил в классе LoginPage. Это говорит мне, что страница никогда не была инициализирована. Но поскольку я относительно новичок в Java, я не знаю, как ее инициализировать. Спасибо за вашу помощь!

ответ

1

Попробуйте это:

LoginPage login; 

@Before 
public void beforeTest() { 
    login = PageFactory.initElements(driver, LoginPage.class); 
} 

По словам this:

аннотирования метод public void с @Before заставляет этот метод быть работать до T est.

Это поможет в сокращении многословия ваших тестов.

+0

Это на самом деле не сработало, но это привело меня к ответу. У меня есть определения моего драйвера в другом классе с использованием '@ BeforeMethod' TestNG, поэтому я добавил еще один' @ BeforeMethod' в фактический класс тестов, который запускается после первого, и помещаем туда код! – kroe761

1

Независимо от того, какая переменная, которую вы заявили, должна быть инициализирована до значения.

int a; // This is a declaration a = 0; // This is an initialization int b = 0; // This is a declaration and initialization

С точки зрения pageObejcts, рассматривая Домашняя страница как класс, вы можете инициализировать webelement ниже

private static WebElement element = null; 
+0

спасибо. Я это понимаю. Я говорю, что я * думал *, я инициализировал класс «LoginPage» в верхней части класса, но у меня все еще есть ошибка. – kroe761

+0

Точка 'PageFactory.initElements' заключается в том, что мне не нужно инициализировать отдельные элементы, но вместо этого инициализировать страницу и получить элементы со страницей. Если я включаю 'LoginPage login = PageFactory.initElements (driver, LoginPage.class)' в каждом '@ Test', код работает без проблем. Я просто надеялся инициализировать страницу только один раз за класс и сократить многословие тестов. – kroe761