t.me/atinfo_chat Telegram группа по автоматизации тестирования

Ошибка запуска теста:Webdriver\SelenideElement\Page-object

Теги: #<Tag:0x00007f7484d61f28> #<Tag:0x00007f7484d61dc0> #<Tag:0x00007f7484d61c80> #<Tag:0x00007f7484d61b18> #<Tag:0x00007f7484d61988>

Доброго времени суток!
Скажу сразу, что имею крайне ограниченный опыт автоматизации и не сильно знаком с java и ООП :slight_smile:
Открывается пустое окно хрома, на нужный 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

1 Симпатия

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

@Before
public void setupBrowser() {
Configuration.browser = “chrome”;
System.setProperty(“webdriver.chrome.driver”, “C:\chromedriver.exe”);
}
public void setUp(){
Selenide.open(“http://www.rt.ru:8080/login”);
}

1 Симпатия

Спасибо большое, изменил.
Но теперь новая ошибка, добавил ее в описание темы.

Спасибо большое, изменил.
Но теперь новая ошибка, изменил описание темы.

ну так теперь у тебя локатор не правильный

1 Симпатия

Дело в том, что он даже не открывает окно браузера и выдает эту ошибку.
Локатор рабочий, но на всякий случай я пробовал xpath,css,текст, ошибка остается.

так у вас setUp() нету аннотации @Before

1 Симпатия

Исправил, но ошибка не изменилась.

у тебя код написан как попало. Выложи все классы так как у тебя они написаны, тогда можно будет судить

Понял в чем была проблема.
Теперь просит геко драйвер.
Но в Configuration.browser прописан хром.
Путь места где лежит хромдрайвер указан верно.

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

Спасибо. Документацию читал.
В коде же видно, что указываю chromedriver и прописываю к нему путь (Путь верный).
В чем еще может быть проблема?

Я думаю что ваше @Before в классе где нет @Test даже не вызывается при создании экземпляра класса. Поэтому оно и не понимает что вы указали хром и пробует открыть фаерфокс по дефолту.

Вопрос, где вы видели такую реализацию архитектуры тестов? И у вас не пейдж обджект, так как ваши методы не возвращают новые пейджи при переходе.

Вот в этом и вопрос :slight_smile:
Все это безобразие строил сам, пользуясь документацией по SelenideElement, мне показалось, это проще чем классический пейдж обджект.
Но учитывая, мои минимальные зания в этой области неудивительно, что тесты не проходят.

И мне вот интересно, возможно ли с этой архитектурой, что-то сделать, чтобы тесты проходили?
Или надо использовать классический подход с пейдж обджектом?

Нагорадить вы всегда успеете. В начале лучше используйте классику , используя Selenide. PageFactory использовать не обязательно.

1 Симпатия

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

Я думаю, что она повлечет за собой другие проблемы. Поэтому лучше использовать best practice. Ну а когда уровень увеличится понимания всего, то всегда можно вернуться.

Посмотрел последнюю версию - нормальный код, нормальные пэдж обжекты, должно работать.

Только локаторы неправильные.
Вот что такое “login-field” - это ID или класс?