Доброго времени суток!
Скажу сразу, что имею крайне ограниченный опыт автоматизации и не сильно знаком с java и ООП
Открывается пустое окно хрома, на нужный url не переходит, что подтверждают скриншоты.
Но вебдраивер думает, что он открыл нужную страницу и пишет, что не может найти необходимый элемент:
Element not found {login-field}
Expected: visible
Подскажите как нужно прописать аннотацию @Before, чтобы тест ее увидел?
public class LoginPage {
HomePage home = new HomePage();
@Before
public void setupBrowser() {
Configuration.browser = "chrome";
System.setProperty("webdriver.chrome.driver", "C:\\chromedriver.exe");
}
@Before
public void setUp(){
Selenide.open("http://www.rt.ru:8080/login");
}
public static class HomePage {
private SelenideElement login = $(By.id("login-field"));
private SelenideElement pass = $(By.id("pwd-field"));
private SelenideElement enter = $(By.id("login-btn"));
//login
public void adminRTK() {
this.login.sendKeys("admin");
this.pass.sendKeys("1111");
this.enter.click();
}
Ну и сам тест:
(Сам тест больше и методов больше, но я так понимаю, что везде одна и та же ошибка)
public class FirstTest {
LoginPage.HomePage home = new LoginPage.HomePage();
UserButtonPage.ButtonPage button = new UserButtonPage.ButtonPage();
@Test
public void userAdminRTK (){
home.adminRTK();
button.adminRTK();
}
Попробуйте перенести инициализацию элементов внутрь Вашего метода. Таким образом поиск элементов будет осуществляться уже после того как выполнится @Before
Дело в том, что он даже не открывает окно браузера и выдает эту ошибку.
Локатор рабочий, но на всякий случай я пробовал xpath,css,текст, ошибка остается.
У вас вызывается геко драйвер, потому что по дефолту Selenide пытается открыть фаерфокс. Надеюсь эта ссылка поможет вам. Я сам не работал с Selenide, но документация написана на хорошем уровне, поэтому не поленитесь - почитайте
Я думаю что ваше @Before в классе где нет @Test даже не вызывается при создании экземпляра класса. Поэтому оно и не понимает что вы указали хром и пробует открыть фаерфокс по дефолту.
Вот в этом и вопрос
Все это безобразие строил сам, пользуясь документацией по SelenideElement, мне показалось, это проще чем классический пейдж обджект.
Но учитывая, мои минимальные зания в этой области неудивительно, что тесты не проходят.
И мне вот интересно, возможно ли с этой архитектурой, что-то сделать, чтобы тесты проходили?
Или надо использовать классический подход с пейдж обджектом?
Я думаю, что она повлечет за собой другие проблемы. Поэтому лучше использовать best practice. Ну а когда уровень увеличится понимания всего, то всегда можно вернуться.