Я пытаюсь создать тест JUnit, который требует, чтобы пользователь вошел в систему с учетной записью администратора. Чтобы сделать так, чтобы мне не нужно было повторять код, я выполнил тест Login
JUnit и GoToAdminPage
JUnit.
- Первый доступ к странице входа и входа в систему.
- Второй пытается получить доступ к меню, доступному только для администраторов, и предназначен для выбора прямо там, где первый отключается . Я хочу, чтобы
GoToAdminPage
начинался на той же странице и в той же среде, в которой заканчивается Login
.
Идея состоит в том, что путем создания автоматического теста Login
,Я могу использовать его для любого теста, который я хочу сделать в будущем, для которого требуются права администратора.
Я пытаюсь в первом вызове вызвать setUp()
из GoToAdminPage
. Однако это означает, что он запускает тестовый браузер для GoToAdminPage
, а затем немедленно запускает другой тестовый браузер для Login
, который закрывается, поскольку Login.tearDown()
содержит инструкцию driver.quit()
.
Что я хочупредназначен для GoToAdminPage
, ожидает, что он будет получен прямо на той же странице, Login
заканчивается, у него нет инструкции get
, поэтому он никогда не покидает начальную страницу Firefox.
Я уже пробовал пару вещей,Каждый из моих тестов наследует класс BasicTest
, который определяет несколько вещей (WebDriver, JS Executor, универсальные служебные функции и т. Д.). В этом классе я создал perform()
функцию, которая вызывает setUp()
и test()
.
Таким образом, в GoToAdminPage
все, что мне нужно было бы сделать, это вызвать Login.perform()
в GoToAdminPage.setUp()
и это технически позволило бы достичь того, что я хочу сделать. Тем не менее, это не так, и имеет тот же эффект, что я уже упоминал выше.
Просматривая в Интернете, я увидел, что я мог бы также сделать так, чтобы GoToAdminPage extends Login
, но это также имеет тот же результат.
Наконец, я попытался поместить весь процесс Login.test()
в отдельную функцию в Login
классе, который я мог бы вызвать внутри GoToAdminPage
, но это дает тот же результат.
В итоге, чтопохоже, что происходит, когда я вызываю другой тест JUnit внутри GoToLoginPage
, он выполняет тест, но делает это как отдельный тест .
То, что я хочу, это иметь возможность сделать все это одним большим тестом, где после того, как я позвонил Login
, я смогу взаимодействовать со страницей после входа в систему, когда мой пользователь вошел в систему. По сути, япросто хочу, чтобы GoToAdminPage
был расширением процесса Login
.
Возможно ли это?
Вот мой текущий код:
Login.java
public class Login extends BasicTest {
/**
* @throws java.lang.Exception
*/
@Before
public void setUp() throws Exception {
super.setUp();
driver.get(constants.connectionUrl);
}
/**
* @throws java.lang.Exception
*/
@After
public void tearDown() throws Exception {
super.tearDown();
}
@Test
public void test() throws Exception {
this.login(driver);
}
public void login(WebDriver d) throws InterruptedException {
...login process using webdriver....
}
}
GoToAdminPage.java
public class GoToAdminPage extends BasicTest {
Login Login = new Login();
/**
* @throws java.lang.Exception
*/
@Before
public void setUp() throws Exception {
super.setUp();
Login.login(driver);
}
/**
* @throws java.lang.Exception
*/
@After
public void tearDown() throws Exception {
super.tearDown();
}
@Test
public void test() throws Exception {
...post login test process...
}
}
Тем не менее, это имеет вышеупомянутый эффект.