Удаленка для jenkins+selenide+selenoid+allure+docker спецов на 2-3 часа в день. 100% remote! Присоединиться к проекту

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

selenium
java
webdriver
selenide
testng
Теги: #<Tag:0x00007fedb8692460> #<Tag:0x00007fedb86922d0> #<Tag:0x00007fedb8692190> #<Tag:0x00007fedb8692000> #<Tag:0x00007fedb8691ec0>

(Иванов Иван Иваноч) #1

Доброго времени суток!
Скажу сразу, что имею крайне ограниченный опыт автоматизации и не сильно знаком с 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();
}

(Vladyslav Lopatynskyi) #2

Попробуйте перенести инициализацию элементов внутрь Вашего метода. Таким образом поиск элементов будет осуществляться уже после того как выполнится @Before


(Sergey Pirogov) #3

это вообще не правильный код в случае использования 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”);
}


(Иванов Иван Иваноч) #4

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


(Иванов Иван Иваноч) #5

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


(Sergey Pirogov) #7

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


(Иванов Иван Иваноч) #8

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


(Sergey Pirogov) #9

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


(Иванов Иван Иваноч) #10

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


(Sergey Pirogov) #11

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


(Иванов Иван Иваноч) #12

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


(Oleksii Ihnatiuk) #13

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


(Иванов Иван Иваноч) #14

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


(Oleksii Ihnatiuk) #16

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


(Oleksii Ihnatiuk) #17

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


(Иванов Иван Иваноч) #18

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

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


(Oleksii Ihnatiuk) #19

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


(Иванов Иван Иваноч) #20

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


(Oleksii Ihnatiuk) #21

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


(asolntsev) #22

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

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